Question

Je travaille sur un jeu de cartes et je dois l'algorithme de lecture aléatoire pour faire un très bon travail et être différent à chaque fois que les pistes de jeu et de ne pas avoir des séquences de cartes prévisibles.

J'utilise l'algorithme de Mersenne Twister mais il a encore besoin d'une graine, donc vraiment, même si elle produit un grand nombre, en ce moment il n'y a que 1000 séquences possibles de jeux depuis que je suis en utilisant le temps (NULL) aux semences. Comment dois-je ensemencement?

Était-ce utile?

La solution

Ma technique de semis standard:

  1. Si existe /dev/urandom, lu une graine à partir de là.

  2. Si vous êtes sous Windows, utilisez CryptGenRandom().

  3. Si tout le reste échoue, utilisez time().

(Je ne sais pas où votre Mersenne Twister vient, mais il y a nouvelle bibliothèque standard dispose d'un dans <random> qui intègre avec beaucoup d'élégance.)

Je suis heureux d'entendre les suggestions des plates-formes qui ne sont pas couvertes par les deux premières étapes!

Autres conseils

Vous pouvez utiliser la source de l'entropie du système d'exploitation pour obtenir un bon nombre aléatoire la graine. Sous Windows, c'est CryptoAPI ; sur Posix, tirer octets de /dev/urandom.

Une valeur typique de la graine est la faible 32 bits en un temps courant 64 bits. Par exemple, utilisez la valeur de retour d'appel Linux gettimeofday.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top