如何在井字游戏中在两个玩家之间切换?

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

当我调用 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();

javascript scope variable-assignment
© www.soinside.com 2019 - 2024. All rights reserved.