2012-03-04 64 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 2012-03-04 06:18:33

+0

如果您使用了更好更廣泛的api,如SDL或SFML,甚至Windows API,我都可以幫助您。 – 2012-03-04 06:27:36

+0

對不起(剛纔說的所以在另一條評論),但教授希望只使用Borland C至使圖形,我也有一樣1個月經驗 – 2012-03-04 06:37:42

回答

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

工作完全謝謝你很多老兄! – 2012-03-04 06:45:29

+0

不客氣:) – 2012-03-04 06:53:58

0

kbhit()回報true如果有在緩衝區中的字符,但它返回之前不會刪除字符。一旦你到達getch()行,它就會按下第一個按鍵來擺脫while循環。

可能的解決辦法:雖然這是一個有點哈克,加入getch()之後while循環可能會解決它。

我也可以建議使用ncurses代替那些Borland庫嗎?

+0

我們supossed要看到的Open GL但接近粗心的教授擔任總***,並說,他將與BORLAND C + +的工作,我會嘗試你說 – 2012-03-04 06:35:15

+0

你和上面的人是正確的非常感謝! – 2012-03-04 06:46:08