我目前正在开发一款带有可滚动屏幕的游戏,我需要找到一种简单的算法来在游戏中放置障碍物。我有一个gameSpeed
,它在时间上增加(从1到12,每1/60增加0.005)和一系列可用位置在200到600(整数)之间。当速度较大时,我希望获得接收较小数字的更大概率,但这是我的第14个小时直接编码,我无法提出任何可用且不过分复杂的东西。我想最小化数学和随机函数,以便渲染循环不会花费太长时间。任何帮助表示赞赏!
答案 0 :(得分:5)
您可以将随机数平方或平方根以在一个方向上移动密度。 Math.random()*Math.random()
生成较小数字(接近0)的概率高于较高数字(接近1)。
您的公式可能就像
var position = Math.pow(Math.random(), gameSpeed / 3) * 400 + 200;
答案 1 :(得分:2)
我能想到的最简单的答案是创建一个数字比较高数字更低的数组,例如,在[1,5](包括两者)之间产生随机数。因此,您的数组可能看起来像[1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
当你从该阵列中随机挑选一个元素时,与高一个元素相比,你获得较低数字的机会较高。
答案 2 :(得分:1)
另一种方法可能是拥有两个(或更多)百分比:
说,从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%)。