2015-10-25 2 views
1

Я экспериментирую с простой игрой в JavaScript, которая перебирает «хиты» на драконе, пока дракон не будет убит.Бесконечная петля на простой игре

Игра работает хорошо, однако если результат - это промах, то есть youHit = 0, тогда скрипт застревает в бесконечном цикле. Я знаю, что бесконечный цикл вызван заключительным заявлением else, где slaying = true (если false, то игра останавливается, и скрипт должен запускаться снова). Мой вопрос в том, как я могу прокручивать пропуски и удары без застревания в бесконечном цикле.

var slaying = true 
var youHit = Math.floor(Math.random() * 2) 
var damageThisRound = Math.floor(Math.random() * 5 + 1) 
var totalDamage = 0 
var health = 4 

while(slaying) { 

    if (youHit) { 
     totalDamage += damageThisRound 
     console.log("You hit for " + totalDamage + " damage"); 
     if (health <= 0) { 
      console.log('You slayed the dragon!') 
      slaying = false; 
     } else { 
      health -= totalDamage 
      if (health <= 0) { 
       slaying = false; 
       console.log('You slayed the dragon!') 
      } 
      else { 
      slaying = true; 
      } 
     } 

    } else { 
     console.log("You missed!"); 
     slaying = true; 
    } 

    console.log('Health: ' + health) 

} 

ответ

1

Вы не пересчитываете бит/пропущенное булево внутри цикла. Таким образом, вы всегда будете ударять или всегда пропустить. Если вы всегда пропустите, это приведет к бесконечному циклу.

Переместить var youHit = . . . в ваш цикл while (slaying).

Смежные вопросы