Ncurses 窗口伪影

如何解决Ncurses 窗口伪影

我最近问了一个关于我在下面的代码中遇到的几个问题(现已解决)的问题。程序本身很简单,有一个角色会根据用户在游戏循环中使用 wgetch() 函数捕获的输入在框出的窗口中移动。
继续编码虽然我发现了一个新问题:
我创建的窗口(我称之为 stage)必须和屏幕一样大(stdscr),否则角色的移动会留下“轨迹”,重新创建这里提到的问题 {{3} }. 因此,如果我执行 createstage() 函数将窗口设置为小于屏幕(这是它应该工作的方式),则会出现这些图形工件。
有没有一种方法可以解决这个问题,而不必自己绘制/实现框/窗口或仅使用 stdscr

#include "curses.h"
#include <windows.h>

void disableselection(){
  HANDLE hInput;
  DWORD prev_mode;
  hInput = GetStdHandle(STD_INPUT_HANDLE);
  GetConsoleMode(hInput,&prev_mode);
  SetConsoleMode(hInput,prev_mode & ENABLE_EXTENDED_FLAGS);
}

void disableresizing(){
  HWND consoleWindow = GetConsoleWindow();
  SetwindowLong(consoleWindow,GWL_STYLE,getwindowlong(consoleWindow,GWL_STYLE) &   ~WS_MAXIMIZEBox & ~WS_SIZEBox);
 }

 void initialize(){
  initscr();
  curs_set(0);
  disableselection();
  disableresizing();
  noecho();
 }

 WINDOW* createstage(int starty=0,int startx=0,int height=LInes,int width=COLS){
  WINDOW* win=newwin(height-starty,width-startx,starty,startx);
  nodelay(win,TRUE);
  refresh();
  return win;
}

void end(WINDOW* stage){
  clear();
  refresh();
  nodelay(stdscr,FALSE);
  printw("press something to exit");
  getch();
  endwin();
}

int main(){
  initialize();
  WINDOW* stage= createstage();
  int ywindow,xwindow,heightwindow,widthwindow;
  getbegyx(stage,ywindow,xwindow);
  getmaxyx(stage,widthwindow);
  heightwindow--;
  widthwindow--;
  int x = xwindow+1,y = ywindow+1;
  char c = '@';
  while(TRUE){
      Box(stage,0);
      wmove(stage,y,x);
      waddch(stage,'@');
      c=wgetch(stage);
      if(c=='w' && y-1>ywindow){
        y--;
      }
      if (c=='s' && y+1<heightwindow){
        y++;
      }
      if(c=='d' && x+1<widthwindow){
        x++;
      }
      if(c=='a' && x-1>xwindow){
        x--;
      }
      wrefresh(stage);
      napms(16);
      wclear(stage);

  }
  end(stage);
}

在 Windows 上使用 C++ 和 PDCurses3.8

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?