1

誰かが「HelloWorld」などのグローバルシード値を取得し、その値を使用して配列またはテーブルの値を検索するための良い方法を提案してください。

私は、惑星にさまざまな属性があったが、それらはランダムではなく、単に宇宙のシード値から導出された、「エリート」の古典的な宇宙飛行ゲームのように考えています。

私は入力値でMD5を考え、ハッシュからのバイトを使用して整数にキャストし、ルックアップテーブルの許容可能なインデックスに変更することを考えていましたが、もっと良い方法があるはずだと思いますか?メルセンヌツイスターについて何か読んだのですが、それはやり過ぎかもしれません。

ルックアップテーブルの値を適切に分散できるものを期待しています。例:赤、オレンジ、黄、緑、青、紫

また、強調するために、私はランダムな値ではなく、毎回一貫した値を探しています。

更新:おそらく、私は自分の問題領域を表現するのに苦労しています。ジェネレーターを使用し、X個の値を生成できるサイトの例を次に示します。http ://www.seventhsanctum.com

追加の基準

System.Randomなどのライブラリ関数を使用するよりも、最初の原則から作業する方が好きです。

4

2 に答える 2

2

私のアプローチは、乱数ジェネレーターのシードとしてキーを使用することです。

public StarSystem(long systemSeed){
    java.util.Random r = new Random(systemSeed);
    Color c = colorArray[r.nextInt(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.nextInt(politicsArray.length)];
    ...
}

与えられたシードに対して、これは毎回同じ色と同じ政治システムを生み出します。

文字列から開始シードを取得するには、MD5Sumを使用して、最初/最後の64ビットを長い間取得できます。もう1つの方法は、各植物に数値を使用することです。Eliteは、疑似ランダムジェネレーターを使用して各システムの名前も生成しました。

for(long seed=1; seed<NUMBER_OF_SYSTEMS; seed++){
    starSystems.add(new StarSystem(seed));
}

ランダムが呼び出されるたびに同じシーケンスを返すたびにシードを既知の値に設定することにより、適切なランダム値を試行する場合、適切なシードが非常に重要になるのはこのためです。ただし、あなたの場合、既知のシードがあなたが探している結果を生み出します。

c#に相当するものは

public StarSystem(int systemSeed){
    System.Random r = new Random(systemSeed);
    Color c = colorArray[r.next(colorArray.length)]; // generates a psudo-random-number based from your seed
    PoliticalSystem politics = politicsArray[r.next(politicsArray.length)];
    ...
} 

違いに気づきましたか?いいえ、私もしませんでした。

于 2010-01-24T13:52:02.167 に答える
1

多くの一般的な乱数ジェネレーターは、同じシード値を指定して同じシーケンスを生成するため、名前を数値に変換するだけでよいようです。それを行うハッシュ関数はいくつもあります。

補足質問:すべての一意の文字列が一意のハッシュを生成し、(おそらく)一意の疑似ランダムシーケンスを生成する必要がありますか??

于 2010-01-24T14:07:23.983 に答える