正确播种RNG用于纸牌游戏

时间:2011-09-05 21:00:07

标签: c++ algorithm random playing-cards mersenne-twister

我正在进行纸牌游戏,我需要使用随机播放算法做一个非常好的工作,并且每次游戏运行时都会有所不同,并且没有可预测的卡片序列。

我正在使用Mersenne twister算法,但它仍然需要一个种子,所以实际上,虽然它产生了很多数字,但是现在只有1000种可能的游戏序列,因为我正在使用时间(NULL)来播种。我该怎么播种?

3 个答案:

答案 0 :(得分:4)

我的标准播种技术:

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

  2. 如果您使用的是Windows,请使用CryptGenRandom()

  3. 如果所有其他方法都失败了,请使用time()

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

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

答案 1 :(得分:1)

您可以使用operating system's entropy source获取一个好的随机数种子。在Windows上,那是CryptoAPI;在POSIX上,从/dev/urandom拉取字节。

答案 2 :(得分:0)

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