Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重置变量不是重置游戏?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 重置变量不是重置游戏?

Javascript 重置变量不是重置游戏?,javascript,jquery,html,Javascript,Jquery,Html,我正在创建一个Simon游戏,它在第一轮有效,但一旦你的每一轮第二,它立即说不正确 我重置了两轮之间的所有变量,但它似乎仍在保存它们,因为它会立即显示“游戏结束!” JS: 以下是playSimon()函数: function playSimon() { setTimeout(function () { color = Math.floor(Math.random() * 4); if (color == 0) { correct

我正在创建一个Simon游戏,它在第一轮有效,但一旦你的每一轮第二,它立即说不正确

我重置了两轮之间的所有变量,但它似乎仍在保存它们,因为它会立即显示“游戏结束!”

JS:

以下是playSimon()函数:

function playSimon() {
    setTimeout(function () {
        color = Math.floor(Math.random() * 4);
        if (color == 0) {
            correctAnswer.push(0);
            $('#redButton').addClass('lightOn');
            setTimeout(function () {
                $('#redButton').removeClass('lightOn');
            }, 500);
        }
        else if (color == 1) {
            correctAnswer.push(1);
            $('#blueButton').addClass('lightOn');
            setTimeout(function () {
                $('#blueButton').removeClass('lightOn');
            }, 500);
        }
        else if (color == 2) {
            correctAnswer.push(2);
            $('#greenButton').addClass('lightOn');
            setTimeout(function () {
                $('#greenButton').removeClass('lightOn');
            }, 500);
        }
        else if (color == 3) {
            correctAnswer.push(3);
            $('#yellowButton').addClass('lightOn');
            setTimeout(function () {
                $('#yellowButton').removeClass('lightOn');
            }, 500);
            }
        i++;
        if (i <= round) {
            playSimon();
        }
        else {
            makeGuess();
        }
    }, 700);
}
函数playSimon(){
setTimeout(函数(){
颜色=Math.floor(Math.random()*4);
如果(颜色==0){
回答正确。按(0);
$('#redButton').addClass('lightOn');
setTimeout(函数(){
$(“#红色按钮”).removeClass('lightOn');
}, 500);
}
else if(颜色==1){
回答正确。按(1);
$(“#蓝按钮”).addClass('lightOn');
setTimeout(函数(){
$(“#蓝按钮”).removeClass('lightOn');
}, 500);
}
else if(颜色==2){
回答正确。推(2);
$(“#绿色按钮”).addClass('lightOn');
setTimeout(函数(){
$(“#绿色按钮”).removeClass('lightOn');
}, 500);
}
否则如果(颜色==3){
回答正确。推(3);
$('yellowButton').addClass('lightOn');
setTimeout(函数(){
$(“#黄色按钮”).removeClass('lightOn');
}, 500);
}
i++;

如果(i是因为您多次绑定单击事件:

function makeGuess() {
    $('#redButton').click(function() {
        yourAnswer.push(0);
    });
    $('#blueButton').click(function() {
        yourAnswer.push(1);
    });
    $('#greenButton').click(function() {
        yourAnswer.push(2);
    });
    $('#yellowButton').click(function() {
        yourAnswer.push(3);
    });

    ...
}
每次调用makeGuess()时,按钮都会绑定到另一个click事件侦听器,只有一个事件侦听器,因此它可以正常工作,但从第二级开始,每个按钮都绑定了两个相同的click listener,当玩家单击按钮时,函数被调用两次=>您的答案立即被按下两次,这将导致错误答案=>游戏结束

一个快速修复方法是在再次绑定4个按钮之前,在调用下一个playSimon()之前,单击所有按钮上的所有事件

if (yourString === correctString) {
            alert('Correct');
            round++;
            yourAnswer = [];
            correctAnswer = [];
            yourString = "";
            correctString = "";

            $('#redButton').unbind( "click" );
            $('#blueButton').unbind( "click" );
            $('#greenButton').unbind( "click" );
            $('#yellowButton').unbind( "click" );
            playSimon();
        } else {
            alert("Game Over!");
        }

jsiddle:

AVAVT是正确的,但是,它不是解除绑定,而是一次关闭就绑定事件

我已经更新了您的JSFIDLE并稍微优化了您的代码

if (yourString === correctString) {
            alert('Correct');
            round++;
            yourAnswer = [];
            correctAnswer = [];
            yourString = "";
            correctString = "";

            $('#redButton').unbind( "click" );
            $('#blueButton').unbind( "click" );
            $('#greenButton').unbind( "click" );
            $('#yellowButton').unbind( "click" );
            playSimon();
        } else {
            alert("Game Over!");
        }
// Run this when the page has loaded to ensure HTML is there.
$(function(){
    $('#redButton').click(function() {
        yourAnswer.push(0);
      });
      $('#blueButton').click(function() {
        yourAnswer.push(1);
      });
      $('#greenButton').click(function() {
        yourAnswer.push(2);
      });
      $('#yellowButton').click(function() {
        yourAnswer.push(3);
      });
});