Ошибка в игре змея, где каждый раз, когда я d ie, скорость моей змеи меняется - PullRequest
0 голосов
/ 16 января 2020

Я делаю игру со змеями, и в ней есть настройка для изменения скорости. Когда я меняю скорость, она работает до тех пор, пока вы не наберете ie, а затем изменится на что-то другое.

jsFiddle, полноэкранная игра

код

Код, который я считаю уместным:

//sleep function
function sleep(ms) {
	return new Promise(resolve => setTimeout(resolve, ms));
}
//speed selectors
$('.speedSel').click(function() {
  var id = $(this).attr('id');
  if (id == 'slow') {
    moveTimer = 85;
  } else if (id == 'med') {
    moveTimer = 75;
  } else if (id == 'fast') {
    moveTimer = 65;
  } else if (id == 'veryfast') {
    moveTimer = 55;
  } else if (id == 'crazy') {
    moveTimer = 35;
  } else if (id == 'nm') {
    moveTimer = 25;
  }
  console.log(id);
  console.log(moveTimer);
});
//Initialize, run every time you restart the game
function init() {
  snake = [{
    x: canv.width / 2,
    y: canv.height / 2
  }];
  for (var i = 0; i < startLength - 1; i++) {
    snake.push({
      x: snake[i].x + snakeSegWidth,
      y: snake[i].y
    });
  }
  //Run gameloop
  game();
}
//Gameloop, waits var moveTimer milliseconds(ms) then moves
async function game() {
  snake = [{
    x: canv.width / 2,
    y: canv.height / 2
  }];
  for (var i = 0; i < startLength - 1; i++) {
    snake.push({
      x: snake[i].x + snakeSegWidth,
      y: snake[i].y + snakeSegWidth
    });
  }
  placeApple();
  gameOver = false;
  paused = false;
  $("#gamedone").hide();
  while (gameOver == false) {
    //Sleep function
    await sleep(moveTimer);
    if (paused == false) {
      move();
    }
  }
  snake.forEach(clearSnakePart);
  gameIsOver();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<fieldset>
  <legend>Select a Speed</legend>
  <input class='speedSel' type="radio" name="radio" id="slow">
  <label class='speedSel' for="slow">Slow</label>
  <input class='speedSel' type="radio" name="radio" id="med">
  <label class='speedSel' for="med">Medium (Default)</label>
  <br>
  <input class='speedSel' type="radio" name="radio" id="fast">
  <label class='speedSel' for="fast">Fast</label>
  <input class='speedSel' type="radio" name="radio" id="nm">
  <label for="nm">Nightmare</label>
</fieldset>

Извините, что так много, но я действительно понятия не имею, что происходит не так. Проблема в том, что умирание меняет время ожидания таймера сна, но не меняет переменную moveTimer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...