2012-03-04 62 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