カードゲームにRNGを適切にシードします
-
26-10-2019 - |
質問
私はカードゲームに取り組んでおり、非常に良い仕事をし、ゲームが実行されるたびに異なるため、予測可能なカードシーケンスを持たないように、シャッフルアルゴリズムが必要です。
私はMersenne Twisterアルゴリズムを使用していますが、それでもシードが必要なので、実際には多くの数が生成されますが、時間(null)を使用してシードを使用しているため、ゲームのシーケンスは1000しかありません。どのように播種する必要がありますか?
解決
私の標準的な播種技術:
もしも
/dev/urandom
存在し、そこから種を読んでください。Windowsにいる場合は、使用してください
CryptGenRandom()
.他のすべてが失敗した場合は、使用してください
time()
.
(あなたのMersenne Twisterがどこから来たのかはわかりませんが、新しい標準ライブラリには1つあります <random>
これは非常にエレガントに統合されています。)
最初の2つのステップでカバーされていないプラットフォームの提案を聞いてうれしいです!
他のヒント
使用できます オペレーティングシステムのエントロピー源 適切な乱数シードを取得するには。 Windowsでは、そうです Cryptoapi; Posixで、からバイトをプルします /dev/urandom
.
典型的な種子値は、64ビットの現在の時間で32ビットが低いことです。たとえば、Linux GetTimeOfDayコールの返品値を使用します。
所属していません StackOverflow