【问题标题】:Console-based Connect Four game - diagonal win checker algorithm基于控制台的连接四游戏 - 对角线获胜检查器算法
【发布时间】:2013-12-28 10:23:45
【问题描述】:

我或多或少是 Java 新手。

我正在用 java 制作一个基于控制台的 connect 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;
}

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

【问题讨论】:

标签: java algorithm for-loop multidimensional-array


【解决方案1】:

如果你想继续按照自己的方式做:

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

但是,使用循环(迭代方向)可能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    相关资源
    最近更新 更多