0

我正在做一个纸牌游戏,我需要洗牌算法做得很好,每次游戏运行时都不同,并且没有可预测的纸牌序列。

我正在使用 Mersenne twister 算法,但它仍然需要一个种子,所以说真的,虽然它产生了大量的数字,但现在只有 1000 个可能的游戏序列,因为我使用 time(NULL) 来播种。我应该如何播种?

4

3 回答 3

4

我的标准播种技术:

  1. 如果/dev/urandom存在,请从那里读取种子。

  2. 如果您在 Windows 中,请使用CryptGenRandom().

  3. 如果一切都失败了,请使用time().

(不确定你的 Mersenne twister 来自哪里,但是新的标准库有一个<random>非常优雅地集成在其中。)

我很高兴听到针对前两个步骤未涵盖的平台的建议!

于 2011-09-05T21:04:53.827 回答
1

您可以使用操作系统的熵源来获得一个好的随机数种子。在 Windows 上,这是CryptoAPI;在 POSIX 上,从/dev/urandom.

于 2011-09-05T21:06:38.990 回答
0

典型的种子值是 64 位当前时间的低 32 位。例如使用Linux gettimeofday 调用的返回值。

于 2011-09-05T21:07:22.900 回答