2016-03-06 73 views
-1

我做了一段时间函数,它可以在大约一半的时间内正常工作。有时虽然它根本不加载函数,或者加载下一部分函数来完成其循环。就我所能看到的语法而言,没有任何问题,但我对Javascript仍然陌生。我无法看到代码中的任何地方可能导致自己认为它陷入了无限循环。那么这里是我的代码,如果你能帮到那将是非常棒的。JavaScript函数有时会将自身循环到一个无限循环中

var dragHunt = true; 
var hitOrMiss = Math.floor(Math.random() * 2); 
var dmgOnHit = 0; 
var totalDmg = 0; 
var playerHealth= 0; 
var dragHitOrMiss = Math.floor(Math.random() * 1.5); 
var dragDmg= 0; 

while(dragHunt){ 
if(hitOrMiss){ 
    dmgOnHit = Math.floor(Math.random() * 5 + 1); 
    alert("You hit the dragon, the luck is with you today. You did " + dmgOnHit + " damage!"); 
    totalDmg += dmgOnHit; 

    if(totalDmg >= 20){ 
     alert("You did it! You have killed the dragon. The hunt was successful!"); 
     dragHunt=false; 
    } 
    else{ 
     hitOrMiss = Math.floor(Math.random() * 2); 
    } 
} 
else{ 
    if(dragHitOrMiss){ 
     dragDmg = Math.floor(Math.random() * 5 + 1); 
     alert("The Dragon hit you for " + dragDmg + " damage!"); 
     playerHealth += dragDmg; 

     if(playerHealth >= 80){ 
      alert("The dragon has burnt you to a crisp. You stood no chance against the ferocious beast."); 
      dragHunt=false; 
     } 
     else{ 
      hitOrMiss = Math.floor(Math.random() * 2); 
     } 
    } 

} 

}

+1

问题似乎是'hitOrMiss'和'dragHitOrMiss'都是假的。 – Oriol

回答

1

我看到你的问题是什么。您创建一个无限循环,因为hitOrMiss总是虚假以及dragHitOrMiss。因此,dragHunt基本上是永不改变的

0

如果dragHitOrMiss实际上是一个常数,只在顶部计算。如果它是假的,并且orMrMiss变为假,它们将不会被重新计算。 当他们都是假的,你必须:

dragHunt = true; 
while(dragHunt) { 
    if (false) { 
    // not executed 
    else if (false) { 
    // not executed 
    } 
} 

哪个是你的死循环。

如果dragHitOrMiss在顶部计算为true,则每次都会重新计算hitOrMiss,这就是为什么您只有时有一个无限循环的原因。

编辑:您希望您的代码看起来更象这样:

while(dragHunt) { 
    var hitOrMiss = Math.floor(Math.random() * 2); 
    if (hitOrMiss) { 
     // The player hit the dragon code here. 
    } else { 
     // The Player missed the dragon; it gets a chance to hit the player instead 
     var dragHitOrMiss = Math.floor(Math.random() * 1.5); 
     if (dragHitOrMiss) { 
      // Dragon hit you code here. 
     } 
    } 
} 

你检查,如果球员击打龙每一次,你计算命中/缺失值。每次你检查龙是否击中了玩家,你都会计算该命中/未命中值。注意,hitOrMiss和dragHitOrMiss值不再在dragHunt循环之前声明,而是在使用之前实际声明和计算。

+0

因此,代码的作用是生成hitOrMiss和dragHitOrMiss作为常量,因为它们只计算一次。我该如何着手解决这个问题。 –

+0

您需要在使用它们后重新计算(拖动)hitOrMiss值,或者在使用它们之前生成它们。我会更新我的答案来证明这一点。 – AJNeufeld