西蒙游戏在JavaScript中

时间:2017-04-14 23:02:40

标签: javascript

这是一个javascript问题。 所以这就是我所做的。我创建了2个数组。 1表示计算机,1表示播放器。在computerTurn函数中计算机创建一个随机数并将其放入数组中。它将从数组中输出将播放按钮的数字。如果计数器等于阵列的长度,那么它将切换到玩家转弯。在playerTurn功能中,播放器有5秒钟跟随计算机选择的按钮。在第二轮之后,当阵列中有2个随机元素时,会出现问题。由于某种原因,它不会清除我的playerArray,只是将数字加起来。 我做错了什么?

该项目可在此处找到: https://codepen.io/roger1891/full/vmYqwx/

我认为问题出在这里:

var playerTurn = function() {
    if(currentPlayerTurn == "human" && onGoingGame == false) {
    playerArray = [];
    $(".my-btn").click(function(){
       var $input = $(this);
       var attrString = $input.attr("id");
       //only get number from id attribute
       var strNum = attrString.replace( /^\D+/g, '');
       //convert theNumber from string to number
       var theNum = parseInt(strNum);
       playerArray.push(theNum);
       console.log("this is the num the player picked " + theNum);
       console.log(playerArray);
    });  


    setTimeout(function () {
         var is_same = playerArray.length == sequenceArray.length && playerArray.every(function(element, index) {
          return element === sequenceArray[index]; 
        });
        is_same;
        console.log(is_same);
        if(is_same == true) {
          onGoingGame = true;
          currentPlayerTurn = "computer";
          computerTurn();

        }   

    }, 5000);

    }  
} 
    setTimeout(function () {
             var is_same = playerArray.length == sequenceArray.length && playerArray.every(function(element, index) {
              return element === sequenceArray[index]; 
            });
            is_same;
            console.log(is_same);
            if(is_same == true) {
              onGoingGame = true;
              currentPlayerTurn = "computer";
              computerTurn();

            }   

        }, 5000);

        }  
      } 

1 个答案:

答案 0 :(得分:1)

主要问题是你不应该在多次调用的函数中定义点击处理程序( playerTurn ),因为这将累积将在单击时执行的点击处理程序。因此, playerArray 的长度不断增加。而是在该函数外部定义单击处理程序,并在 playerTurn 中重复该单击处理程序中的条件:

$(".my-btn").click(function(){
    if(currentPlayerTurn != "human" || onGoingGame) return; // exit
    // rest of the click handler...
});  

var playerTurn = function() {
    if(currentPlayerTurn != "human" || onGoingGame) return; // exit
    playerArray = [];
    setTimeout(function () {
        // etc....
    }, 5000);
}

// ... etc

注意:变量 onGoingGame 似乎没必要,因为它始终对应于表达式currentPlayerTurn == "computer"