Pregunta

Estoy trabajando en un juego de cartas y necesito el algoritmo Shuffle para hacer un muy buen trabajo y ser diferente cada vez que se ejecuta el juego y no tener secuencias de tarjetas predecibles.

Estoy usando el algoritmo de Mersenne Twister, pero todavía necesita una semilla, por lo que realmente, aunque produce grandes números, en este momento solo hay 1000 secuencias posibles de juegos ya que estoy usando el tiempo (nulo) para la semilla. ¿Cómo debo estar sembrando?

¿Fue útil?

Solución

Mi técnica de siembra estándar:

  1. Si /dev/urandom existe, lea una semilla desde allí.

  2. Si estás en Windows, usa CryptGenRandom().

  3. Si todo lo demás falla, usa time().

(No estoy seguro de dónde proviene su Mersenne Twister, pero la nueva biblioteca estándar tiene una en <random> que se integra muy elegantemente).

¡Me complace escuchar sugerencias para plataformas que no están cubiertas por los dos primeros pasos!

Otros consejos

Puedes usar el fuente de entropía del sistema operativo Para obtener una buena semilla de número aleatorio. En Windows, eso es Criptoapi; En Posix, tire de bytes de /dev/urandom.

Un valor de semilla típico es el bajo 32 bits en un horario de corriente de 64 bits. Por ejemplo, use el valor de retorno de Linux getTimeOfday Call.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top