我想在此代码中添加一个随机修改器,可以根据基础值的±20%范围添加或减少损坏。损害将在80%的结果到120%的结果之间随机化。对于数字示例:
attacker.Strength(20) - defender.Defense(10)= result
20 - 10 =范围(8到12)
var Fight = function (attacker, defender) {
var result;
result = (attacker.Strength - defender.Defense);
defender.HP = defender.HP - result;
if(defender.HP >= 1) {
return defender.Name + " has taken " + result + " damage!";
} else {
return defender.Name + " has been slain";
}
};
答案 0 :(得分:3)
Math.random
返回0到1之间的数字。使用以下内容将其映射到0.8
到1.2
的范围:
var factor = Math.random() * 0.4 + 0.8;
// | | |
// [0, 1[ | |
// \ / |
// [0, 0.4[ /
// \ /
// [0.8, 1,2[
var result = Math.round((attacker.Strength - defender.Defense) * factor);
不确定是否要在某处进行回合,以便您的玩家的健康点始终是自然数。如果没有,您应该将您的死亡状况更改为defender.HP > 0
。
答案 1 :(得分:1)
与Math.random() * 0.4
一样?
result = (attacker.Strength - defender.Defense) * (0.8 + Math.random() * 0.4);
答案 2 :(得分:0)
对于eaxact +/- 20%,请使用random
仅生成两个数字,即0, 1
。
如果0
,则将其视为+
,如果1
,请将其视为-
,例如 var randomNum = Math.round(Math.random()); //it will return 0 or 1
if(randomNum ==0){
//write +20% code here
result = (attacker.Strength - defender.Defense)*1.2;
}else{
//write -20% code here
result = (attacker.Strength - defender.Defense)*0.8;
}
。下面:
var factor = 0.8 + Math.random()*0.4;
result = (attacker.Strength - defender.Defense)*factor ;
编辑:对于基于范围的,它更简单。
{{1}}