这是一个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);
}
}
答案 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"