【发布时间】:2016-02-02 15:53:16
【问题描述】:
所以我试图在我的终端上显示一个游戏板,并让玩家输入他们的下一步行动(在我的情况下是 4-in-a-row)。每次玩家进行输入时,我都会重新绘制棋盘。
不幸的是,当每个角色单独插入这些墙壁和游戏部件时,您基本上可以看到我的慢速计算机如何一个一个地显示每个角色。
为了简化这里的事情,我假设我只想显示一个大的字符列表。我已经有大部分的逻辑和输入工作,所以我只是在寻找优化.
所以这是我的第一种方法。只需遍历循环并一一打印即可。
// Rows
for(int x = 0; x < 10; x++) {
// Columns
for(int y = 0; y < 10; y++) {
// Note: to keep evererything neatly in-line, I'll just use if-statements
if((y % 3) == 0) printf(" ");
if((y % 3) == 1) printf("X");
if((y % 3) == 2) printf("O");
}
printf("\n"); // Add line-break at the end
}
所以我的猜测是,每次我调用printf 时,计算机都会相应地分析和编辑字符串,然后再将其打印到我的屏幕上。这可能是它如此缓慢的原因。 (如果我错了,请纠正我)。
作为第二种方法,我尝试在打印之前将所有字母保存在 char 数组中。
char text[500]; // Note: In my program I don't know how long the text is.
int index = 0;
// Rows
for(int x = 0; x < 10; x++) {
// Columns
for(int y = 0; y < 10; y++) {
if((y % 3) == 0) text[index] = ' '; // Set text index accordingly
if((y % 3) == 1) text[index] = 'X';
if((y % 3) == 2) text[index] = 'O';
index++; // Increase index
}
text[index] = '\n'; // Add line-break
index++;
}
text[index] = '\0'; // End of string
printf(text);
虽然一开始有点不知所措,但这段代码对我来说非常有效,并且实际上可以更快地打印字符串很多很多。
问题在于 (1) 你很快就会忘记你的索引(所以调试真的很痛苦)并且 (2) 你必须活下去担心您的文本会超过 500 个字符(或者您只需要 100 个字符并浪费大量可用空间)。
我现在的问题是:有什么快速且更一致的方式在终端屏幕上显示信息吗? 除了每轮显示游戏板外,我还可以删除最后几个字符吗?直到我找到需要编辑的部分?我也可以在内容准备好之前冻结屏幕吗?
对于那些感兴趣的人,这里(几乎)是我的完整 C 代码:http://pastebin.com/Emffgsdd
【问题讨论】:
-
为此使用
curses库。 -
您考虑过使用ncurses 库吗?
-
@Linnus 好的,我会调查的!
-
@lurker 以前从未听说过。我试试看,谢谢!