【问题标题】:Diagonal win checks in Connect 4 [duplicate]Connect 4中的对角线获胜检查[重复]
【发布时间】:2015-10-22 21:38:21
【问题描述】:

我正在开发一个带有 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;
}

【问题讨论】:

  • field 的尺寸是多少?因为现在看起来您将立即获得ArrayIndexOutOfBoundsException,因为您将访问field[row+1][column + row - 1] 以获得row = 0; column = 0; => field[1][-1]
  • 7x7 (private static int[][] field = new int[7][7];) 我不知道该怎么做

标签: java game-engine


【解决方案1】:

对于你想每次同时向下和向右移动的人,你也只需要去 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];
        }
    }
}

【讨论】:

  • 总是工作,当不作用于字段[6][x]
  • 如果它不适用于字段[6][x],它并不总是有效。
  • 我将 'offset >= 4' 放在 'while' 的开头,现在可以使用了
猜你喜欢
  • 2019-05-10
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2020-09-29
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多