循环连接四个网格



我正在做一个Connect Four项目,但正在努力检查胜利。我认为这与我在网格上循环的方式有关。它水平工作,但不垂直工作,它有点对角线工作。

public boolean gameStatus(MyBoard gameBoard, int columnPosition, CellState gameToken) {
    int rowPosition = 0;
    for (int i = 0; i < gameBoard.getWidth(); i++)
        for (int j = 0; j < gameBoard.getHeight(); j++)
            if (gameBoard.get(i, columnPosition) != CellState.FREE)
                rowPosition = i;
    if (checkColumn(gameBoard, columnPosition, gameToken, rowPosition))
        return true;
}

public boolean checkColumn(MyBoard gameBoard, int columnPosition, CellState gameToken, int rowPosition) {
    int tokenCounter = 1;
    if ((rowPosition + 4) <= 6)
        for (int i = rowPosition + 1; i <= rowPosition + 3; i++)
            if (gameToken == gameBoard.get(i, columnPosition))
                tokenCounter++;
            else
                break;
    if (tokenCounter == 4)
        return true;
    return false;
}

我认为这只检查最后一行是非空的。

Java不关心缩进,所以没有大括号,iffor只在缩进后面使用语句。这意味着您的if (checkColumn...只运行一次,而不是每列运行一次。

你可能想尝试类似的东西

public boolean gameStatus(MyBoard gameBoard, int columnPosition, CellState gameToken) { 
    int rowPosition = 0;
    for (int i = 0; i < gameBoard.getWidth(); i++) {
        for (int j = 0; j < gameBoard.getHeight(); j++) {
            if (gameBoard.get(i, columnPosition) != CellState.FREE) {
                rowPosition = i;
            }
        }
        if (checkColumn(gameBoard, columnPosition, gameToken, rowPosition)) {
            return true;
        }
    }

通常。我建议不要写ifforwhile不带大括号的陈述。它保存的两个字符不值得您可能不小心引入的错误