Javascript西蒙游戏,如何检查答案
我正在尝试用Javascript为学校制作一个simon游戏。我目前已经设置了代码,以便自己创建一个颜色数组序列,并且已经成功地将用户的答案保存到自己的数组中,在新的序列中会被清除。我现在正试图看看所说的颜色序列是否与用户的颜色序列相匹配,但我不确定如何在没有任何漏洞的情况下检查这一点。我得到的最好结果是能够测试userClicks数组长度到gamePattern数组长度,并确保最后一次单击确实是正确的,但无法找到一个好方法来测试整个userClicks数组是否与gamePattern数组相等。我还将遇到数组必须在分配的时间内填充的问题,我可能会使用setTimout()函数来实现这一点。必须有一种更简单的方法来测试给定数组是否等于另一个数组Javascript西蒙游戏,如何检查答案,javascript,arrays,Javascript,Arrays,我正在尝试用Javascript为学校制作一个simon游戏。我目前已经设置了代码,以便自己创建一个颜色数组序列,并且已经成功地将用户的答案保存到自己的数组中,在新的序列中会被清除。我现在正试图看看所说的颜色序列是否与用户的颜色序列相匹配,但我不确定如何在没有任何漏洞的情况下检查这一点。我得到的最好结果是能够测试userClicks数组长度到gamePattern数组长度,并确保最后一次单击确实是正确的,但无法找到一个好方法来测试整个userClicks数组是否与gamePattern数组相等。
/*************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*/
//some document listener to look for keypress changing gameOn to `true`
//display the level to user
//activate nextSequence();
//log user clicks after nextSequence has executed, check the userClicks vs gamePattern
$(`.btn`).click(function () {
var buttonClicked = $(this).attr(`id`);
userClicks.push(buttonClicked);
animate(buttonClicked);
playSound(buttonClicked);
checkAnswer(userClicks);
});
function checkAnswer(userClicksArray) {
//display the current level to user
//NOT SURE WHAT TO DO ANYMORE
}
/************* NEXT SEQUENCE TO PROGRESS GAME *********/
function nextSequence() {
userClickPattern = [];
level++;
console.log(level);
randomNumber = Math.floor(Math.random() * 4)
randomChosenColor = buttonColors[randomNumber];
gamePattern.push(randomChosenColor);
animate(randomChosenColor);
playSound(randomChosenColor);
}
/******************** SOUNDS AND ANIMATIONS*************************************/
//buttons animations
function animate(clickedButton) {
$(`#` + clickedButton).fadeOut(100).fadeIn(100);
};
//Play a sound in corellation to randomChosenColor
function playSound(color) {
var sound = new Audio('sounds/' + color + '.mp3');
sound.play();
};
您应该从比较长度开始,如果长度相同,只需在数组中循环,并检查每个索引处的值是否相同 如果数组是“平面”(没有嵌套的数组或对象),则效果很好。如果您有嵌套对象,则需要以下内容:
功能检查应答(游戏模式、用户点击){
const len=gamePattern.length;
if(len!==userClicks.length){
//数组的长度不匹配
返回false;
}
for(设i=0;i log(检查答案(['red','blue','green'],['red','yellow','green'])代码>哦,我想我已经明白为什么这在最后一个小时里对我不起作用了。我一直让它返回false并破坏我的程序(如果它是我所期望的,它应该是这样的)。我现在意识到我的userClicks是由一个函数添加的,即:function addUserClicks(){(`.btn`)。click(function(){//somecode})代码>使其在执行nextSequence()的同时(几乎)执行,并将userClicks.length返回为空。这个答案来得正是时候,谢谢!