【问题标题】:Javascript Simon Game, how to check the answerJavascript西蒙游戏,如何检查答案
【发布时间】:2019-06-05 01:55:09
【问题描述】:

我正在尝试用 Javascript 为学校制作一个 simon 游戏。我目前已将代码设置为自己创建一个颜色数组序列,并且还成功地将用户答案保存到它自己的数组中,该数组在新序列时被清除。我现在正在尝试查看所述颜色序列是否与用户颜色序列匹配,但我不确定如何在没有任何漏洞的情况下进行检查。我得到的最好的结果是能够测试 userClicks 数组长度到 gamePattern 数组长度并确保最后一次点击确实是正确的,但无法找到一个好的方法来测试整个 userClicks 数组是否等同于游戏模式数组。我还会遇到数组必须在分配的时间内填充的问题,我可能会使用 setTimout() 函数来实现这一点。必须有一种更简单的方法来测试给定数组是否等于另一个数组。

/*************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();
};

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您应该首先比较长度,如果它们相同,只需遍历数组并检查每个索引处的值是否相同。

    如果数组是“平面的”(没有嵌套数组或对象),这很好用。如果你有嵌套对象,你需要这样的东西:How to compare arrays in JavaScript?

    function checkAnswer(gamePattern, userClicks) {
      const len = gamePattern.length;
    
      if (len !== userClicks.length) {
        // The lengths of the arrays don't match
        return false;
      }
      
      for (let i = 0; i < len; i++) {
        if (gamePattern[i] !== userClicks[i]) {
          // The values at the same index don't match
          return false;
        }
      }
    
      return true;
    }
    
    console.log(checkAnswer(['red', 'blue', 'green'], ['red', 'blue', 'green']));
    console.log(checkAnswer(['red', 'blue', 'green'], ['red', 'yellow', 'green']));

    【讨论】:

    • 哦,我想我知道为什么这在最后一个小时内对我不起作用了。我一直让它返回 false 并破坏我的程序(如果它是我所期望的,它应该如此)。我现在意识到我的 userClicks 是由一个函数添加的,即:function addUserClicks(){(`.btn`).click(function () {//somecode})}; 使其在(几乎)与 nextSequence() 执行的同时执行并将 userClicks.length 返回为空。这个答案来的正是时候,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多