Как добавить таймер, который сбрасывается после завершения каждого уровня? - PullRequest
0 голосов
/ 01 апреля 2020

Я не могу понять, как добавить таймер перезапуска в мою игру Simon. Я знаю setInterval() и SetTimeout, но не могу понять, как сбросить таймер для каждого уровня, если уровень пройден в течение первых 10 секунд. Нужен ли if / else для работы и объединения его на уровень или userClickPattern? Я не знаю, я пробовал все это.
Цель:
Иметь 10-секундный таймер, который запускает .click, и если шаблон завершен, чтобы перейти к следующей последовательности, если он не завершен, тогда alert ("... ) и перезапустите игру. Функция таймера находится внизу. Пожалуйста, помогите мне !!!

var buttonColours = ["red", "blue", "green", "yellow"];

var gamePattern = [];
var userClickedPattern = [];

var started = false;
var level = 0;

$(document).keypress(function() {
  if (!started) {
    $("#level-title").text("Level " + level);
    nextSequence();
    started = true;
  }
});

$(".btn").click(function() {

  var userChosenColour = $(this).attr("id");
  userClickedPattern.push(userChosenColour);

  playSound(userChosenColour);
  animatePress(userChosenColour);

  checkAnswer(userClickedPattern.length - 1);

});

function checkAnswer(currentLevel) {

  if (gamePattern[currentLevel] === userClickedPattern[currentLevel]) {

    console.log("success");

    if (userClickedPattern.length === gamePattern.length) {
      setTimeout(function() {
        nextSequence();
      }, 1000);
    }

  } else {

    console.log("wrong");

    playSound("wrong");

    $("body").addClass("game-over");
    setTimeout(function() {
      $("body").removeClass("game-over");
    }, 200);

    $("#level-title").text("Game Over, Press Any Key to Restart");


    startOver();
  }

}

function nextSequence() {

  userClickedPattern = [];
  level++;
  $("#level-title").text("Level " + level);


  var randomNumber = Math.floor(Math.random() * 4);
  var randomChosenColour = buttonColours[randomNumber];
  gamePattern.push(randomChosenColour);

  $("#" + randomChosenColour).fadeIn(100).fadeOut(100).fadeIn(100);
  playSound(randomChosenColour);

}

function playSound(name) {
  var audio = new Audio("sounds/" + name + ".mp3");
  audio.play();
}

function animatePress(currentColor) {
  $("#" + currentColor).addClass("pressed");
  setTimeout(function() {
    $("#" + currentColor).removeClass("pressed");
  }, 100);
}

function startOver() {
  level = 0;
  gamePattern = [];
  started = false;
}

function timer() {

  alert("Out Of Time Better Luck Next time");
  playSound("wrong");

  $("#level-title").text("Game Over, Press Any Key to Restart");
  startOver();
}

1 Ответ

0 голосов
/ 01 апреля 2020

С таймером легко работать с setInterval, который, в отличие от setTimeout, будет продолжать выполнять функцию обработчика с указанной задержкой до тех пор, пока интервал не будет очищен.

Если вы хотите значение глобально, Вы могли бы сделать:

let seconds = 0
let timerInterval

function startTimer() {
  timerInterval = setInterval(() => seconds++, 1000)
}

function resetTimer() {
  seconds = 0
  clearInterval(timerInterval)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...