当我调用 getActivePlayer 方法时,它返回“玩家一”,当我调用 switchPlayerTurn 时,它返回“玩家二”,但是当我调用 getActivePlayer 或什至尝试在切换回合后控制台记录 activePlayer 时,它仍然返回“玩家一个”。
我试过使用 if...else 语句而不是三元运算符。我尝试在 if...else 语句的不同部分编写 return 语句。我还搜索了这些论坛,虽然有些帖子与我的非常相似,但我已经尝试过他们的解决方案。这可能是范围问题吗? switchPlayerTurn 方法包含在 gaemController 函数中,但是,activePlayer 变量应该可以从该方法访问并且应该能够更改其值,对吗?
我在我的代码底部写了一个简单的版本来改变变量 x 并且它有效,但是当我在上面应用它时,它没有改变任何东西。
function gameController(
playerOneName = "Player One",
playerTwoName = "Player Two"
) {
const players = [
{
name : playerOneName,
token : 1
},
{
name : playerTwoName,
token : 2
}
];
let activePlayer = players[0];
const switchPlayerTurn = () => {
activePlayer = activePlayer === players[0] ? players[1] : players[0];
console.log(activePlayer);
};
/* if...else statement alternative
function switchPlayer() {
if (activePlayer === players[0]) {
activePlayer = players[1];
} else if (activePlayer === players[1]) {
activePlayer = players[0];
}
};
*/
const getActivePlayer = () => activePlayer;
const printNewRound = () => {
gameBoard.printBoard();
console.log(`${getActivePlayer().name}'s turn'`);
};
const playRound = (row, column) => {
gameBoard.playMove(row, column, getActivePlayer().token);
switchPlayer();
printNewRound();
}
return {
activePlayer,
switchPlayerTurn,
getActivePlayer,
players,
printNewRound,
playRound
};
}
const gc = gameController();
console.log(gc.getActivePlayer());
gc.switchPlayerTurn();
console.log(gc.getActivePlayer());
// test
let x = 1;
function switchX() {
if (x === 1) {
x = 2;
} else if (x === 2) {
x = 1;
}
console.log(x);
}
switchX();
switchX();