我正在创建具有机会系统的服务器端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%的机会作为输入。
**警告:上面的代码不是语言。只是写算法**
答案 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代表小数点后两位...
条件中的数字是发电机可能产生的最大数量的百分比。
当然,这假设一个统一的生成器。