检查二维数组中的相邻切片

时间:2018-03-04 15:29:09

标签: java arrays

所以我试图在Java中制作一个Connect Four游戏,而不是连接6而不是4。

我有一个二维数组和X个玩家。我必须检查连续6个块(水平,垂直和对角线)是否由同一个玩家标记。如果是,该程序应该打印谁赢了。

现在,我没有检查或确定谁赢了的问题,但是对于我的生活我无法弄清楚如何阻止程序在尝试检查数组之外的块时崩溃。

现在,我试图避免使用try-catch或一个接一个地插入8个循环,而是使用一种方法对所有方向只是参数的变化,但我似乎无法使其工作:\

有没有人建议如何使用它?

我是编程的初学者,我可能错过了一些东西,所以这就是我寻求帮助的原因:)

干杯

编辑:这是代码。它有点长,这就是为什么我想缩短它并让它以某种方式工作。 Terminal类与System.out.println相同。

void checkIfPlayerWins(Field field, Integer rowNumber, Integer colNumber) {
    Integer counter = 1;

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    if (counter == 6) {
        Terminal.printLine("");
    }
}

这是isOccupied方法

boolean isOccupied(Integer x, Integer y) {
    return !this.field[x][y].equals("**");

}

1 个答案:

答案 0 :(得分:1)

您可以在Field方法中处理您尝试检查isOccupied是否被无效坐标占用的情况:

boolean isOccupied(Integer x, Integer y) {
    if(x < 0 || y < 0 || x >= numberOfColumns || y >= numberOfRows) {
        // Attempting to check outside the grid: it's non-occupied.
        return false;
    }

    return !this.field[x][y].equals("**");
}