我有一个棘手的问题,我已经好好看了几次而没有搞清楚。
一些背景故事:我正在制作一个基于文本的角色扮演游戏,玩家可以与动物/怪物等进行战斗。它的效果就像其他任何游戏中你每一轮都会碰到许多生命值。
问题:我在php中使用随机函数来生成命中的最终值,具体取决于等级,护甲等。但是我希望较高的值(比如最大命中)看起来要低于较低值。
这是一个示例图:
如何使用PHP和rand函数重现这样的东西?输入rand(1,100)
时,每个号码都有相同的被选机率。
我的想法是:制作第二度(或二次函数)并使用随机数(x)进行计算。
这会像我想的那样工作吗?
这个问题有点棘手,如果你想了解更多信息和细节,请告诉我。
答案 0 :(得分:1)
请看这篇美丽的文章: http://www.redblobgames.com/articles/probability/damage-rolls.html
有交互式图表,考虑骰子滚动和结果百分比。 这应该对你非常有用。
注意这种滚动随机数:
roll1 = rollDice(2, 12);
roll2 = rollDice(2, 12);
damage = min(roll1, roll2);
这可以为您提供所需的信息。
答案 1 :(得分:0)
好的,这是我的想法:
假设您有一系列元素(a,b,c,d)
并且您不会随机选择其中一个元素。使用rand(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)
...
或类似的东西。 (您可以使用您想象的任何数学运算,模数或其他...并使用您的算法)。我希望你明白我的想法。
祝你好运! : - )