我正在做一个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
不带大括号的陈述。它保存的两个字符不值得您可能不小心引入的错误