允许“索引”的随机数生成器

时间:2014-01-30 15:22:54

标签: algorithm random

我希望这不是一个明显的问题:是否有一个随机数生成算法不依赖于先前返回的值,因此我可以获得(例如)序列中的第50个数字,而不计算之前的49个?

原因是我正在制作持久的roguelike(这样我可以从同一种子中重新创建完全相同的级别),但是为了计算每个级别的某些特征,我不想“计算” “所有以前的功能只是为了让随机数发生器达到正确使用的”状态“,例如,到目前为止已经使用了100次。我希望能够在不确定先前值的情况下查询第101个随机数,以便程序可以单独创建级别功能。

2 个答案:

答案 0 :(得分:1)

您可以使用任何密码加密普通序列号[1..N], 并通过这种方式 - 为每个SeqNo生成唯一的伪随机值。

答案 1 :(得分:0)

如果使用linear congruential random number generator,计算从给定种子生成的$ n $ -th元素是微不足道的。但是,在游戏的“有趣”点上隐藏状态可能更容易。

OTOH,如果你想在某个时刻“重新启动”游戏,你可能希望能够重建地下城的功能,但是(由于不同的玩家行为),RNG的使用将与之不同。即,如果在同一点开始,如果我在怪物上射击两次,RNG的使用次数将比我刚刚逃跑的次数多;生成的下一个项目将获得不同的值。也许您真正想要的是几个独立的随机数流,并根据需要保存状态?

周围有很多roguelike游戏,主要是开源游戏。有些是有限的/小的(来自“在一天中建立一场比赛”的比赛),并且可能为你提供一个很好的起点。为什么要开始自己的,而不是破解现有的?