2017-01-13 2 views
3

私はテキストベースのテトリスを作っている初心者です。その作品は150msごとにダウンしていますが、実行中は左右に動かすことができます。C++眠っている間にコードを実行

睡眠は明らかに効力を発揮しないため、代替手段はありませんか?

while (true) { 
    draw(); 

if (GetAsyncKeyState(VK_RIGHT]) { 
    leftright(1); 
} 
if (GetAsyncKeyState(VK_LEFT)) { 
    leftright(-1); 

} 

    check(); 
    move(1); 

    check(); 

    checkline(); 
    movedown(); 

    Sleep(x); 
    system("CLS"); 
} 
+2

タイマーの使用/作成? – UnholySheep

+2

イベントループを持つGUIが必要です。タイマーイベントでピースを移動するタイミングを知らせることができます。また、ユーザーが移動したときにキーボードイベントによって通知することもできます。 –

+0

だから、どんなタイマーなの?何ミリ秒寝ることなく時間を数えることができますか?または、150msをより小さなものに分割し、これらの間でコードを実行する必要がありますか? – Avadak

答えて

1

これを行う最も簡単な方法は、タイマーを使用することです。私はあなたのコードのハンドルを把握moveown()関数は、作品を下に引っ張っている。前回の呼び出しから十分な時間が経過した場合にのみ実行するようにします。何かのように:

#include <iostream> 
#include <cstdio> 
#include <ctime> 
static std::clock_t start = std::clock(); // take the start ticks at the beginning 

int movedown() { 

    std::clock_t currentTime = std::clock(); 
    double duration = (start - currentTime) * 1000/(double) CLOCKS_PER_SEC; // multiplied by thousand to get time in ms 

    if ((long int) duration > 150) 
    { 
    **/* Your algorithm here */** 
    start = std::clock(); //update start 
    } 
    return 0;  
} 
+1

個人的には、移動された機能がそれが言ったことをしたならば、私はそれをより直感的に見つけるでしょう。私はあなたが機能の外に下がるべきかどうかのチェックを移動します。例えば'if(duration> 150)movedown()' –

関連する問題