Javascript 如何根据值的百分比合并Math.random?
我想给这段代码添加一个随机修饰符,这个修饰符可以在基础值+-20%的范围内增加或减少伤害。伤害将在结果的80%到120%之间随机变化。有关数字示例: 攻击者。力量(20)-防御者。防御(10)=结果 20-10=范围(8到12) 如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
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。这太完美了,谢谢。我对这个等式考虑得太多了。