【发布时间】:2019-09-08 12:12:32
【问题描述】:
我想写一个程序,让你在屏幕上移动一个角色,基本上,我会对此进行改进,希望能制作出一种游戏。一个问题是我无法删除之前打印的字符,否则只会留下痕迹。
我尝试创建一个变量(实际上是 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();
}
此代码目前留下了痕迹,我希望它删除之前的代码。
【问题讨论】:
-
pro代表主角,如果有人想知道的话。 -
嗯。我的 ncurses 程序使用“wrefresh”将更改(到窗口)“推送”到显示器。我在这里看不到任何内容,但是,我从未尝试过没有 wrefreshes 的 ncurses ...“必须调用 refresh 和 wrefresh 例程(或 wnoutrefresh 和 doupdate)才能将实际输出到终端,因为其他例程仅操作数据结构。例程 wrefresh 将命名窗口复制到物理终端屏幕,同时考虑到已经有哪些内容可以进行优化。"
-
我也看到了,但是没有它们对我来说也可以,不知道怎么做。
-
我无法在 Linux 上编译它...您是否尝试在 pro() 的末尾添加一个 refresh()?