6

我有一个棘手的问题,我已经研究了几次但没有弄清楚。

一些背景故事:我正在制作一个基于文本的 RPG 游戏,玩家可以在其中与动物/怪物等战斗。它的工作方式与任何其他游戏一样,你每轮都会互相击中多个生命值。

问题:我正在使用 php 中的随机函数来生成命中的最终值,具体取决于级别、盔甲等。但我希望较高的值(如最大命中)出现的频率低于较低的值。

这是一个示例图:

示例图

如何使用 PHP 和 rand 函数重现这样的内容?键入rand(1,100)每个数字时,被选中的机会均等。

我的想法是:做一个二阶(或二次函数)并使用随机数(x)进行计算。

这会像我想要的那样工作吗?

这个问题有点棘手,如果您想了解更多信息和细节,请告诉我。

4

2 回答 2

2

请看这篇美丽的文章: http ://www.redblobgames.com/articles/probability/damage-rolls.html

有考虑掷骰子和结果百分比的交互式图表。这对您应该非常有用。

注意这种滚动随机数:

roll1 = rollDice(2,  12);
roll2 = rollDice(2,  12);
damage = min(roll1, roll2);

这应该给你你想要的。

于 2012-04-26T11:39:01.227 回答
1

好的,这是我的想法:

假设您有一组元素(a,b,c,d),并且您不会随机选择其中一个。做 arand(1,4)来获得随机元素索引,意味着所有元素都有平等的机会出现。(25%)

现在,假设我们采用这个数组 : (a,b,c,d,d)

这里我们仍然有 4 个元素,但并不是每个元素都有相同的出现机会。

  • a,b,c : 20%
  • d : 40%

或者,让我们使用这个数组:

(1,2,3,...,97,97,97,98,98,98,99,99,99,100,100,100,100)

提示:这样您不仅会偏向随机数生成算法,而且实际上会设置每个(或一系列数字)出现的所需概率。


所以,这就是我将如何去做:

如果您想要从 1 到 100 的数字(更高的数字出现得更频繁,请获取一个从 1 到 1000 的随机数并将其与更广泛的范围相关联。例如

rand = 800-1000 => rand/10 (80->100)
rand = 600-800  => rand/9 (66->88)
...

或类似的东西。(你可以使用你想象的任何数学运算,模或其他......并使用你的算法)。我希望你明白我的想法。

祝你好运!:-)

于 2012-04-26T11:47:26.410 回答