【问题标题】:Deleting previously printed character删除以前打印的字符
【发布时间】: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()?

标签: c++ ncurses


【解决方案1】:

如果我猜对了,您只想保留屏幕上用# 表示的当前位置,而不是轨迹。要实现这一点,请将mvaddch(y, x, ' ') 放在switch(dr) 上方

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

如果有用例,还要考虑mvdelch(y, x)

【讨论】:

  • 我已经在使用 curses (ncurses),并且没有换行或回车。如果我没记错的话,使用回车会将点返回到行首。这意味着它会毁了这一切,但如果是这样,请通知我。
  • 另外,我已经在按下按钮的那一刻打印出来了。
  • @alpkaan35 应该这样做。
  • 而不是mvdelchmvaddch(x, y, ' ') 效果更好,因为这样不会删除框架。
猜你喜欢
  • 2022-11-16
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多