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

Javascript 如何根据值的百分比合并Math.random?,javascript,game-development,Javascript,Game Development,我想给这段代码添加一个随机修饰符,这个修饰符可以在基础值+-20%的范围内增加或减少伤害。伤害将在结果的80%到120%之间随机变化。有关数字示例: 攻击者。力量(20)-防御者。防御(10)=结果 20-10=范围(8到12) 如Math.random()*0.4 result = (attacker.Strength - defender.Defense) * (0.8 + Math.random() * 0.4); 如Math.random()*0.4 result = (attacke

我想给这段代码添加一个随机修饰符,这个修饰符可以在基础值+-20%的范围内增加或减少伤害。伤害将在结果的80%到120%之间随机变化。有关数字示例:

攻击者。力量(20)-防御者。防御(10)=结果

20-10=范围(8到12)

Math.random()*0.4

result = (attacker.Strength - defender.Defense) * (0.8 + Math.random() * 0.4);
Math.random()*0.4

result = (attacker.Strength - defender.Defense) * (0.8 + Math.random() * 0.4);

对于eaxact+/-20%,使用
随机
仅生成两个数字,即
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 ;

对于eaxact+/-20%,使用
随机
仅生成两个数字,即
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 ;
返回一个介于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

返回一个介于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

您应该将函数名和属性名小写,因为它们不是构造函数。您应该将函数名和属性名小写,由于它们不是构造函数,您如何使用
random
只生成两个数字中的一个?@Bergi请检查我提到的逻辑。首先,它将生成0到1之间的十进制值。然后
round
将其舍入为0或1。啊,我写这篇文章时没有代码。尽管如此,OP还是希望在“结果的80%到120%之间”中加入一个因子,而不是一个或另一个。我的答案是返回80%或120%。对于范围基数,我将编辑答案。如何使用
random
仅生成两个数字中的一个?@Bergi请检查我提到的逻辑。首先,它将生成0到1之间的十进制值。然后
round
将其舍入为0或1。啊,我写这篇文章时没有代码。尽管如此,OP还是希望在“结果的80%到120%之间”中加入一个因子,而不是一个或另一个。我的答案是返回80%或120%。对于范围基数,我将编辑答案。Math.random可能返回0到1之间的任何值,例如0.45。这太完美了,谢谢。我仔细考虑了这个方程。Math.random可能返回0到1之间的任何值,例如0.45。这太完美了,谢谢。我对这个等式考虑得太多了。