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值(例如用开关)来打印出相应的消息。