このデザインは、ナレッジ ポイント Java クラス、オブジェクト、配列に基づいて開発された小さなバックギャモン ゲーム プログラムです。ゲームの開始時に、開始する黒または白のチェスを選択し、チェス盤の最初の座標にチェスの駒を置き、次に順番にチェスの駒を配置するということを、一方の側が最初に 5 つの駒を接続するまで続けます。チェス盤の縦、横、または斜めの方向にラインが並んだ場合、その側がゲームに勝ちます。
1. チェス盤は 10*10 グリッドになるように設計されています。チェス盤のタイプは Chess[][] 2 次元配列で、属性 String chessType が含まれます。チェス盤の最初の chessType 値は「➕」です。
2. 2 次元配列を初期化する
3. プレーヤーが白と黒の円を選択した後、チェスを開始します。プレイするチェスの駒の行と列の座標を入力すると、黒と白のチェス駒が順番に配置され、片側に 5 つの駒が並ぶか、ボードがいっぱいになるとゲームが終了します (5 つある側)連続した駒が勝ちとなり、ボード全体が引き分けとなります)。
4. 配置が成功するたびに、その位置を中心とした 8 方向 (上、下、左、右、左上、左下、右上、右下) に同じ色のチェスの駒があるかどうかを直ちに判断します。 If ピースが 5 つつながるとゲームが終了し、対応する情報が出力されます。
5. ゲームの一方が勝利すると、勝利情報が表示されます。プログラムの表面から見ると、これは 2 次元平面マップであるため、データは 2 次元配列で表されます。配列の 2 つの添え字はチェス盤上の位置を表すことができます。配列要素の値は、チェス盤の状態には、それぞれ 3 つの状況があり、⭕ は白チェス、● は黒チェス、➕ はマス目を表します。
1. チェスの駒
/** * @author hudongsheng * @date 2020/10/29 - 9:28 */ public class ChessType { private String chessType; private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public ChessType() { } public String getChessType() { return chessType; } public void setChessType(String chessType) { this.chessType = chessType; } }
2. チェスのプレイ
/** * @author hudongsheng * @date 2020/10/29 - 9:27 */ public class Gobang { private int size = 1; private ChessType[][] chessTypes; private int row; private int colum; private int x; private int y; //创建一个棋盘 public Gobang(int row,int colum){ this.row = row; this.colum = colum; chessTypes = new ChessType[row][colum]; } //初始化棋盘 public void initChessType(){ for(int i = 0; i< chessTypes.length; i++){ for (int j = 0; j< chessTypes[i].length; j++){ chessTypes[i][j] = new ChessType(); chessTypes[i][j].setChessType("➕"); } } } //下白棋 public void setWhiteChess(int x,int y){ chessTypes[x][y].setChessType("⭕"); } //下黑棋 public void setBlackChess(int x,int y){ chessTypes[x][y].setChessType("●"); } //判断是否胜利 public boolean checkWin(int i,int j) { // TODO Auto-generated method stub boolean flag = false; //判断纵向是否有五个棋子是相同的颜色 int count1 = 1;//相同颜色棋子的个数 String color = chessTypes[i][j].getChessType(); //刚下的棋子的颜色 int a = 1; //棋子索引的增量 while((i+a)<row && color == chessTypes[i+a][j].getChessType()){ count1++; a++; } a = 1; while((i-a)>=0 && color == chessTypes[i-a][j].getChessType()){ count1++; a++; } if(count1 >= 5){ flag = true; } //判断纵向是否有五个棋子是相同的颜色 int count2 = 1; a = 1; while((j+a)<colum && color == chessTypes[i][j+a].getChessType()){ count2++; a++; } a = 1; while((j-a)>=0 && color == chessTypes[i][j-a].getChessType()){ count2++; a++; } if(count2 >= 5){ flag = true; } //右上 左下 是否有五个棋子是相同的颜色 int count3 = 1; a = 1; while((i+a)<row && (j-a)>=0 && color == chessTypes[i+a][j-a].getChessType()){ count3++; a++; } a = 1; while((i-a)>=0 && (j+a)<colum && color == chessTypes[i-a][j+a].getChessType()){ count3++; a++; } if(count3 >= 5){ flag = true; } //左上 右下 是否有五个棋子是相同的颜色 int count4 = 1; a = 1; while((i-a)>0 && (j-a)>=0 && color == chessTypes[i-a][j-a].getChessType()){ count4++; a++; } a = 1; while((i+a)<row && (j+a)<colum && color == chessTypes[i+a][j+a].getChessType()){ count4++; a++; } if(count4 >= 5){ flag = true; } return flag; } //落子后打印棋盘 public void print(){ for(int i = 0; i< chessTypes.length; i++){ for (int j = 0; j< chessTypes[i].length; j++){ System.out.print(chessTypes[i][j].getChessType()); } System.out.println(); } } }
3.テスト
** * @author hudongsheng * @date 2020/10/29 - 9:27 */ public class Test { public static void main(String[] args) { boolean flag = true; int x; int y; Gobang gobang = new Gobang(10,10); Scanner scanner = new Scanner(System.in); gobang.initChessType(); //下棋 System.out.println("黑棋执先"); while (true){ gobang.print(); System.out.println("请输入下黑棋的坐标:"); x = scanner.nextInt(); y = scanner.nextInt(); gobang.setBlackChess(x,y); if(gobang.checkWin(x,y)){ gobang.print(); System.out.println("黑棋胜!"); break; } gobang.print(); System.out.println("请输入下白棋的坐标:"); x = scanner.nextInt(); y = scanner.nextInt(); gobang.setWhiteChess(x,y); if(gobang.checkWin(x,y)){ gobang.print(); System.out.println("白棋胜!"); break; } } } }
以上がJava でシンプルなインターフェースのないバックギャモンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。