我有一个算法,其中有一个3 X 3框:
typedef struct _WIN_struct {
int startx, starty;
int height, width;
WIN_BORDER border;
}WIN;
p_win->border.ls = '|';
p_win->border.rs = '|';
p_win->border.ts = '-';
p_win->border.bs = '-';
p_win->border.tl = '+';
p_win->border.tr = '+';
p_win->border.bl = '+';
p_win->border.br = '+';
所以看起来像这样:
+-+
| |
+-+
当按下一个键时,该框将向其移动的方向移动,然后我想使用一个简单的
mvaddch(y,x+1,'*');
在其后画一条线(在本示例中,该框向左移动,从而使该*
位于该框的右侧盒子)但是,当我改变方向时,线无法连接。发生这种情况可能是因为该框是3 X 3而不是1 X 1(我之前将它与1 X 1框一起使用,但是我试图将框更改为3 X 3并弄乱了)。
这是我改变方向4次并尝试创建一个正方形时的样子:
您会看到这些行没有累加(我无法截屏,因为我在没有管理员权限的情况下使用LTSP :()
这是有关其制作方法的特写:
****
....
..*.
..*.
这是从上升开始,然后我向左走。这些点仅用于格式化。
这是完整的程序:http://pastebin.com/EGabVfwY
最佳答案
由于您要沿错误的方向(但始终如一)添加与y,x的偏移量,因此线路无法连接。例如,当向上移动时,程序将执行以下操作:
mvaddch(y+1,x,'*');
y--;
但是,向上移动*),
y
坐标将减小。如果您将该对语句更改为y--;
mvaddch(y,x,'*');
它会做您打算的。另外,由于4种情况(上下左右)均以相同的
mvaddch
结尾,因此您可以将该语句移到switch语句之后,并稍微简化程序。您还可以通过使用线条画字符使程序更有趣。首先,添加
#include <locale.h>
在顶部,然后致电
setlocale(LC_ALL, "");
就在
initscr()
之前。然后,您可以使用以下内容替换ASCII线条画代码:p_win->border.ls = ACS_VLINE;
p_win->border.rs = ACS_VLINE;
p_win->border.ts = ACS_HLINE;
p_win->border.bs = ACS_HLINE;
p_win->border.tl = ACS_ULCORNER;
p_win->border.tr = ACS_URCORNER;
p_win->border.bl = ACS_LLCORNER;
p_win->border.br = ACS_LRCORNER;
如果与ncursesw库链接,则该库应该能够在UTF-8语言环境中显示漂亮的行。