我想编写一个程序,让您在屏幕上移动角色,基本上,我会在此基础上进行改进,以期开发出一种游戏。我在删除以前打印的字符时遇到了一个问题,否则会留下痕迹。
我尝试制作一个变量(实际上是2个)来跟踪打印的字符,并在打印一个新字符时将其删除(改为放置空格),这使我无法工作。
#include <ncurses.h>
using namespace std;
int x=10,y=10;
void pro(char dr)
{
switch (dr)
{
case 'u':
move(--y, x);
break;
case 'd':
move(++y, x);
break;
case 'r':
move(y, ++x);
break;
case 'l':
move(y, --x);
break;
}
addch('#');
}
int main()
{
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
int in;
border(0, 0, 0, 0, 0, 0, 0, 0);
while (true)
{
in = getch();
switch (in)
{
case KEY_UP:
pro('u');
break;
case KEY_DOWN:
pro('d');
break;
case KEY_RIGHT:
pro('r');
break;
case KEY_LEFT:
pro('l');
break;
}
}
endwin();
}
当前此代码留下了痕迹,我希望它删除前一个代码。
答案 0 :(得分:0)
如果我说对了,您只想在屏幕上保留用#
表示的当前位置,而不要保留路径。为了实现这一目标,将mvaddch(y, x, ' ')
置于switch(dr)
上方
void pro(char dr) {
mvaddch(y, x, ' ');
switch (dr) {
...
}
addch('#');
}
如果有用例,请考虑使用mvdelch(y, x)
。