我正在创建一个具有机会系统的服务器端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%的机会一起使用。
**警告:上面的代码不是一种语言。它只是编写算法**
生成一个大数,并检查该随机数是否小于代表百分比的数字。
例如,有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,数字为两个小数点...
条件中的数字是发电机可能产生的最大数字的百分比。
当然,这是一个均匀的发电机。