2016-02-06 65 views
0

我創建了一個函數,當用某些參數調用時會播放,然後根據數學告訴玩家他們贏了還是死了。我已經測試過這個功能,它正常工作,我在函數調用中設置參數,這樣玩家就會贏,並且它會顯示勝利消息警報。但是如果我將怪物的健康值增加到第一次調用該函數時玩家不會贏的地方,那麼當我嘗試用「else fight()」(如下所示)設置時,函數不會重複。循環JS函數直到遇到或遇到條件

我的問題是這樣的,如何使用與之前相同的參數循環函數,直到else或else參數滿足?

在調用HTML的功能:

<a class="button" onclick="javascript:fight(8, 5, 1, 10, 3);">Test fight</a><br> 

JS功能:

var playerHealth = 100; 

function fight(monsterHealth, monsterDmg, monsterArmor, itemDmg, armorSts) { 
newPlayerHealth = playerHealth - monsterDmg/armorSts + 2; 
newMonsterHealth = monsterHealth - itemDmg/monsterArmor + 2; 
if (playerHealth <= 0) { 
     alert('You died...'); 
} 
else if (newMonsterHealth <= 0) { 
     alert('You won!'); 
} 
else 
{ 
var newPlayerHealth = playerHealth; 
fight(newMonsterHealth, monsterDmg, monsterArmor, itemDmg, armorSts); 
} 
} 

編輯:更新的功能,它說你贏了,無論怪物的傷害或健康有多高。

+0

你如果條件永遠不會爲真:playerHealth = 100讓你的播放器可以永遠不死。另外,當函數在else中調用自身時,是不是隻傳遞完全相同的值? – nnnnnn

+0

您需要將該功能中的「損壞」邏輯抽象出來,並在每次需要「打」時調用它,這就是我認爲 – Frondor

+0

感謝您的評論,我現在將根據您所說的進行一些測試。 – Timble

回答

1

在你的代碼中playerHealth是intialize裏面的函數,它將遞歸調用中球員的健康狀態重置爲100。

newMonsterHealth也沒有考慮遞歸調用持續。

<html> 
<head> 
<script> 
    var playerHealth = 100; 

function fight(monsterHealth, monsterDmg, monsterArmor, itemDmg, armorSts) { 

playerHealth = playerHealth - Math.floor(monsterDmg/armorSts) ; 
    console.log("player helath"+playerHealth); 
monsterHealth = monsterHealth - Math.floor(itemDmg/monsterArmor) ; 
    console.log("monster helath"+monsterHealth); 
if (playerHealth <= 0) { 
     alert('You died...'); 
} 
else if (monsterHealth <= 0) { 
     alert('You won!'); 
} 
else fight(monsterHealth, monsterDmg, monsterArmor, itemDmg, armorSts); 
} 


</script> 
</head> 
<body> 
    <a class="button" onclick="javascript:fight(100, 40, 1, 10, 3);">Test fight</a><br> 
    </body> 
</html> 

P.S.我刪除了你的+2邏輯(我不明白你爲什麼要添加)

+1

非常感謝,這似乎工作! +2邏輯是我正在試驗的東西,但並非完全必要。 – Timble

0

你可能需要一個遞歸函數當某些條件滿足時結束。

這裏有一個例子:

function recursive(target, i) { 
 
    target.innerHTML += '<br>' + i; 
 

 
    console.log('index is', i); 
 
    if(i > 100) { 
 
    return target.innerHTML += '<br>' + 'END'; 
 
    } 
 
    
 
    return recursive(target, ++i); 
 
} 
 

 
document.addEventListener('DOMContentLoaded', function() { 
 
    recursive(document.getElementById('test'), 0) 
 
});
<h1 id="test"></h1>