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

问题描述 投票:1回答:1

所以我试图在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("**");

}
java arrays
1个回答
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("**");
}
© www.soinside.com 2019 - 2024. All rights reserved.