删除以前打印的字符

时间:2019-09-08 12:12:32

标签: c++ ncurses

我想编写一个程序,让您在屏幕上移动角色,基本上,我会在此基础上进行改进,以期开发出一种游戏。我在删除以前打印的字符时遇到了一个问题,否则会留下痕迹。

我尝试制作一个变量(实际上是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();
}

当前此代码留下了痕迹,我希望它删除前一个代码。

1 个答案:

答案 0 :(得分:0)

如果我说对了,您只想在屏幕上保留用#表示的当前位置,而不要保留路径。为了实现这一目标,将mvaddch(y, x, ' ')置于switch(dr)上方

void pro(char dr) {
  mvaddch(y, x, ' ');
  switch (dr) {
    ...
  }
  addch('#');
}

如果有用例,请考虑使用mvdelch(y, x)