生成可靠的伪随机数

我想在iOS平台上编写一个多人游戏。 游戏依靠dynamic生成的随机数来决定接下来发生的事情。 但是这是一个多人游戏,所以这个“随机数”对所有玩家来说都应该是一样的,以便有一个一致的游戏。

因此,我需要一个好的可靠的伪随机数生成器,如果我先给它一个相同的数字,它将在所有设备(iPad / iPhone / iPodTouch)和所有操作系统版本上保持生成相同的随机数序列。

看起来像srandrand将为我做的工作,但我不知道rand保证在所有操作系统版本的所有设备上生成相同的数字? 否则有什么好的伪随机数生成algorithm?

从C标准(和目标C是在C之上的薄层,所以这应该仍然成立):

如果srand用相同的种子值被调用,那么伪随机数的序列应该重复。

不能保证不同的实现(甚至相同实现的不同版本)会根据种子给出一致的序列。 如果你真的想保证,你可以编写自己的线性同余生成器,比如标准中的例子。

 // RAND_MAX assumed to be 32767. static unsigned long int next = 1; void srand(unsigned int seed) { next = seed; } int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } 

而且,尽pipe周围有更好的发生器,但是除非你是一个统计学家或密码学家,否则简单的线性一致性通常就足够了。

如果你提供一个种子值兰德,那么它应该始终提供相同的伪随机序列序列。 你也可以尝试arc4random()。