Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于控制台的连接四局-对角赢检测器算法_Java_Algorithm_For Loop_Multidimensional Array - Fatal编程技术网

Java 基于控制台的连接四局-对角赢检测器算法

Java 基于控制台的连接四局-对角赢检测器算法,java,algorithm,for-loop,multidimensional-array,Java,Algorithm,For Loop,Multidimensional Array,我对Java多少有些陌生 我正在用java制作一个基于控制台的connect 4游戏,我已经做得差不多了,我只是在挣扎如何检查对角线上的胜利(对角线上连续四个棋子)。我的垂直/水平赢棋盘工作正常,但我不知道如何为对角线棋盘做类似的事情。电路板是一个2d阵列,打印到控制台上,为了检查是否有赢的情况,我检查了同一块中有四块相邻或相邻 以下是电路板代码位: private String board[][] = new String[8][8]; 创建数组 for (int i = 0; i

我对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] = "( )";
        }
    }
for(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
董事会[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();
    }
}
void显示板(){
对于(int i=1;i<9;i++){
系统输出打印(“+i+”);
}
System.out.println();
对于(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
系统输出打印(板[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;
}
boolean winCheck1(){
字符串p=“(“+piece1+”);
对于(int i=0;i<8;i++){
对于(int j=0;j<5;j++){
如果((董事会[i][j]。等于(p)和董事会[i][j+1]。等于(p)
&&董事会[i][j+2]。等于(p)和董事会[i][j+3]
.等于(p))){
这个是.win1();
返回false;
}
}
}
对于(int i=0;i<8;i++){
对于(int j=0;j<5;j++){
如果((董事会[j][i].等于(p)和董事会[j+1][i].等于(p)
&&董事会[j+2][i]。等于(p)和董事会[j+3][i]
.等于(p))){
这个是.win1();
返回false;
}
}
}
这个。play2();
返回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;
        }
    }
}
for(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
如果((董事会[j][i]。等于(p)和董事会[j+1][i+1]。等于(p)
&&董事会[j+2][i+2]。等于(p)和董事会[j+3][i+3]
.等于(p))){
这个是.win1();
返回false;
}
}
}
对于(int i=3;i<8;i++){
对于(int j=0;j<5;j++){
如果((board[j][i].等于(p)&&board[j+1][i-1].等于(p)
&&董事会[j+2][i-2]。等于(p)和董事会[j+3][i-3]
.等于(p))){
这个是.win1();
返回false;
}
}
}
但是,使用循环(在方向上迭代)可能更好