2016-02-06 34 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>