2012-03-04 17 views
3

私は車のゲーム用の画面を作り、次の画面に入るのを待つようにしています。私はすでに正しく動作していないdelay()sleep()を試しました。また、キーを押すと、それは閉じて、私はキーを入力するのを待つことはありません。私はちょうどキーがヒットするまで、タイトルが白と赤の間で点滅し、キーを打った後にそれがなぜ終了するのかを知りたい。そこにバッファ内の文字だが、それは返すの前の文字を削除しない場合C/C++でループを一時停止する方法

#include <dos.h> 
#include <graphics.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
    int gdriver = DETECT, gmode, errorcode; 
    initgraph(&gdriver, &gmode, "C|\\BORLANDC\\BGI"); 
    outtextxy(250,280,"POINTER DRIVER 1.0"); 
    outtextxy(250,290,"LCCM 10070249"); 
    do 
    { 
     setcolor(WHITE); 
     outtextxy(250,380,"PRESS ANY KEY TO CONTINUE"); 
     // delay(10); nothing works here :(
     setcolor(RED); 
     outtextxy(250,380,"PRESS ANY KEY TO CONTINUE"); 
    } while(!kbhit()); 
    cleardevice(); 
    outtextxy(250,290,"HELLO"); //here it draws mega fast and then exits 
    getch(); 
    closegraph(); 
    return 0; 
} 
+1

まだBorlandを使用している人はいませんか? – abelenky

+0

SDLやSFML、さらにはWindows APIのように、より広く広く使用されているAPIを使用した場合、私はあなたを助けることができます。 –

+0

申し訳ありません(別のコメントではそう言われましたが)教授はボーランドCだけでグラフィックを作ってほしいと思っていましたが、Javaで中程度の経験があり、1ヶ月の経験のようにCでもよく –

答えて

1

delay(10)の代わりに、多少のタイマー変数を使用して試してみてください。次のようなものを試してみてください(do-whileループの変更):

unsigned flashTimer = 0; 
unsigned flashInterval = 30; // Change this to vary flash speed 
do 
{ 
    if (flashTimer > flashInterval) 
     setcolor(RED); 
    else 
     setcolor(WHITE); 

    outtextxy(250,380,"PRESS ANY KEY TO CONTINUE"); 

    ++flashTimer; 
    if (flashTimer > flashInterval * 2) 
     flashTimer = 0; 

    // Remember to employ any required screen-sync routine here 
} while(!kbhit()); 
+0

完璧に働いてくれてありがとう! –

+0

あなたは大歓迎です:) –

0

kbhit()戻りtrue

は、ここに私のコードです。 getch()行に達すると、whileループから脱出するために押した最初のキーが使用されます。

解決策:少しハッキーですが、whileループの直後にgetch()を追加すると、おそらくそれが修正されます。

また、Borlandライブラリの代わりにncursesを使用することをお勧めしますか?

+0

私たちはOpen GLを見ることに賛成しましたが、親密な教授がトータル***として行動し、ボウルランドCと仕事をすると、あなたが言ったことを試してみます –

+0

あなたとその人は正しいどうもありがとうございます! –

関連する問題