欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程

 更新時(shí)間:2021年10月10日 10:07:36   作者:nevertoolate!  
這篇文章主要為大家詳細(xì)介紹了Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Java實(shí)現(xiàn)五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.圖形化界面的創(chuàng)建

1.1創(chuàng)建JFrame窗體容器

1)JFrame窗體需要設(shè)置基本的大小、布局、默認(rèn)的關(guān)閉方式,以及最重要的設(shè)置可見(jiàn)。

1.2在JFrame上添加組件,用來(lái)繪制棋盤(pán)棋子和游戲操作。

1)棋盤(pán)棋子的繪制:自定義一個(gè)類(lèi)去繼承JPanel,把繪制棋盤(pán)和棋子的方法重寫(xiě)進(jìn)入paint()方法里,這樣當(dāng)窗體發(fā)生變化(放大、縮小、移動(dòng)等操作時(shí),棋盤(pán)棋子不會(huì)消失,棋局得以保存)。

2)悔棋、認(rèn)輸?shù)炔僮魍ㄟ^(guò)JButton按鈕添加鼠標(biāo)監(jiān)聽(tīng)來(lái)實(shí)現(xiàn)。

2.關(guān)鍵點(diǎn)的實(shí)現(xiàn)

(使用六個(gè)類(lèi)實(shí)現(xiàn)背后邏輯,UI類(lèi),DrawChessBoard類(lèi),GameMouse類(lèi),QiZi類(lèi),Location類(lèi)以及AI類(lèi))。

2.1在棋盤(pán)點(diǎn)擊的位置繪制棋子

1)給棋盤(pán)添加鼠標(biāo)監(jiān)聽(tīng),獲取點(diǎn)擊位置的坐標(biāo)

 UI類(lèi)負(fù)責(zé)初始化1中的圖形化界面,并給DrawChessBoard類(lèi)添加GameMouse類(lèi)的監(jiān)聽(tīng)。這樣在鼠標(biāo)點(diǎn)擊棋盤(pán)時(shí)通過(guò)重寫(xiě)GameMouse類(lèi)的mouseClicked(),就可以獲取鼠標(biāo)在棋盤(pán)上點(diǎn)擊的像素坐標(biāo)。

 2)坐標(biāo)轉(zhuǎn)化成二位數(shù)組中的坐標(biāo)

保存棋盤(pán)上所有棋子位置用到QiZi類(lèi)中的int[][] memory二維數(shù)組,這樣把像素坐標(biāo)轉(zhuǎn)化為二維數(shù)組中的坐標(biāo),并附上棋子顏色對(duì)應(yīng)的值,就可以保存棋盤(pán)上所有棋子的位置。

3)在棋盤(pán)上畫(huà)出棋子

在DrawChessBoard類(lèi)paint()方法中遍歷QiZi類(lèi)中的int[][] memory二維數(shù)組非零值,就可以在相應(yīng)位置調(diào)用畫(huà)筆方法畫(huà)出黑白棋子。

2.2判斷輸贏

1)下完棋子后,將下棋位置保存到QiZi類(lèi)的int[][] memory二維數(shù)組中后,就可以以該點(diǎn)為中心計(jì)算其四個(gè)方向上連續(xù)棋子的數(shù)目,達(dá)到五個(gè)則通過(guò)JOptionPane類(lèi)生成彈窗確定贏家。

2.2悔棋功能和提示最后落子位置功能的實(shí)現(xiàn)

1)每次成功下一顆棋子,就可以創(chuàng)建一個(gè)保存了棋子坐標(biāo)的Location對(duì)象,并將該對(duì)象添加到 QiZi類(lèi)的ArrayList或者Stack容器當(dāng)中,當(dāng)鼠標(biāo)點(diǎn)擊悔棋Button后,清除QiZi類(lèi)的int[][] memory二維數(shù)組相應(yīng)位置的數(shù)值(將之改為0即可),然后棋盤(pán)重繪棋子,就可以完成悔棋的效果。

2)同時(shí)可以找到容器中最后落子的位置,并在棋盤(pán)相應(yīng)的坐標(biāo)出畫(huà)出最后落子提示。

2.3開(kāi)始、認(rèn)輸?shù)膶?shí)現(xiàn)

1)開(kāi)始游戲,即重置游戲,將棋子類(lèi)的相應(yīng)屬性清零即可,比如int[][] memory二維數(shù)組(即棋譜),owener=1(重置為白色),以及清楚棋盤(pán)上面的棋子。

 2)認(rèn)輸就可以判斷當(dāng)前QiZi.owner的值,來(lái)判斷輸?shù)囊环讲⒔o出提示即可。

2.4AI的實(shí)現(xiàn)

1)默認(rèn)AI為黑方的情況下,需要在白色方落子之后調(diào)用AI下黑色棋子,所以在需要在GameMouse中下白棋的if分支中調(diào)用AI方法

2)AI的厲害與否取決于其設(shè)計(jì),在這里提供一個(gè)思路:設(shè)置一個(gè)棋型對(duì)照表,給不同棋型賦值(如1111,代表白子四連,權(quán)重較高),輪到AI時(shí),可以根據(jù)該表計(jì)算棋盤(pán)上每一個(gè)空位在八個(gè)方向總的權(quán)重大小,在權(quán)重最大處落子即可。棋型對(duì)照表中不同棋的權(quán)重設(shè)置,可以通過(guò)python等分析大量棋局來(lái)獲取,以此來(lái)訓(xùn)練AI,當(dāng)權(quán)重設(shè)置越合理,AI就越強(qiáng)。

3.其他功能

下子的動(dòng)畫(huà)效果音效等可以通過(guò)開(kāi)辟不同的線程來(lái)實(shí)現(xiàn),而網(wǎng)絡(luò)對(duì)戰(zhàn)則可增加網(wǎng)絡(luò)通信相關(guān)模塊即可。

4.源碼

package wuziqi925;
 
import javax.swing.*;
import java.awt.*;
 
public class GameUI {
    public static void main(String[] args) {
        GameUI gameUI=new GameUI();
        gameUI.showUI();
    }
 
    public void showUI(){
        //創(chuàng)建棋子對(duì)象
        QiZi qizi=new QiZi();
        //獲取窗體
        JFrame jFrame=new JFrame();
        jFrame.setSize(1000,795);
        jFrame.setDefaultCloseOperation(3);
        jFrame.setLocationRelativeTo(null);
        jFrame.setLayout(null);
        jFrame.setTitle("五子棋");
        jFrame.setResizable(false);
 
        //窗體添加棋盤(pán)面板
        DrawChessBoard chessBoard=new DrawChessBoard(qizi);
        jFrame.add(chessBoard);
        chessBoard.setSize(760,760);
        chessBoard.setBackground(Color.ORANGE);
 
 
        //測(cè)試JFrame框架像素大小,Insets[top=32,left=3,bottom=3,right=3]
        //System.out.println(jFrame.getInsets());
 
        //窗體添加選項(xiàng)面板,用來(lái)畫(huà)棋盤(pán)
        JPanel bp=new JPanel();
        bp.setSize(236,760);
        bp.setBackground(Color.lightGray);
        bp.setLocation(760,0);
        bp.setLayout(null);
        jFrame.add(bp);
 
 
        //選項(xiàng)面板添加按鈕
        JButton start=new JButton("開(kāi)始");
        start.setBackground(Color.white);
        start.setFont(new Font("華文行楷",Font.BOLD,20));
        start.setBounds(40,350,150,50);
 
        JButton quit=new JButton("認(rèn)輸");
        quit.setBackground(Color.white);
        quit.setFont(new Font("華文行楷",Font.BOLD,20));
        quit.setBounds(40,440,150,50);
 
        JButton undo=new JButton("悔棋");
        undo.setBackground(Color.white);
        undo.setFont(new Font("華文行楷",Font.BOLD,20));
        undo.setBounds(40,530,150,50);
 
        bp.add(start);
        bp.add(quit);
        bp.add(undo);
 
        //選擇模式選項(xiàng)
        ButtonGroup bg=new ButtonGroup();
        JRadioButton rrdz=new JRadioButton("玩家對(duì)戰(zhàn)");
        JRadioButton rjdz=new JRadioButton("人機(jī)對(duì)戰(zhàn)");
        rrdz.setSize(120,30);
        rrdz.setLocation(55,60);
        rrdz.setFont(new Font("華文行楷",Font.BOLD,20));
        rrdz.setVisible(true);
        rjdz.setSize(120,30);
        rjdz.setLocation(55,90);
        rjdz.setFont(new Font("華文行楷",Font.BOLD,20));
        rjdz.setVisible(true);
        bg.add(rjdz);
        bg.add(rrdz);
        bp.add(rjdz);
        bp.add(rrdz);
        bp.setVisible(true);
 
        //設(shè)置窗體可見(jiàn)
        jFrame.setVisible(true);
 
 
        AI ai=new AI(qizi,chessBoard);
        //獲取棋盤(pán)的鼠標(biāo)監(jiān)聽(tīng)和畫(huà)筆并將該畫(huà)筆添加給鼠標(biāo)
        Graphics g1=chessBoard.getGraphics();
        GameMouse gameMouse=new GameMouse(qizi,chessBoard,ai);
 
        chessBoard.addMouseListener(gameMouse);
        start.addActionListener(gameMouse);
        quit.addActionListener(gameMouse);
        undo.addActionListener(gameMouse);
        rrdz.addActionListener(gameMouse);
        rjdz.addActionListener(gameMouse);
    }
}
package wuziqi925;
 
import javax.swing.*;
import java.awt.*;
 
 
public class DrawChessBoard extends JPanel {
    QiZi qiZi;
    private static int LINE_NUM = 15;
    private static int MARGIN_WIDTH = 30;
    public static int CELL_SIZE = 50;
 
    public DrawChessBoard(QiZi qiZi) {
        this.qiZi = qiZi;
    }
 
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        //畫(huà)棋盤(pán)
        for (int i = 0; i < LINE_NUM; i++) {
            g.drawLine(MARGIN_WIDTH, MARGIN_WIDTH + i * CELL_SIZE, MARGIN_WIDTH + (LINE_NUM - 1) * CELL_SIZE, MARGIN_WIDTH + i * CELL_SIZE);
            g.drawLine(MARGIN_WIDTH + i * CELL_SIZE, MARGIN_WIDTH, MARGIN_WIDTH + i * CELL_SIZE, MARGIN_WIDTH + (LINE_NUM - 1) * CELL_SIZE);
        }
        //畫(huà)棋盤(pán)上的點(diǎn)
        g.fillOval(CELL_SIZE*3+22,CELL_SIZE*3+22,16,16);
        g.fillOval(CELL_SIZE*11+22,CELL_SIZE*3+22,16,16);
        g.fillOval(CELL_SIZE*3+22,CELL_SIZE*11+22,16,16);
        g.fillOval(CELL_SIZE*11+22,CELL_SIZE*11+22,16,16);
        //畫(huà)棋子
        int[][] a = qiZi.memory;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] == 1)    {
                    g.setColor(Color.white);
                    g.fillOval(CELL_SIZE * i + 7, CELL_SIZE * j + 7, 46, 46);
                } else if (a[i][j] == 2) {
                    g.setColor(Color.black);
                    g.fillOval(CELL_SIZE * i + 7, CELL_SIZE * j + 7, 46, 46);
                }
            }
        }
        //畫(huà)出最后一步棋子的位置上的十字架
        if (qiZi.arr.size() > 0) {
            Graphics2D g1=(Graphics2D)g;
            g1.setColor(Color.red);
            g1.setStroke(new BasicStroke(3.0f));
 
            Location l = qiZi.arr.get(qiZi.arr.size() - 1);
            g1.drawLine(CELL_SIZE * l.x + MARGIN_WIDTH - 8, CELL_SIZE * l.y + MARGIN_WIDTH, CELL_SIZE * l.x + MARGIN_WIDTH + 8, CELL_SIZE * l.y + MARGIN_WIDTH);
            g1.drawLine(CELL_SIZE * l.x + MARGIN_WIDTH, CELL_SIZE * l.y + MARGIN_WIDTH - 8, CELL_SIZE * l.x + MARGIN_WIDTH, CELL_SIZE * l.y + MARGIN_WIDTH + 8);
        }
    }
}
package wuziqi925;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
public class GameMouse implements MouseListener, ActionListener {
    QiZi qizi;
    DrawChessBoard drawChessBoard;
    AI ai;
 
    public GameMouse() {
    }
 
    public GameMouse( QiZi qiZi, DrawChessBoard drawChessBoard,AI ai) {
        this.qizi = qiZi;
        this.drawChessBoard=drawChessBoard;
        this.ai=ai;
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        int cellSize= DrawChessBoard.CELL_SIZE;
        int x=e.getX();
        int xx=0;
        int y=e.getY();
        int yy=0;
 
        //在點(diǎn)擊位置畫(huà)棋子,并將下子位置轉(zhuǎn)換成棋子在二維數(shù)組中的坐標(biāo)
        if (qizi.owner==1) {
            if ((x - 30) % cellSize > 25 & (y - 30) % cellSize > 25) {
                xx=(x - 30) / cellSize + 1;
                yy=(y - 30) / cellSize + 1;
            } else if ((x - 30) % cellSize > 25 & (y - 30) % cellSize < 25) {
                xx=(x - 30) / cellSize + 1;
                yy=(y - 30) / cellSize;
            } else if ((x - 30) % cellSize < 25 & (y - 30) % cellSize > 25) {
                xx=(x - 30) / cellSize;
                yy=(y - 30) / cellSize + 1;
            } else if ((x - 30) % cellSize < 25 & (y - 30) % cellSize < 25) {
                xx=(x - 30) / cellSize;
                yy=(y - 30) / cellSize;
            }
            if(qizi.memory[xx][yy]==0) {//判斷無(wú)子
                qizi.x=xx;
                qizi.y=yy;
                qizi.memory[qizi.x][qizi.y] = qizi.owner;//下棋子并將棋子放入容器
                Location location=new Location(qizi);//記錄剛下的棋子位置順序
                qizi.arr.add(location);
                drawChessBoard.repaint();//繪制剛下的棋子
                qizi.judgeWinner();//判斷輸贏
 
                qizi.owner=2;//交換棋權(quán)
            }
            if (ai.state){
                ai.initiateAI();
            }
 
        }else {
            qizi.owner=2;
            if ((x - 30) % cellSize > 25 & (y - 30) % cellSize > 25) {
                xx=(x - 30) / cellSize + 1;
                yy=(y - 30) / cellSize + 1;
            } else if ((x - 30) % cellSize > 25 & (y - 30) % cellSize < 25) {
                xx=(x - 30) / cellSize + 1;
                yy=(y - 30) / cellSize;
            } else if ((x - 30) % cellSize < 25 & (y - 30) % cellSize > 25) {
                xx=(x - 30) / cellSize;
                yy=(y - 30) / cellSize + 1;
            } else if ((x - 30) % cellSize < 25 & (y - 30) % cellSize < 25) {
                xx=(x - 30) / cellSize;
                yy=(y - 30) / cellSize;
            }
            if(qizi.memory[xx][yy]==0) {
                qizi.x=xx;
                qizi.y=yy;
                qizi.memory[qizi.x][qizi.y] = qizi.owner;//下棋子并將棋子放入容器
                Location location=new Location(qizi);//記錄剛下的棋子位置順序
                qizi.arr.add(location);
                drawChessBoard.repaint();//繪制剛下的棋子
                qizi.judgeWinner();//判斷輸贏
 
                qizi.owner=1;//交換棋權(quán)
            }
        }
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        int cellSize= DrawChessBoard.CELL_SIZE;
        String s=e.getActionCommand();
        JOptionPane tc=new JOptionPane();
 
        //悔棋功能的實(shí)現(xiàn)
        if (s.equals("悔棋")){
            if (qizi.arr.size()>0) {
                Location l = qizi.arr.get(qizi.arr.size() - 1);
                qizi.memory[l.x][l.y] = 0;
                qizi.arr.remove(qizi.arr.size() - 1);
 
                if (qizi.owner == 1) {
                    qizi.owner = 2;
                } else if (qizi.owner == 2) {
                    qizi.owner = 1;
                }
            }else {
                tc.showMessageDialog(null,"無(wú)棋可毀,請(qǐng)下棋!");
            }
            //刷新棋盤(pán)
            drawChessBoard.repaint();
        }
 
        if (s.equals("開(kāi)始")){
            qizi.owner=1;
            qizi.memory=new int[15][15];
            qizi.arr.clear();
            qizi.win=false;
            drawChessBoard.repaint();
        }
 
        if(s.equals("認(rèn)輸")){
            int whiteCount=0;
            int blackCount=0;
            for (int i = 0; i < qizi.memory.length; i++) {
                for (int j = 0; j < qizi.memory[i].length; j++) {
                    if (qizi.memory[i][j]==1){
                        whiteCount++;
                    }else if (qizi.memory[i][j]==2){
                        blackCount++;
                    }
                }
            }
            if (whiteCount==blackCount){
                tc.showMessageDialog(null,qizi.owner==1 ?"黑方投降,白方勝!":"白方投降,黑方勝!");
            }else if(whiteCount>blackCount){
                tc.showMessageDialog(null,"黑方投降,白方勝!");
            }else {
                tc.showMessageDialog(null,"白方投降,黑方勝!");
            }
        }
        if (s.equals("人機(jī)對(duì)戰(zhàn)")){
            ai.state=true;
 
        }
        if (s.equals("玩家對(duì)戰(zhàn)")){
            ai.state=false;
 
        }
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
 
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
 
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
 
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
 
    }
 
 
}
package wuziqi925;
 
import javax.swing.*;
import java.util.ArrayList;
 
public class QiZi {
    int x;
    int y;
    int owner=1;//1 代表白色,2代表黑色
    int[][] memory;
    ArrayList <Location>arr;
    boolean win=false;
 
    public QiZi() {
        memory=new int[15][15];
        arr=new ArrayList<>(50);
    }
 
    public void judgeWinner() {
        JOptionPane tc=new JOptionPane();
        int count1=0;
        int count2=0;
        int count3=0;
        int count4=0;
 
        //豎直方向檢測(cè)
        for (int i = y-1; i >-1 ; i--) {
            if (memory[x][i]==owner){
                count1++;
            }else {
                break;
            }
        }
        for (int i = y+1; i <15; i++) {
            if (memory[x][i]==owner){
                count1++;
            }else {
                break;
            }
        }
        if (count1 > 3){
            tc.showMessageDialog(null,owner==1?"白方勝":"黑方勝");
            win=true;
            return;
        }
 
        //水平方向檢測(cè)
        for (int i = x-1; i >-1 ; i--) {
            if (memory[i][y]==owner){
                count2++;
            }else {
                break;
            }
        }
        for (int i = x+1; i <15; i++) {
            if (memory[i][y]==owner){
                count2++;
            }else {
                break;
            }
        }
        if (count2 > 3){
            tc.showMessageDialog(null,owner==1?"白方勝":"黑方勝");
            win=true;
            return;
        }
 
        //在\方向上檢測(cè)
        int yy=y;
        for (int i = x+1; i <15; i++) {
            if(yy==14){
                break;
            }
            yy++;
            if (memory[i][yy]==owner){
                count3++;
            }else {
                break;
            }
        }
        yy=y;
        for (int i = x-1; i >-1; i--) {
            if (yy==0){
                break;
            }
            yy--;
            if (memory[i][yy]==owner){
                count3++;
            }else {
                break;
            }
 
        }
        if (count3 > 3){
            tc.showMessageDialog(null,owner==1?"白方勝":"黑方勝");
            win=true;
            return;
        }
 
        //在/方向上檢測(cè)
        yy=y;
        for (int i = x+1; i <15; i++) {
            if(yy==0){
                break;
            }
            yy--;
            if (memory[i][yy]==owner){
                count4++;
            }else {
                break;
            }
        }
        yy=y;
        for (int i = x-1; i >-1; i--) {
            if(yy==14){
                break;
            }
            yy++;
            if (memory[i][yy]==owner){
                count4++;
            }else {
                break;
            }
        }
        if (count4 > 3){
            tc.showMessageDialog(null,owner==1?"白方勝":"黑方勝");
            win=true;
            return;
        }
    }
}
package wuziqi925;
 
public class Location {
    QiZi qiZi;
    int x;
    int y;
 
    public Location(QiZi qiZi) {
        //記錄棋譜
        x=qiZi.x;
        y=qiZi.y;
    }
 
    public Location(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
package wuziqi925;
 
import java.util.*;
 
public class AI {
    boolean state=false;//true為on false為off
    QiZi qiZi;
    //存儲(chǔ)棋型權(quán)值
    private HashMap<String,Integer> playValueTable=new HashMap<>();
    //存儲(chǔ)每個(gè)可下點(diǎn)的權(quán)重大小
    private HashMap<Location,Integer> locationsAndValues=new HashMap<>();
    DrawChessBoard drawChessBoard;
    int AIDO=0;
 
    public AI(QiZi qiZi,DrawChessBoard drawChessBoard){
        this.drawChessBoard=drawChessBoard;
        this.qiZi=qiZi;
        //1代表該方向?yàn)榘追狡遄樱ㄍ婕遥?代表該方向?yàn)楹诜狡遄樱ˋI)
        playValueTable.put("22221",100);
        playValueTable.put("2222",100);
        playValueTable.put("11112",99);
        playValueTable.put("1111",0);
 
        playValueTable.put("2221",40);
        playValueTable.put("222",45);
        playValueTable.put("1112",35);
        playValueTable.put("111",46);
 
        playValueTable.put("22",25);
        playValueTable.put("221",20);
        playValueTable.put("11",15);
        playValueTable.put("112",10);
 
        playValueTable.put("21",5);
        playValueTable.put("2",10);
        playValueTable.put("1",8);
        playValueTable.put("12",2);
    }
 
    public void initiateAI(){
        if (qiZi.win){
            return;
        }
        int chessValue=0;
        //遍歷棋盤(pán)找到空點(diǎn)
        for (int i = 0; i <qiZi.memory.length; i++) {
            for (int j = 0; j < qiZi.memory[i].length; j++) {
                //計(jì)算qiZi.memory[i][j](空點(diǎn))位置的權(quán)值,保存ij位點(diǎn)
                if (qiZi.memory[i][j]==0){
                    Location l=new Location(i,j);
                    chessValue=countValue(i,j);
                    locationsAndValues.put(l,chessValue);
                }
            }
        }
        //System.out.println(chessValue);
        //判斷權(quán)值最大的點(diǎn),獲取該點(diǎn)的坐標(biāo)值并傳入qiZi.memory
        //按照value對(duì)HashMap<Location,Integer> locationsAndValues進(jìn)行排序找到最大值
        Set<Map.Entry<Location,Integer>> set=locationsAndValues.entrySet();
        List<Map.Entry<Location,Integer>> list=new ArrayList<>(set);
        list.sort(new Comparator<Map.Entry<Location, Integer>>() {
            @Override
            public int compare(Map.Entry<Location, Integer> o1, Map.Entry<Location, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
        });
        //排序完畢取最大//獲取最大權(quán)重值對(duì)應(yīng)的空點(diǎn)坐標(biāo)
        Map.Entry<Location,Integer> maxSet=list.get(0);
        Location toDo=maxSet.getKey();
 
        qiZi.x= toDo.x;
        qiZi.y= toDo.y;
        qiZi.memory[qiZi.x][qiZi.y]=qiZi.owner;
        Location location=new Location(qiZi);//記錄剛下的棋子位置順序
        qiZi.arr.add(location);
        drawChessBoard.repaint();//繪制剛下的棋子
        qiZi.judgeWinner();//判斷輸贏
        qiZi.owner=1;//交換棋權(quán)
        System.out.println(++AIDO);
        locationsAndValues.clear();
    }
 
    private int countValue(int i,int j) {
        int totalValue=0;
        StringBuilder s1=new StringBuilder();
        StringBuilder s2=new StringBuilder();
        StringBuilder s3=new StringBuilder();
        StringBuilder s4=new StringBuilder();
        StringBuilder s5=new StringBuilder();
        StringBuilder s6=new StringBuilder();
        StringBuilder s7=new StringBuilder();
        StringBuilder s8=new StringBuilder();
        //八個(gè)方向去去判定
        //North
        for (int k = j-1; k >-1 ; k--) {
            if (qiZi.memory[i][k]==1){
                s1.append(1);
            }else if (qiZi.memory[i][k]==2) {
                s1.append(2);
            }else {
                break;
            }
        }
        int count1=playValueTable.get(s1.toString())==null?0:playValueTable.get(s1.toString());
        totalValue+=count1;
 
        //South
        for (int k = j+1; k <15; k++) {
            if (qiZi.memory[i][k]==1){
                s2.append(1);
            }else if (qiZi.memory[i][k]==2) {
                s2.append(2);
            }else {
                break;
            }
        }
        int count2=playValueTable.get(s2.toString())==null?0:playValueTable.get(s2.toString());
        totalValue+=count2;
 
        //West
        for (int k = i-1; k >-1 ; k--) {
            if (qiZi.memory[k][j]==1){
                s3.append(1);
            }else if (qiZi.memory[k][j]==2) {
                s3.append(2);
            }else {
                break;
            }
        }
        int count3=playValueTable.get(s3.toString())==null?0:playValueTable.get(s3.toString());
        totalValue+=count3;
 
        //East
        for (int k = i+1; k <15; k++) {
            if (qiZi.memory[k][j]==1){
                s4.append(1);
            }else if (qiZi.memory[k][j]==2) {
                s4.append(2);
            }else {
                break;
            }
        }
        int count4=playValueTable.get(s4.toString())==null?0:playValueTable.get(s4.toString());
        totalValue+=count4;
 
        //SE
        int yy=j;
        for (int k = i+1; k < 15; k++) {
            if(yy==14){
                break;
            }
            yy++;
            if (qiZi.memory[k][yy]==1){
                s5.append(1);
            }else if (qiZi.memory[k][yy]==2) {
                s5.append(2);
            }else {
                break;
            }
        }
        int count5=playValueTable.get(s5.toString())==null?0:playValueTable.get(s5.toString());
        totalValue+=count5;
 
        //NW
        yy=j;
        for (int k = i-1; k >-1; k--) {
            if(yy==0){
                break;
            }
            yy--;
            if (qiZi.memory[k][yy]==1){
                s6.append(1);
            }else if (qiZi.memory[k][yy]==2) {
                s6.append(2);
            }else {
                break;
            }
        }
        int count6=playValueTable.get(s6.toString())==null?0:playValueTable.get(s6.toString());
        totalValue+=count6;
 
        //NE
        yy=j;
        for (int k = i+1; k <15; k++) {
            if(yy==0){
                break;
            }
            yy--;
            if (qiZi.memory[k][yy]==1){
                s7.append(1);
            }else if (qiZi.memory[k][yy]==2) {
                s7.append(2);
            }else {
                break;
            }
        }
        int count7=playValueTable.get(s7.toString())==null?0:playValueTable.get(s7.toString());
        totalValue+=count6;
        //SW
        yy=j;
        for (int k = i-1; k >-1; k--) {
            if(yy==14){
                break;
            }
            yy++;
            if (qiZi.memory[k][yy]==1){
                s8.append(1);
            }else if (qiZi.memory[k][yy]==2) {
                s8.append(2);
            }else {
                break;
            }
        }
        int count8=playValueTable.get(s8.toString())==null?0:playValueTable.get(s8.toString());
        totalValue+=count8;
        return totalValue;
    }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java最常用的6個(gè)簡(jiǎn)單的計(jì)算題

    Java最常用的6個(gè)簡(jiǎn)單的計(jì)算題

    本篇文章給大家整理的在JAVA中最常用到的簡(jiǎn)單的計(jì)算題,對(duì)此有興趣的朋友可以測(cè)試參考下。
    2018-02-02
  • Java后臺(tái)處理Json格式數(shù)據(jù)的方法

    Java后臺(tái)處理Json格式數(shù)據(jù)的方法

    這篇文章主要介紹了Java后臺(tái)處理Json格式數(shù)據(jù)的方法的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 關(guān)于Java類(lèi)的構(gòu)造方法詳解

    關(guān)于Java類(lèi)的構(gòu)造方法詳解

    這篇文章主要介紹了關(guān)于Java類(lèi)的構(gòu)造方法詳解的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Java雙重MD5加密實(shí)現(xiàn)安全登錄

    Java雙重MD5加密實(shí)現(xiàn)安全登錄

    MD5對(duì)密碼進(jìn)行加密存儲(chǔ)是常見(jiàn)的一種加密方式,本文主要介紹了Java雙重MD5加密實(shí)現(xiàn)安全登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java算法實(shí)現(xiàn)紅黑樹(shù)完整代碼示例

    java算法實(shí)現(xiàn)紅黑樹(shù)完整代碼示例

    這篇文章主要介紹了java算法實(shí)現(xiàn)紅黑樹(shù)完整代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java效率提升神器之Guava-Joiner

    Java效率提升神器之Guava-Joiner

    這篇文章主要介紹了Java效率提升神器之Guava-Joiner,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • java代碼實(shí)現(xiàn)俄羅斯方塊

    java代碼實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了java代碼實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Java簡(jiǎn)單計(jì)算圓周率完整示例

    Java簡(jiǎn)單計(jì)算圓周率完整示例

    這篇文章主要介紹了Java簡(jiǎn)單計(jì)算圓周率,結(jié)合完整實(shí)例形式分析了Java計(jì)算圓周率的原理與操作技巧,代碼備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2018-05-05
  • Java并發(fā)之原子性 有序性 可見(jiàn)性及Happen Before原則

    Java并發(fā)之原子性 有序性 可見(jiàn)性及Happen Before原則

    一提到happens-before原則,就讓人有點(diǎn)“丈二和尚摸不著頭腦”。這個(gè)涵蓋了整個(gè)JMM中可見(jiàn)性原則的規(guī)則,究竟如何理解,把我個(gè)人一些理解記錄下來(lái)。下面可以和小編一起學(xué)習(xí)Java 并發(fā)四個(gè)原則
    2021-09-09
  • spring boot讀取Excel操作示例

    spring boot讀取Excel操作示例

    這篇文章主要介紹了spring boot讀取Excel操作,結(jié)合實(shí)例形式詳細(xì)分析了spring boot解析、讀取Excel相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11

最新評(píng)論