基于控制台的Connect Four游戏对角线获胜检查器算法



我或多或少是Java的新手。

我正在用java制作一个基于控制台的connect 4游戏,我已经差不多完成了,我只是在努力检查如何对角线获胜(对角线上连续四个棋子)。我的垂直/水平获胜跳棋运行良好,但我不知道如何为对角线跳棋做类似的事情。该板是一个2d阵列,打印在控制台上,为了检查是否获胜,我检查了四个相邻或上方的同一块。

以下是板代码:

private String board[][] = new String[8][8];

创建阵列

    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            board[i][j] = "( )";
        }
    }

用空白插槽填充板

void displayBoard() {
    for (int i = 1; i < 9; i++) {
        System.out.print(" " + i + " ");
    }
    System.out.println();
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            System.out.print(board[i][j]);
        }
        System.out.println();
    }
}

这是绞车检查

boolean winCheck1() {
    String p = "(" + piece1 + ")";
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 5; j++) {
            if ((board[i][j].equals(p) && board[i][j + 1].equals(p)
                    && board[i][j + 2].equals(p) && board[i][j + 3]
                    .equals(p))) {
                this.win1();
                return false;
            }
        }
    }
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 5; j++) {
            if ((board[j][i].equals(p) && board[j + 1][i].equals(p)
                    && board[j + 2][i].equals(p) && board[j + 3][i]
                    .equals(p))) {
                this.win1();
                return false;
            }
        }
    }
    this.play2();
    return false;
}

如有任何帮助,我们将不胜感激。谢谢

如果你想继续按自己的方式进行:

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if ((board[j][i].equals(p) && board[j + 1][i + 1].equals(p)
                && board[j + 2][i + 2].equals(p) && board[j + 3][i + 3]
                .equals(p))) {
            this.win1();
            return false;
        }
    }
}
for (int i = 3; i < 8; i++) {
    for (int j = 0; j < 5; j++) {
        if ((board[j][i].equals(p) && board[j + 1][i - 1].equals(p)
                && board[j + 2][i - 2].equals(p) && board[j + 3][i - 3]
                .equals(p))) {
            this.win1();
            return false;
        }
    }
}

然而,使用循环(遍历方向)可能会更好。

最新更新