2016-03-06 74 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