Connect 4 中的对角线获胜检查

Diagonal win checks in Connect 4

我正在开发具有 7x7 字段、水平和垂直检查的 Connect 4 游戏,但我无法进行对角线检查

只要其中一个标记不在最后一列,我就可以赢。

这些都是支票:

private static int getWinningInDiagonals() {

    // Top-Left -> Bottom-Right
    for (int column = 0; column < 7; column++) {
        int count = 0;
        for (int row = 0; row < 7; row++) {
            if (field[row][column] != 0 && field[row+1][column + row - 1] == field[row][column])
                count++;
            else
                count = 1;
            if (count >= 4) {
                return field[row][column];
            }                   
        }
    }
    // Top-Right -> Bottom-Left
    for (int column = 0; column < 7; column++) {
        int count = 0;
        for (int row = 0; row < 7; row++) {
            if (field[row][column] != 0 && field[row+1][column - row + 1] == field[row][column])
                count++;
            else
                count = 1;
            if (count >= 4) {
                return field[row][column];
            }
        }
    }        
    return 0;
}

如果你想每次都同时下右移,你也只需要到3,3因为对角线不能出现比它更远的位置,而且它不离开数组的边界。

如果我假设您的左上角是您的 0,0 是正确的,这应该适用于您的左上角到右下角。 从右上到左下是更改列和行循环以及更改偏移量工作方式的问题。

// Top-Left -> Bottom-Right
for (int column = 0; column < 4; column++) {
    for (int row = 0; row < 4; row++) {
        player = 0;
        if (field[row][column] != 0){
            player=field[row][column];
            offset = 1;
        }
        while (player != 0){
            if (field[row + offset][column + offset] == player){
                offset += 1;
            }else{
                player = 0;
            }
        }                   
        if(offset >= 4){
            return field[row][column];
        }
    }
}