C++ “如何建造综合大楼”;“图形”;使用网络课程?

C++ “如何建造综合大楼”;“图形”;使用网络课程?,c++,ncurses,C++,Ncurses,我被告知要使用这样的代码: void printCharacter(int row, int col) { move(row, col); addch(' '); addch(' '); addch('0'); addch(' '); addch(' '); move(row + 1, col); addch('<'); addch('-'

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

    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(' ');
    }
void打印字符(int行,int列){
移动(行、列);
addch(“”);
addch(“”);
addch('0');
addch(“”);
addch(“”);
移动(行+1,列);
addch(“”);
移动(行+2,列);
addch(“”);
addch('/');
addch(“”);
addch('\');//使用'\'需要转义
addch(“”);
}
在使用ncurses库编程游戏时,创建棍人形状的“图形”。我觉得这是非常重复的。有没有更好的正确方法

我发现了
mvaddch(row,col,”)
,但这看起来还是太冗长了


(是的,这是一个家庭作业,但我不是在问答案,只是一个很好地解决问题的方法。太多的CS课程只教如何,他们不教手艺。)

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

通过重复调用
addch
(以及
move
),您可以将图形对象绘制到屏幕上,就像在Java或GDI中重复调用
Graphics
对象一样,您可以创建复杂的场景—只需非常缓慢地执行;)

你给出的例子唯一让人感觉“不对”的地方是,你的作品是硬编码的(相当直白地)到你的代码中的。这意味着您的代码速度非常快,但编辑起来却成了一场噩梦

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

编辑:或者直接从代码中使用
drawBuffer
,如下所示:

char* stickFigure = "   0\n<-|->\n / \\";
void drawStickFigure(int x, int y) {
    drawBuffer( x, y, stickFigure );
}
char*stickFigure=“0\n\n/\\”;
无效drawStickFigure(整数x,整数y){
drawBuffer(x,y,stickFigure);
}
塔达

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