javascript - 无法重置 bool 值 - Javascript

标签 javascript

我再次询问有关我为学校开发的西蒙游戏的一些代码的另一个问题。 我有一个 bool 值设置为 false,游戏首先检查按键,然后将该值设置为 true。如果用户得到的游戏顺序不正确,则应将该值重置回 false。由于某种原因,我的代码在需要时没有来回更改 bool 值,我不太确定为什么。

/*************VARIABLES*************/
//store colors
var buttonColors = [
    "green", //0
    "red", //1
    "yellow", //2
    "blue" //3
]
//Game Pattern Storage
var gamePattern = [ /*Added From nextSequence*/ ];
var userClicks = [ /* Added from userClickHistory*/ ];

var level = 0;
var gameOn = false;

/******************BASIC FUNCTIONS*********************/

/*AWAIT KEYPRESS TO BEGIN GAME*/
$(document).keypress(function () {
    if (!gameOn) {
        nextSequence();
        $(`#level-title`).text(`Level: ` + level);
        var gameOn = true;
    }
});

//log user clicks after nextSequence() has executed, check the userClicks vs gamePattern using checkAnswer(lastInArray)
$(`.btn`).click(function () {
    var buttonClicked = $(this).attr(`id`);
    userClicks.push(buttonClicked);
    animate(buttonClicked);
    playSound(buttonClicked);

    checkAnswer(userClicks.length - 1);
});


function checkAnswer(usersLastClick) {
    //if the gamePatterns last call is equal to the users last click
    if (gamePattern[usersLastClick] === userClicks[usersLastClick]) {
        console.log("success");
        //if the userClicks and the gamePatterns lengths are equal, call nextSequence()
        if (userClicks.length === gamePattern.length) {
            setTimeout(function () {
                nextSequence();
                //update the titles level indicator
                $(`#level-title`).text(`Level: ` + level);
            }, 1000);
        }
    } else {
        $(`#level-title`).text(`You have made it to level ` + level + '! Hit enter to try again')
        //play sound for incorrect click
        var wrongSound = new Audio('sounds/wrong.mp3');
        wrongSound.play();
        console.log("wrong")
        console.log(`[` + userClicks + `]`);
        console.log(`[` + gamePattern + `]`);
        reset();
    }

}
/************* NEXT SEQUENCE TO PROGRESS GAME *********/
function nextSequence() {
    userClicks = [];
    level++;
    console.log(level);

    randomNumber = Math.floor(Math.random() * 4)
    randomChosenColor = buttonColors[randomNumber];
    gamePattern.push(randomChosenColor);
    animate(randomChosenColor);
    playSound(randomChosenColor);
}

function reset() {
    var level = 0;
    var gamePattern = [];
    var gameOn = false;
}


/******************** SOUNDS AND ANIMATIONS*************************************/

//buttons animations
function animate(clickedButton) {
    $(`#` + clickedButton).fadeOut(100).fadeIn(100);
};

//Play a sound in correlation to randomChosenColor
function playSound(color) {
    var sound = new Audio('sounds/' + color + '.mp3');
    sound.play();
};

当我的代码运行时, bool 值内部没有任何变化,而且我还注意到当游戏应该重置时我的数组没有被清空。当我 console.log(gameOn) 时,无论游戏是否正在运行,它总是返回 false。

最佳答案

在您的 $(document).keypress 函数中,尝试取出“gameOn = true”之前的“var”。我认为现在就好像您正在声明一个新变量,而您确实想更改全局 gameOn 变量。

关于javascript - 无法重置 bool 值 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453391/

相关文章:

javascript - jQuery touchSwipe内容滚动功能

javascript - 如何仅更新数组中的单个值

c# - 在 MVC ASP.net 中使用 X-editable 时不要重复自己的最佳方法

javascript - 如何使div可滚动

javascript - 在knockout js中this和self关键字的使用有什么区别

javascript - 使用 querySelector 获取包含类的所有元素

javascript - YUI Carousel nav buttons under the ordered list

javascript - 无法通过 ember 安装 bourbon

javascript - 具有多个元素的自定义数据属性

javascript - Jquery 检测 JQuery 更新时的变化