如何在没有屏幕闪烁的情况下进行while循环

How to make a while loop without the screen flickering

我正在尝试制作 PacMan 游戏的变体,但我 运行 遇到了一些问题,其中之一是不知道如何打印整个地图和吃豆人移动时屏幕不闪烁。 这是我为打印所做的:

while(commmand) {
    system("CLS");
    display();
    if(kbhit()) {
        command = getch();
        move(command);
    }

    move(command);
    printf("SCORE: %d",score);
}

命令、显示和移动是我的功能,它们可以正常工作。有没有其他不闪屏的方法?

是的,有。你想看看 double-buffering (或多缓冲)。一般的想法是,你有两个(或更多缓冲区),而一个缓冲区,比如缓冲区 A,显示在屏幕上,你正在执行所有计算(即物理、运动、四个幽灵的 AI)并绘制到第二个缓冲区,比如缓冲区 B。当所有计算完成后,我们交换 A 和 B,以便显示缓冲区 B,然后使用缓冲区 A 进行计算。

OpenGL 原生支持双缓冲,请参阅 this tutorial。我从未使用过 DirectX,所以我不能谈论它,但如果它没有办法进行双缓冲,我会感到惊讶。