2010-01-16 133 views
3

我正在为终端打造一个简单的pong副本,并且需要延迟“框架”打印的方式。linux终端动画 - 延迟打印'框架'的最佳方式(在C中)

我有一个二维数组

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(); 

sleep执行的屏幕的功能printScreen()

在终端上做这种类型的动画的任何提示将不胜感激。也许我这样做完全错了。如何处理ASCII电影like this

编辑我正在与ncurses。谢谢你的建议。

在Ubuntu sudo aptitude install libncurses5-dev上编译并使用-lncurses编译。

回答

3

ascii电影是用aalib完成的,它像一个图形显示驱动程序一样工作。大多数开发完整控制台应用程序和游戏的人使用curses框架或其类似ncurses的版本。走这条路线的一个真正的限制是你必须要完整的ptty(你不能参与它)。

2

如果我的理解正确,则需要在从printScreen()返回之前添加fflush(stdout);。但是有更好(更简单)的文字动画和终端控制方法。例如,看看ncurses

3

标准输出缓冲。它不会实际上将输出发送到终端设备,直到它被告知要打印换行符或被明确刷新。

为了刷新输出,只需添加:

fflush(stdout); 

而且,因为所有你正在做的是打印单个字符,printf的方式是矫枉过正。您可以用以下代码替换您的printf:

putchar(screen[i][j]); 
+0

Doh! putchar更简单。谢谢。 – Tyler 2010-01-16 07:13:19