gpt4 book ai didi

c++ - 如何使用 ncurses 构建复杂的 "graphics"?

转载 作者:太空狗 更新时间:2023-10-29 21:03:59 26 4
gpt4 key购买 nike

我被告知要使用这样的代码:

    void printCharacter(int row, int col) {
move(row, col);
addch(' ');
addch(' ');
addch('0');
addch(' ');
addch(' ');
move(row + 1, col);
addch('<');
addch('-');
addch('|');
addch('-');
addch('>');
move(row + 2, col);
addch(' ');
addch('/');
addch(' ');
addch('\\'); // Escape required for using '\'
addch(' ');
}

在使用 ncurses 库编写游戏时构建火柴人形状的“图形”。我觉得这是非常重复的。有没有更好的正确方法来做到这一点?

我找到了 mvaddch(row, col, ' ') 但这似乎还是太冗长了。

(是的,这是一个家庭作业,但我不是要答案,只是一种很好地解决问题的方法。太多的 CS 类(class)只教如何,他们不教技巧。 )

最佳答案

将控制台想象成一个分辨率非常低的光栅显示器 - 当您这样做时,您可以看到 ncurses 如何用作一种原始图形 API,允许您设置每个像素值(其中一个像素是单个字符),以及基本形状,例如线条和方框。

通过重复调用 addch(连同 move),您可以在屏幕上绘制一个图形对象,就像您可以通过重复调用 来制作复杂场景一样Java 或 GDI 中的 Graphics 对象——只是做起来很慢 ;)

关于您给出的示例,唯一感觉“错误”的是艺术品被硬编码(从字面上看)到您的代码中。这意味着您的代码速度超快,但编辑起来却成了一场噩梦。

一个长期的解决方案是将您的作品移动到文件系统中的一个单独文件中,然后修改您的程序以将该文件读入缓冲区。要使用 ncurses 绘制艺术作品,您只需遍历缓冲区中的 (ascii) 字符并相应地执行操作,例如 (pusedocode):

void drawBuffer(int x, int y, char[] artBuffer) {
move( x, y );
foreach(char c in artBuffer) {
if( c == '\n' ) move( x, ++y );
else addch( c );
}
}

编辑:或者直接从代码中使用drawBuffer,像这样:

char* stickFigure = "   0\n<-|->\n / \\";
void drawStickFigure(int x, int y) {
drawBuffer( x, y, stickFigure );
}

他-达。

关于c++ - 如何使用 ncurses 构建复杂的 "graphics"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12549701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com