如何在C / C ++中暂停循环

时间:2012-03-04 06:04:25

标签: c++ c loops animation turbo-c

我正在尝试为汽车游戏制作一个屏幕并让屏幕等待一个键进入下一个屏幕,事情就是用这个代码它会更快地改变颜色。我已经尝试了delay()sleep()但效果不佳的问题。此外,在按下一个键后,它会关闭,而不是等我输入一个键。我只是希望标题在白色和红色之间闪烁,直到敲击一个键,然后在敲击一个键后知道它为什么会退出。

这是我的代码:

#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;
}

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

如果缓冲区中有某个字符,

kbhit()将返回true,但在返回之前不会删除该字符。到达getch()行后,您需要按下第一个键才能突破while循环。

可能的解决方案:虽然它有点hacky,但在while循环之后立即添加getch()可能会解决它。

我是否还建议使用ncurses而不是Borland库?