内部文字不变

时间:2019-03-03 21:42:24

标签: javascript html

我正在学习JavaScript,我想我可以做一个井字游戏。

我有一个名为displayMessage()的函数,该函数可更改<p>标记内的文本。

function displayMessage(message) {
turn_p.innerHTML = message}

每当转弯时,我都会调用此函数,它会按预期工作。

function setNextPlayerTurn(currentPlayer) {
currentPlayer === "X" ? player = "O" : player = "X"
displayMessage(`${player}'s turn!`)}

但是当游戏结束以显示获胜者时我将其命名为

function endGame() {
cells.forEach((cell) => {
    cell.removeEventListener('click', turnClick, false);
})
displayMessage(`${player} player Won!`)}

endGame()函数由另一个名为checkWin()的函数调用。如果checkWin()为真,则调用endGame()

function checkWin() {
if (checkFirstRow() ||
    checkSecondRow() ||
    checkThirdtRow() ||
    checkFirstColumn() ||
    checkSecondColumn() ||
    checkThirdColumn() ||
    checkMainDiagonal() ||
    checkSecondaryDiagonal() == true) {
    endGame()
}}

我该怎么做才能解决此问题?

完整代码:https://jsfiddle.net/yrgs16av/

1 个答案:

答案 0 :(得分:0)

就像@Robin Zigmond所说的那样,问题在于它无论如何都立即转到下一个回合-包括将消息设置为下一个回合。

我做了一些修改,就可以了。

    function turn(squareId) {
        //code...
        checkWinAndDraw();
        if (gameEnded != true) {
            setNextPlayerTurn(player);
        }
}

        function checkWinAndDraw() {
        if (//condition)
        } else {
            checkDraw();
        }}

        function checkDraw() {
        if (board.every(square => square == 'X' || square == 'O')) {
            displayMessage(`It's a Draw!`);
            gameEnded = true;
        }
    }

    function endGame() {
        //code...
        displayMessage(`${player} player Won!`)
        gameEnded = true;
    }