GameOver没有出现



我编写了一个TicTacToe游戏。我创建了一个列表,用于检查游戏是否结束或仍在进行(checkGameOver)。另一个看起来很相似,但它是用来检查谁赢了,它应该打印出来,玩家1或玩家2赢了。当我运行游戏时,当我玩最上面一行的字段1 2 3。计算机打印进程结束的消息。但是当我玩4、5、6或其他任何游戏时,游戏都没有结束。

如果你知道问题,请告诉我,我可以把整个代码发给你。

*public static boolean checkGameOver(char [][] gameBoard){
List topRow = Arrays.asList(1, 2, 3);
List midRow = Arrays.asList(4, 5, 6);
List botRow = Arrays.asList(7, 8, 9);
List leftCol = Arrays.asList(1, 4, 7);
List midCol = Arrays.asList(2, 5, 8);
List rightCol = Arrays.asList(3, 6, 9);
List cross1 = Arrays.asList(1, 5, 9);
List cross2 = Arrays.asList(7, 5, 3);
List<List> gameOver = new ArrayList<List>();
gameOver.add(topRow);
gameOver.add(midRow);
gameOver.add(botRow);
gameOver.add(leftCol);
gameOver.add(midCol);
gameOver.add(rightCol);
gameOver.add(cross1);
gameOver.add(cross2);
for(List l : gameOver) {
if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
return true;
} else {
return false;
}
}
return false;
}
public static String checkWinner(char [][] gameBoard) {
List topRow = Arrays.asList(1, 2, 3);
List midRow = Arrays.asList(4, 5, 6);
List botRow = Arrays.asList(7, 8, 9);
List leftCol = Arrays.asList(1, 4, 7);
List midCol = Arrays.asList(2, 5, 8);
List rightCol = Arrays.asList(3, 6, 9);
List cross1 = Arrays.asList(1, 5, 9);
List cross2 = Arrays.asList(7, 5, 3);
List<List> gameOver = new ArrayList<List>();
gameOver.add(topRow);
gameOver.add(midRow);
gameOver.add(botRow);
gameOver.add(leftCol);
gameOver.add(midCol);
gameOver.add(rightCol);
gameOver.add(cross1);
gameOver.add(cross2);
for(List l : gameOver) {
if(playerPositions.containsAll(l)) {
return "Glückwunsch du hast gewonnen!";
} else if(computerPositions.contains(l)) {
return "Computer hat gewonnen!";
} else if(playerPositions.size() + computerPositions.size() == 9) {
return "Unentschieden!";
}
}
return "";
}*

去掉"return false;";在else.

for(List l : gameOver) {
if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
return true;
} else {
return false;  // Remove this.
}
}

假设gameOver不是空的,这个循环只对第一个元素执行,因为它总是从循环体内部返回。


在检查是否有赢家的方法中复制游戏逻辑,以及检查谁是赢家的方法,这远非理想。

你应该定义一个enum作为checkGameOver方法的返回值:

enum Winner {
PLAYER, COMPUTER, NONE
}

然后你可以这样做:

for(List l : gameOver) {
if (playerPositions.containsAll(l)) return Winner.PLAYER;
if (computerPositions.containsAll(l)) return Winner.COMPUTER;
}
return Winner.NONE;

然后你可以检查方法的返回值(例如带开关)以打印出相应的消息。

相关内容

  • 没有找到相关文章

最新更新