GameOver 不出现
GameOver does not appear
我编写了一款井字棋游戏。我创建了一个列表来检查游戏是否结束或仍在继续 (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 "";
}*
去掉else中的“return false;
”。
for(List l : gameOver) {
if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
return true;
} else {
return false; // Remove this.
}
}
假设 gameOver
不为空,此循环仅对第一个元素执行,因为它总是 return 来自循环体内。
在检查 是否 获胜者的方法和检查 who[= 的方法中复制游戏结束逻辑远非理想31=]获胜。
您应该将枚举定义为 checkGameOver
方法的 return 值:
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;
然后你可以检查方法的return值(例如用开关)来打印出相应的消息。
我编写了一款井字棋游戏。我创建了一个列表来检查游戏是否结束或仍在继续 (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 "";
}*
去掉else中的“return false;
”。
for(List l : gameOver) {
if(playerPositions.containsAll(l) || computerPositions.contains(l)) {
return true;
} else {
return false; // Remove this.
}
}
假设 gameOver
不为空,此循环仅对第一个元素执行,因为它总是 return 来自循环体内。
在检查 是否 获胜者的方法和检查 who[= 的方法中复制游戏结束逻辑远非理想31=]获胜。
您应该将枚举定义为 checkGameOver
方法的 return 值:
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;
然后你可以检查方法的return值(例如用开关)来打印出相应的消息。