2012-02-24 8 views
1

私はC++で基本的なスネークゲームを作ろうとしていますが、orl [x]とory [y]配列を持つ基本グリッドを作ったので、今はスネークを追加しようとしています。C++のコードで指定された待ち時間の後に何かを実行しますか?

基本的には、特定のキーが押されるまでスネークを動かし、一度に1つの配列を移動させたいと思います。タイマー以外のものを使ってみましたが、すぐに実行されます。私はキーが押されるまで毎秒ヘビがそれをやり続けるようにタイマーが必要です。あなたがヘビをプレイしたことがあれば、私の言いたいことを正確に知っている。

C++でタイマーを作成する必要がありますが、タイマーを作成してENORMOUSコードを実装したくないし、自分のコードから何も理解できません。私はできるだけシンプルにしたい。

どうすればいいですか?私は時間ヘッダーライブラリを調べましたが、そこには何も役立ちませんでした。

+1

を使用して待機しているプラ​​ットフォームに依存しないを行うことができますか?関連する質問:どのようにスクリーン上にヘビを描いていますか? –

+0

あなたは簡単に[ctime](http://www.cplusplus.com/reference/clibrary/ctime/difftime/)を多くの死んだシンプルタイマークラスに使うことができます。 – David

+0

純粋なc/C++の立場ではタイマーを作ることはできません。あなたはいくつかのシステムAPI/syscall /を使用しなければなりません。 –

答えて

1

スタンダードC++は、この種の動作を実際にサポートしていないというのが悲しいことです。 WindowsとPosixの両方でスリープ機能がサポートされています。より高いレベルの解決策のために、Boost :: Threadsを見ることができます。

+0

'usleep'と' select'もあります。 –

+1

C++ 11はhttp://en.cppreference.com/w/cpp/thread/sleep_forとです。 – juanchopanza

+0

ほとんどの専門家は、まだC++ 11にアクセスすることはできませんが、そうしていれば、是非とも。 – Joel

1

Linuxの場合は、「time.h」を使用できます
ここには数秒間待つという簡単な機能があります。
必要に応じて、ミリ秒単位で変更できます。
また、ncursesライブラリを使用していますか?

#include <iostream> 
#include <cstdlib> 
#include <time.h> 

void SleepForNumberOfSeconds(const int & numberofSeconds); 

int main(){ 

    std::cout << "waiting a second.." << std::endl; 
    SleepForNumberOfSeconds(1); 
    std::cout << "BOOM!" << std::endl; 

    std::cout << "waiting 5 seconds.." << std::endl; 
    SleepForNumberOfSeconds(5); 
    std::cout << "AH YEAH!" << std::endl; 

    return EXIT_SUCCESS; 
} 

void SleepForNumberOfSeconds(const int & numberofSeconds){ 

    timespec delay = {numberofSeconds,0}; //500,000 = 1/2 milliseconds 
    timespec delayrem; 

    nanosleep(&delay, &delayrem); 

    return; 
} 
+0

私はそれを試してみるよ、ありがとう。 – Bugster

+0

http://stackoverflow.com/questions/7827062/is-there-a-windows-equivalent-of-nanosleep –

0

ウィンドウを使用している場合は、SetWaitableTimer Windows API呼び出しを確認してください。 私はiPad上では分かりやすい例はありませんが、必要なのはそれだけです。

幸運を祈る!

1

現在、C++ 11の回答が存在しないため、この回答を追加しています。

あなたはどのオペレーティングシステムを使用しているstd::this_thread::sleep_for

void millisecond_wait(unsigned ms) 
{ 
    std::chrono::milliseconds dura(ms); 
    std::this_thread::sleep_for(dura); 
} 
関連する問題