基于控制台的连接四游戏 - 对角胜利检查算法

时间:2013-12-10 18:21:58

标签: java algorithm for-loop multidimensional-array

我或多或少是Java的新手。

我正在用java制作一个基于控制台的连接4游戏,我已经完成了,我只是在努力解决如何检查对角线胜利(对角线连续四个)。我的垂直/水平胜利跳棋工作正常,但我无法弄清楚如何为对角线检查做类似的事情。该板是一个二维阵列,打印到控制台,为了获得胜利,我检查了相同的四个相邻的一个或彼此相邻的。

以下是电路板代码:

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();
    }
}

这是winchecker

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;
}

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

如果你想继续这样做:

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;
        }
    }
}

然而,使用循环(迭代方向)可能更好。