我正在进行纸牌游戏,我需要使用随机播放算法做一个非常好的工作,并且每次游戏运行时都会有所不同,并且没有可预测的卡片序列。
我正在使用Mersenne twister算法,但它仍然需要一个种子,所以实际上,虽然它产生了很多数字,但是现在只有1000种可能的游戏序列,因为我正在使用时间(NULL)来播种。我该怎么播种?
答案 0 :(得分:4)
我的标准播种技术:
如果/dev/urandom
存在,请从那里读取种子。
如果您使用的是Windows,请使用CryptGenRandom()
。
如果所有其他方法都失败了,请使用time()
。
(不确定Mersenne twister来自哪里,但是新标准库在<random>
中有一个非常优雅地集成。)
我很高兴听到有关前两个步骤未涵盖的平台的建议!
答案 1 :(得分:1)
您可以使用operating system's entropy source获取一个好的随机数种子。在Windows上,那是CryptoAPI;在POSIX上,从/dev/urandom
拉取字节。
答案 2 :(得分:0)
典型的种子值是64位当前时间中的低32位。例如,使用Linux gettimeofday调用的返回值。