在角色扮演游戏中创建机会功能

时间:2019-06-29 23:22:02

标签: algorithm random

我正在创建具有机会系统的服务器端RPG游戏。例如,当被击中的目标使敌人昏迷时,玩家有30%的几率和70%至35%的额外伤害。

所以我有这个解决方案。

//'s' as stuns and 'd' as more damage;
array a = ['s', 's', 's', 'd', 'd', 'd', 'd', 'd', 'd', 'd'];
int chance = random(0, 9);
print a[chance];

但是上述解决方案首先存在一个问题,它仅适用于整数,而另一个则仅适用于可以除以10的数字。

例如,上述功能无法以25%或0.1%的机会作为输入。

  

**警告:上面的代码不是语言。只是写算法**

1 个答案:

答案 0 :(得分:1)

生成一个大数字,并检查该随机数是否小于代表百分比的数字。

例如,有30%的机会(我将使用下限1简化代码,并且假设两个边界都包含在内):

int chance = random(1, 10) // 1 - 10

if (chance <= 3):
    // The 30% chance was met (3 / 10 == 30%)

int chance = random(1, 100) // 1 - 100

if (chance <= 37):
    // A 37% chance was met (37 / 100 == 37%)

或者,对于浮动机会,从超过100的值中生成:

int chance = random(1, 1000) // 1 - 1000

if (chance <= 123):
    // A 12.3% was met (123 / 1000 == 12.3%)

向随机数发生器添加更多0,以获得更高的精度。 1000代表小数点后一位,10000代表小数点后两位...

条件中的数字是发电机可能产生的最大数量的百分比。

当然,这假设一个统一的生成器。