我需要使用C中的ncurses进行游戏。
游戏必须为80(char)x24(char)。
我在底部需要一个状态栏(5个字符),所以我对其进行了硬编码。

我进行了此循环以使内容保持集中,但是我无法弄清楚在调整终端屏幕大小时如何保持宽高比。

有什么办法可以使用ncurses做到这一点?

我需要屏幕始终保持至少80x24,也许始终使用全屏模式,我真的不需要调整屏幕大小。

这是将事物保持在原处的循环(状态栏的硬编码不良,长宽比很乱)

/* LOOP TO CENTRALIZE FOR ANY RESIZING */
  while (1){
    getmaxyx(stdscr, yMax, xMax);
    clear();
    mvprintw(yMax/24, xMax/80, "BEG");
    mvprintw(yMax/2, xMax/2, "CENTER %d %d", yMax, xMax);

    attron(COLOR_PAIR(1)); /* bottom status bar (5 lines) */
    int i, j;
    for ( j=(yMax-5) ; j <= yMax ; j++){

      for ( i=0 ; i <= xMax ; i++ ){
        mvprintw(j, i, " ");
      }

    }
    attroff(COLOR_PAIR(1));
    refresh();
  }

最佳答案

除非您的程序读取输入内容(例如调用getch),否则ncurses将继续使用原始屏幕尺寸(并且看起来很困惑)。当ncurses收到getch后调用SIGWINCH时,它将返回KEY_RESIZE,此时n​​curses会更新其屏幕尺寸。

关于c - 将长宽比保持为C(ncurses),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50661248/

10-11 22:09