我正在从事 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 不关心缩进,因此如果没有大括号,if
和 for
仅使用它们后面的语句。这意味着您的 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;
}
}
一般来说。我建议不要编写不带大括号的 if
、for
和 while
语句。它保存的两个字符不值得你可能不小心引入的错误
关于java - 循环连接四个网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115201/