3

我目前正在开发一款带有可滚动屏幕的游戏,我需要找到一种简单的算法来在游戏中放置障碍物。我有一个gameSpeed, 随时间增加(从 1 到 12,每 1/60 秒增加 0.005)和 200 到 600(整数)之间的可用位置范围。当速度更大时,我想获得更大的概率接收更小的数字,但这是我的第 14 小时连续编码,我无法想出任何可用且不会过于复杂的东西。我想最小化数学和随机函数,以便渲染循环不会花费太长时间。任何帮助表示赞赏!

4

3 回答 3

5

您可以对随机数进行平方或平方根,以将密度向一个方向移动。Math.random()*Math.random()将有更高的概率产生较小的数字(接近 0)而不是较高的数字(接近 1)。

你的公式可能像

var position = Math.pow(Math.random(), gameSpeed / 3) * 400 + 200;
于 2013-09-18T23:07:19.193 回答
2

我能想到的最简单的答案是创建一个与较高数字相比具有更多较低数字的数组,例如,用于在 [1,5](包括两者)之间产生随机数。所以你的数组可能看起来像[1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]

而且,当您从该数组中随机选择一个元素时,与高数相比,您将有更高的机会选择低数。

于 2013-09-18T23:10:58.307 回答
1

另一种方法可能是有两个(或更多)百分比:

比如说,从我们访问 90% 范围的 10% 的时间开始,以及我们访问其他 10% 的 90% 的时间开始。然后随着速度的增加,我们逐渐翻转这些数字。例如,

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%)。

于 2013-09-19T14:56:04.773 回答