用于生成具有更大/更小概率的随机数的简单算法
Simple algorithm for generating random numbers with bigger/smaller probability
我目前正在开发一个游戏,屏幕可滚动,我需要找到一个简单的算法来在游戏中放置障碍物。我有一个gameSpeed
,它的时间增加(从 1 到 12,每 1/60 秒增加 0.005)和 200 到 600(整数)之间的可用仓位范围。当速度越大时,我想获得更大的接收较小数字的概率,但这是我的第 14 小时连续编码,我无法想出任何可用且不太复杂的东西。我想最小化数学和随机函数,以便渲染循环不会花费太长时间。任何帮助表示赞赏!
您可以将随机数平方或平方根,以将密度沿一个方向移动。 Math.random()*Math.random()
产生较小数字(接近 0)的概率高于较高的数字(接近 1)。
您的公式可能如下所示
var position = Math.pow(Math.random(), gameSpeed / 3) * 400 + 200;
我能想到的最简单的答案是创建一个数组,与较高的数字相比,具有更多的较低数字,例如,用于在 [1,5] 之间产生随机(包括两者)。所以你的数组可能看起来像[1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
当您从该数组中随机选择一个元素时,与高数字相比,您将有更高的机会拾取低数字。
另一种方法可能是有两个(或更多)百分比:
比如说,从 10% 的时间开始,我们访问 90% 的范围,90% 的时间我们访问另外 10%。然后,随着速度的增加,我们逐渐翻转这些数字。例如
var lBound = 200,
uBound = 600,
range = uBound - lBound,
gameSpeed = 1,
initialMarker = 0.1,
percentageRange = 1 - 2 * initialMarker,
marker = (gameSpeed - 1) / 11 * percentageRange + initialMarker,
position
Math.random() <= marker ? position = Math.floor(Math.random() * (1 - marker) * range) + lBound
: position = uBound - Math.floor(Math.random() * marker * range)
console.log(position)
尝试更改gameSpeed
,看看会发生什么。更改一组不同百分比的initialMarker
(当前设置为 0.1,即 10%/90%)。
相关文章:
- 如何在javascript中获得与特定数字相等的随机数
- Javascript动态变量(添加了随机数)
- 在javascript中添加和显示对象的随机数组中的视频
- 设置随机数,然后每5秒随机减少一次,直到达到0(javascript)
- 生成随机数10次
- 选择随机数组元素并放置到另一个数组中
- 正确使用AES-CTR模式的随机数和计数器
- java中具有长种子值的随机数生成器
- 什么'这个随机数猜谜游戏错了
- 3种对象,随机数组javascript
- 带有 JavaScript 随机数函数的未知问题
- 在JavaScript中生成和检查随机数
- Javascript 随机数组
- 一种从随机数的序列中查找值的简单算法
- 用不重复的随机数填充数组
- 在HTML中创建随机数生成器
- 在 JavaScript 中获取范围的随机数的最佳方法
- javascript获取随机数:在区间内获取较高数的概率较低
- 用于生成具有更大/更小概率的随机数的简单算法
- 根据概率得到随机数