我正在尝试制作一个伪随机地图生成器,我遇到了问题,以便找到一个获得“随机”数字的正确方法。
我需要使函数能够接受一组坐标(x和y)并根据它返回一个伪随机数,并且它们必须始终是精确输入的确切数字。
另外,我不需要一个随机发生器,我的地图需要高度,湿度和温度,所以我需要几个。这就是为什么我需要能够插入一个种子或第三个“坐标”,以便为每个礼物获得不同的数字。
实际上,我在互联网上找到了这样的东西(我将3个功能组合在一起),但它不接受3个输入:
function PRNG(seed) {
seed = seed % 2147483647;
if (seed <= 0) {
seed += 2147483646;
}
random = (seed * 16807) % 2147483647;
return (random - 1) / 2147483646;
}
我不了解按位操作和PRNG所以我不知道如何修改此功能。
我的想法是做一些非常简单的事情,但我不知道这是否仍然是PRNG或我的修改已经打破了它:
function PRNG(seed, x, y) {
seed = seed % 2147483647;
if (seed <= 0) {
seed += 2147483646;
}
random = (seed * 16807 + x * 1234 + y * 4321) % 2147483647;
return (random - 1) / 2147483646;
}
此外,我不认为seed
的概念与x
和y
的工作原理相同,因为我不希望3个输入是附加的(种子) + x + y),因为这意味着它们可以是交换的,例如:坐标(种子,3.5,1)几乎与(种子,0.25,3.5)相同(可以在地图中以奇怪的模式转换,我想),它应该是不同的,但我不知道如何
从我的原始测试(10M迭代和平均值的循环),它似乎是随机的,平均数为0.49925(而不是0.50)。
P.S:我知道这个问题有点奇怪,如果您认为这应该迁移到Code Review或者删除我会这样做。