Java でシンプルなインターフェースのないバックギャモンを実装する方法

WBOY
リリース: 2023-04-27 18:40:07
転載
1126 人が閲覧しました

プロジェクトの紹介:

このデザインは、ナレッジ ポイント 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート