Linux终端动画 - 延迟打印“帧”的最佳方法(使用C语言)

3

我正在为终端制作一个简单的乒乓球克隆版,并需要一种延迟打印“帧”的方法。

我有一个二维数组

screen[ROWS][COLUMNS]

以及一个打印屏幕的函数

void printScreen() {
    int i = 0;
    int j;

    while(i < ROWS) {
        j = 0;

        while(j < COLUMNS) {
            printf("%c", screen[i][j]);
            j++;
        }
        i++;
    }
}

看起来当我执行以下操作时

printScreen();
usleep(1000000);
printScreen();

printScreen() 的执行期间,它将使程序进入休眠状态。

如果您有关于在终端上进行此类型动画的任何提示,我们将不胜感激。也许我完全错了。如何使用 ASCII 电影来完成类似这样的效果?

编辑 我将使用 ncurses。感谢您们两位的建议。

在 Ubuntu 上,使用 sudo aptitude install libncurses5-dev 命令安装并编译时需要使用 -lncurses 参数。

3个回答

3

stdout是有缓冲的。在打印换行符或显式刷新之前,它不会将输出发送到终端设备。

要刷新输出,只需添加:

fflush(stdout);

此外,由于你只需要打印一个单个字符,printf 太过复杂。你可以将 printf 替换为:
putchar(screen[i][j]);

糟糕!putchar 简单多了。谢谢。 - Tyler

3
Ascii电影是使用aalib完成的,它类似于图形显示驱动程序。大多数开发完整控制台应用程序和游戏的人使用curses框架或其版本,如ncurses,进行开发。这种方法的一个真正限制是你必须想要完整的终端窗口(你不能只取其中一部分)。

2
如果我理解正确,你需要在从printScreen()返回之前添加fflush(stdout);。但是,有更好(更容易)的方法来进行文本动画和终端控制。例如,可以看看ncurses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接