2012-03-09 14 views
1

私は書くべきサイコロプログラムのループを徐々に遅くすることができる方法を見つけようとしてきました。乱数を取得して表示/比較することは難しくありません。私の問題は、乱数をどのように表示して、サイコロが動いているかのように、乱数を表示する方法を見つけ出そうとしています。生成された乱数を表示するまで、徐々に遅くなります。ループが徐々に減速しますか?

私はfor-loopを別のfor-loopの中で行い、最初のループ番号を使って2番目のfor-loopを減算することを考えました。より良い方法があるかどうかわかりません。すべてのセーチングは、メモリを割り当てていないためにプログラムがどのように遅くなっているかについての陳腐化を引き起こします。

for (int i = 5; i > 0; i--) 
{ 
    for (int j = 1000; j > 0; j -= i) 
    { 
     cout << randNumGen(); 
    } 
} 
+10

ちょうどその期間依存している遅延を入れています内側のfor-loop内部の 'j'の値に基づいていますか? –

+0

私はマットが言ったことに行きます。代わりに、時間のかかる無駄な計算を遅れとして実行することですが、それらは環境特有であり、うまくいきます。*無駄です。 –

+0

私はMatt Phillipsよりもさらに進んで、遅れなく番号を生成してから、別の "ディスプレイ"ループを作成し、必要な遅延を表示します。 –

答えて

3
#include <thread> 
#include <chrono> 

::: 
for (int i = 5; i > 0; i--) 
{ 
    for (int j = 1000; j > 0; j -= i) 
    { 
     cout << randNumGen(); 
     std::this_thread::sleep_for(
      std::chrono::milliseconds(j)); 

    } 
} 

http://en.cppreference.com/w/cpp/thread/sleep_for

http://en.cppreference.com/w/cpp/chrono

それはまた、おそらくあなたの中の価値があるランダムC++ 11には、クロスプラットフォームな方法で乱数を発生させるよりC++の方法です見てください。

std::uniform_int_distribution<int> distribution(1, 6); //dice values 
std::mt19937 engine; // Mersenne twister MT19937 
int random = distribution(engine); 

http://en.cppreference.com/w/cpp/numeric/random

#include <thread> 
#include <chrono> 
#include <random> 
#include <iostream> 

::: 

std::random_device rd; 
std::uniform_int_distribution<int> dist(1, 6); //dice values 
std::mt19937 mt(rd()); // Mersenne twister MT19937 

for (int i = 5; i > 0; i--) //i don't really get what your loops mean 
{ 
    for (int j = 1000; j > 0; j -= i) 
    { 
     cout << dist(mt); 
     std::this_thread::sleep_for(
      std::chrono::milliseconds(j)); 

    } 
} 

あなたはgccのためのC++ 11のサポートでコンパイルし、これを打ち鳴らす必要があります-std = C++ 0xの

+0

それは正しい私は私が開発していたシステムがウォッチドッグで組み込まれた "遅延"タイマーを持っていることを知りました。だから、睡眠機能が働いた。 – LF4

+0

@ LF4問題なし – 111111

関連する問題