algorithm - 在角色扮演游戏中创造机会功能

标签 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% 的几率作为输入工作。

** Warning: The code above is not a language. it just is written algorithm**

最佳答案

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

例如,要有 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%)

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

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

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

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

条件中的数字是生成器可能产生的最大数字的百分比。

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

关于algorithm - 在角色扮演游戏中创造机会功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821458/

相关文章:

java - 如何从数组中生成随机数

c# - 反向抛光表示法 C# 无法正常工作

algorithm - Bucket-Sort 的这个实现是否被认为是 "in-place"?

javascript - 如何使该变量在 div 刷新时生成新的随机数?

c++ - 从一组随机数中选择 N 个

c++ - <random> uniform_real_distribution 点间距离最小

mysql - MsSQL NEWID 是否像 MySQL Rand() 一样糟糕

java - 求解线性丢番图方程(参见示例说明)

algorithm - 在 LaTeX 算法环境中格式化注释

algorithm - 数组给定范围内每个不同整数的出现次数