为什么我的 Tic Tac Toe 游戏机没有记录“Winner!”?

问题描述 投票:0回答:1

我正在构建一款 Tic Tac Toe 游戏,但我不确定为什么我的最终结果

if statement

  // Reports winner if all entries in a row match the user's symbol
        if (((gameGrid[i][0] == gameGrid[i][1]) == gameGrid[i][2]) == player) {
          console.log(`Player ${player} won!`);
        }

无法识别游戏已获胜。例如,为什么我的终端在输出以下内容时没有记录获胜者,其中第一行清楚地展示了三个连续的 X,后跟用户的 X 符号。如果所有四个都等于每个(且类型为 ' string'),为什么我的控制台没有将其记录为胜利?

Turn 5. X, select your row #: 0
Turn 5. X, select your col #: 1
X X X X
End check
Y r1c1 r1c2 X
End check
Y r2c1 r2c2 X
End check
   // Prompts Player 1 to select X or O symbol
    var symbol1 = prompt(`Player 1, are you X's or O's? `);
    if (symbol1 == "X") {
      symbol2 = "Y";
      console.log("Player 2, you are O.");
    } else {
      symbol2 = "X";
      console.log("Player 2, you are X.");
    }

    // Do-while loop: plays game until winner is determined
    do {
      // Determines whether it's X's or O's turn
      if (turnCount % 2 == 1) {
        var player = symbol1;
      } else {
        var player = symbol2;
      }

      // Do-while loop: asks for row & col input until user inputs a valid space that is not yet claimed
      do {
        //Do-while loop: validates that users selects a row # between 0-2
        do {
          var row = parseInt(
            prompt(`Turn ${turnCount}. ${player}, select your row #: `)
          );
        } while (row < 0 || row > 2);
        //Do-while loop: validates that users selects a col # between 0-2
        do {
          var col = parseInt(
            prompt(`Turn ${turnCount}. ${player}, select your col #: `)
          );
        } while (col < 0 || col > 2);
      } while (gameGrid[row][col] == "X" || gameGrid[row][col] == "Y");

      // Adds user's symbol (i.e. 'X' or 'O') to their selected space
      gameGrid[row][col] = player;

      // Check rows in gameGrid for winning sequence
      for (i = 0; i < 3; i++) {
        console.log(gameGrid[i][0], gameGrid[i][1], gameGrid[i][2], player);

        // Reports winner if all entries in a row match the user's symbol
        if (((gameGrid[i][0] == gameGrid[i][1]) == gameGrid[i][2]) == player) {
          console.log(`Player ${player} won!`);
        }
      }
javascript for-loop if-statement tic-tac-toe
1个回答
0
投票

等号运算符 (==) 具有从左到右的结合性,这意味着当表达式中有多个具有相同优先级的运算符时,运算将从左到右执行。

要解决此问题,您应该单独比较每个元素,并确保所有三个元素都等于玩家的符号,如下所示:

if (gameGrid[i][0] == player && gameGrid[i][1] == player && gameGrid[i][2] == player) {
  console.log(`Player ${player} won!`);
}
© www.soinside.com 2019 - 2024. All rights reserved.