如何根据值的百分比合并Math.random?

时间:2012-10-14 16:41:27

标签: javascript game-development

我想在此代码中添加一个随机修改器,可以根据基础值的±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";
    }
};

3 个答案:

答案 0 :(得分:3)

Math.random返回0到1之间的数字。使用以下内容将其映射到0.81.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}}