Frage

Ich arbeite an einem Kartenspiel und brauche den Shuffle -Algorithmus, um einen sehr guten Job zu machen und jedes Mal anders zu sein, wenn das Spiel läuft und keine vorhersehbaren Kartensequenzen hat.

Ich benutze den Mersenne Twister -Algorithmus, aber es braucht immer noch einen Samen. Obwohl es große Zahlen erzeugt, gibt es im Moment nur 1000 mögliche Spielsequenzen, da ich Zeit (null) zum Saatgut benutze. Wie soll ich aussaat sein?

War es hilfreich?

Lösung

Meine Standard -Seeding -Technik:

  1. Wenn /dev/urandom existiert, lesen Sie einen Samen von dort.

  2. Wenn Sie in Windows sind, verwenden Sie CryptGenRandom().

  3. Wenn alles andere fehlschlägt, verwenden Sie time().

(Ich bin mir nicht sicher, woher Ihr Mersenne Twister kommt, aber es gibt eine neue Standardbibliothek <random> die sehr elegant integriert.)

Ich freue mich, Vorschläge für Plattformen zu hören, die nicht von den ersten beiden Schritten abgedeckt werden!

Andere Tipps

Du kannst den ... benutzen Entropiequelle des Betriebssystems um einen guten Zufallszahlensamen zu bekommen. Unter Windows ist das Cryptoapi; auf posix, ziehen Sie Bytes von /dev/urandom.

Ein typischer Samenwert ist die niedrige 32 Bit in einer Stromzeit von 64 Bit. Verwenden Sie beispielsweise den Rückgabewert des Linux GetTimeofday -Anrufs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top