4

カードゲームを書いていますが、山からランダムにカードを引く必要があります。そのために Random と Random.Next(..) を使用しています。今、アプリケーションをデバッグし、同じランダム シーケンスを使用して特定のシナリオを再現できるようにしたいと考えています。誰か助けてくれませんか...?何度か検索しても答えが見つかりませんでした。ありがとう。

4

5 に答える 5

11

Randomシード値を受け入れるコンストラクターのオーバーロードを使用する

static Random r = new Random(0);

これにより、すべての実行で同じ一連の疑似乱数が生成されます。

于 2013-09-16T10:36:43.167 に答える
4

乱数ジェネレーターをシードする必要があります。を使用していると仮定するとSystem.Random、使用

Random r = new Random(<some integer>);

でシーケンスを開始します<some integer>

ただし、ここで重要な注意点があります。乱数ジェネレーターを慎重に調査する必要があります。そうしないと、シーケンスを解読することが可能になり、抜け目のないユーザーが意図せずにゲームをプレイして利益を得ることができます。Random本番環境に移行したら、使用することはないと思います。(技術的には、線形合同シーケンス (C# が使用するもの) を 3 つ強の図面で解読することが可能です。)

于 2013-09-16T10:40:19.707 に答える
1

Random コンストラクターで同じシードを使用します。これにより、Next() で同じ結果が得られることが保証されます。例えば

Random randomGen1 = new Random(5);

Random randomGen2 = new Random(5);

int r1 = randomGen1.Next();
int r2 = ramdomGen2.Next();

if(r1 == r2)
{
 Console.WriteLine("Great success!!");
}
于 2013-09-16T10:45:37.453 に答える
1

System.Random同じシードでインスタンスを作成します。

Random random = new System.Random(1337);
于 2013-09-16T10:37:03.750 に答える