Вопрос

Я работаю над карточной игрой, и мне нужен алгоритм shuffle, чтобы сделать очень хорошую работу и быть разным каждый раз, когда игра работает и не иметь предсказуемых последовательностей карт.

Я использую алгоритм Mersenne Twister, но он все еще нуждается в семени, поэтому на самом деле, хотя он дает большие числа, прямо сейчас есть только 1000 возможных последовательностей игр, так как я использую время (NULL) для семян. Как мне посещать?

Это было полезно?

Решение

Моя стандартная техника посева:

  1. Если /dev/urandom существует, читайте семя оттуда.

  2. Если вы находитесь в Windows, используйте CryptGenRandom().

  3. Если ничего не удается, используйте time().

(Не уверен, откуда приходит ваш Mersenne Twister, но есть у новой стандартной библиотеки есть одна в <random> который интегрирует очень элегантно.)

Я рад услышать предложения для платформ, которые не покрываются первыми двумя шагами!

Другие советы

Вы можете использовать Источник энтропии операционной системы Чтобы получить хорошее случайное число семян. В окнах это Cryptoapi; На Posix вытащите байты из /dev/urandom.

Типичным значением семян является низкое 32 бита в 64 -битное время тока. Например, используйте возвратное значение вызова Linux get TimeOfday.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top