我正在构建一款 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!`);
}
}
等号运算符 (==) 具有从左到右的结合性,这意味着当表达式中有多个具有相同优先级的运算符时,运算将从左到右执行。
要解决此问题,您应该单独比较每个元素,并确保所有三个元素都等于玩家的符号,如下所示:
if (gameGrid[i][0] == player && gameGrid[i][1] == player && gameGrid[i][2] == player) {
console.log(`Player ${player} won!`);
}