【问题标题】:C - Ways to display information on terminal quickerC - 在终端上更快地显示信息的方法
【发布时间】: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 以前从未听说过。我试试看,谢谢!

标签: c terminal console printf


【解决方案1】:

是的,不是每次都重新绘制所有内容,您只能绘制更改(例如游戏中的新游戏元素)。挑战在于跟踪屏幕状态。

NCURSES 是一个可以解决大部分此类问题的知名终端库。 Eric Raymond 有一个很好的online book

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2015-09-21
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多