我编写了一个TicTacToe游戏。我创建了一个列表来检查游戏是否已经结束或者还在继续(checkGameOver)。而另一个看起来很相似,但它是为了检查谁赢了,应该打印出来,那个玩家1或2已经赢了。当我运行游戏时,当我玩顶部的行字段12,2,3。计算机打印的信息,进程已经完成。但是当我打四、五、六或其他任何一场比赛的时候,游戏不会结束。
如果你知道这个问题,请告诉我,我不能把全部代码发给你。
*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 "";
}*
发布于 2021-09-16 12:08:44
删除"return false;
“。
for(List l : gameOver) {
if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
return true;
} else {
return false; // Remove this.
}
}
假设gameOver
不是空的,这个循环只对第一个元素执行,因为它总是从循环体内部返回。
在检查是否有胜利者的方法和检查谁是胜利者的方法中,复制游戏而不是逻辑是远远不够理想的。
应该将枚举定义为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;
然后,您可以检查方法的返回值(例如,使用开关),以打印出相应的消息。
https://stackoverflow.com/questions/69208115
复制相似问题