-1

プログラムの実行を 200 ミリ秒遅らせてから、遅延中にキーが押されたかどうかをテストしようとしています。どうすればいいですか?

Cを使用して、ゆるい鳥に似た単純なコンピューターゲームを作成しようとしています。鳥がジャンプするキーを押すのに少しの時間(〜200ミリ秒)をユーザーに与えたいのですが、私は遅延の実装に問題があります。

100 ミリ秒の遅延が発生するはずの[どこ?]をいくつかのフォーラムで読みましたが、実行すると 100 秒かかります。sleep(100)

も使用してみsleep(1/5)ましたが、関数は整数しか取りません。

さらに、200 ミリ秒の間にキーが押されたかどうかをテストできる必要があります。 そのために関数を使用できることを[どこで?] で読みkbhitましたが、その使用方法がわかりません。

while(!dead) {
    sleep(200); // what do I put here to get 200ms?

    if (keyWasPressedDuringWait()){ //what do I put here?
        notDeadAnimation():
    }else{
        dead=true;
        deadAimation()
    }
}
4

2 に答える 2

3

目的の遅延を実行するには、#include <unistd.h>を使用しますusleep(microseconds)。(200 ミリ秒スリープするには、呼び出しは ですusleep(200000))。

キーボードのストライクをテストし、テスト#include <conio.h>で使用_kbhit()します (キーボードヒットの)。キー バッファーにキーがあるかどうかをテストしますが、削除はしません。を使用してキーを取得し、キー バッファーから削除する必要もあります。ここでヘルパー関数を定義することをお勧めします。_kbhit_getch

int clearKeyBuffer(){
    int count = 0;
    while(_kbhit()){
        _getch();
        count++;
    }
    return count;
}

このメソッドは、現在キー バッファーにあるすべてのキーをクリアし、クリアされたキーの数を返します。次に、これをテストで使用してif(clearKeyBuffer())、最後にテストしてからキーが押されたかどうかをテストできます。

プログラム フローに関しては、余分なものがたくさんあります。あなたはそれのほとんどを取り除くことができ、機能的には同じです:

do {
    notDeadAnimation();
    usleep(200000);
} while(clearKeyBuffer());

deadAnimation();

ただし、これには明らかな問題があります。

于 2014-03-02T16:47:52.913 に答える