3

c4droid IDE を使用して、Android 端末用にランダムに生成された世界を持つ単純な ASCII スタイルのゲームを作成しようとしています。これは C++ をサポートしており、基本的にはarray[width][height]ルールを使用してタイルを生成しています。rand()%2 - 1歩けるタイルを作成します0。壁です。しかし、問題があります。マップを「ランダムに」生成するたびに、同じように見えます-rand()実際にはランダムではないためです。HDDや別の部品が作るエントロピーを利用するという話を聞いたことがあります。問題は、Androidで使用しているため、C ++がJavaほど使用されていないため実装するのが奇妙であるため、Googleで解決策を見つけることができなかったことです。とても短い質問:Androidでc ++を使用して「かなり本物の」乱数を生成するにはどうすればよいですか?

4

2 に答える 2

10

で乱数ジェネレーターをシードする必要がありますsrand(time(NULL))。これにより、コンピューターはシステム時間を使用して疑似乱数を生成できます。

参照へのリンク: http://www.cplusplus.com/reference/clibrary/cstdlib/srand/

編集: rand() 関数をシードする必要があるのは、通常はプログラムの開始時に 1 回だけであることに注意してください。

int main()
{
 srand(time(NULL)) //only needed to be called ONCE
 //code and rand functions afterward
}
于 2012-11-09T18:24:52.903 に答える
3

rand() は、あなたがやっていることに対してうまくいくはずです。乱数ジェネレーターをシードしていますか?

srand(time(NULL));
// Should be a different set of numbers each time you run.   
for(unsigned i = 0; i < 10; ++i) {
    cout << rand() % 2 - 1;    
}
于 2012-11-09T18:26:06.813 に答える