[英]Looping JS Function Until if or else Condition is Met
我創建了一個函數,當使用某些參數調用該函數時,該函數將播放,然后根據數學公式告訴玩家他們贏了還是死了。 我已經測試了該功能並且可以正常工作,我在函數調用中設置了參數,以便播放器獲勝並且顯示了獲勝消息警報。 但是,如果我將怪物的生命值提高到第一次調用該函數將不會贏得玩家的位置,則該函數將不會重復自身,因為我嘗試使用“ else fight()”進行設置(如下所示)。
我的問題是,如何使用與以前相同的參數循環執行該功能,直到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);
}
}
編輯:更新了功能,它說無論怪物的傷害或生命值有多高,您都可以贏。
在您的代碼中, playerHealth
初始化了內部函數,該函數在遞歸調用中將播放器的運行狀況重置為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>
PS我刪除了+2邏輯(我不明白為什么要添加)
您可能需要一個遞歸函數 ,該遞歸函數將在滿足某些條件時結束。
這是一個例子:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.