首页 文章

ANSI C:以恒定FPS显示终端中的动画帧

提问于
浏览
-1

我正在努力掌握如何解决如何在C终端中进行简单ASCII动画的问题 .

作为我的课堂作业,我需要在C中制作简单的康威游戏 . 游戏“棋盘”将存储在一维数组中 . 行数和列数取自用户输入 . 我没有问题在滚动终端显示它,但我希望它是适当的动画,没有终端滚动和显示垃圾(不是项目中的实际代码,只是试图解释)

void draw(int *board, rows, columns){
     for(int j =0; j < rows; j++){
          for(int i = 0; i < columns;i++){
               printf((*board+i));
          } printf("/n");
     }

/*****************************************************************      
Here I would like to have code that clears terminal screen , returns 
carriage to the begging so on the next call of function 
draw(int*board...) terminal windows is clear and next frame will be 
drawn without being garbage, as if it would be the first printf 
being called in this program, after waiting 33 miliseconds  ( sleep() ?)
******************************************************************/


runGame(); /* actual game code does game of life stuff in the array*/
}

经过多次尝试,我找不到任何有用的东西或任何实际可行的东西 . 我宁愿不使用ncurses,因为这个项目需要尽可能精益和核心 .

我不要求你为我写代码! (太好了:P)我只是想听听你的想法以及我应该使用什么功能来清除终端窗口等 .

非常感谢 :)

1 回答

  • 0

    找到一个聪明的黑客! :D Kinda愚蠢地回答我自己的问题,但有人可能从中受益 .

    printf("%c[2J%c[;H",(char) 27, (char) 27);
    

    该行清除光标前后的任何内容,并将其放回[0,0]位置!

    ASCII有一些奇特的转义码,可以真正创造奇迹 . 当我找到可靠的方法来控制刷新率时,我会更新这个答案 . http://www.termsys.demon.co.uk/vtansi.htm

    编辑:usleep(33000)完成这项工作 . Usleep()需要微秒,乘以1000即可得到毫秒 .

相关问题