保持纵横比为C(ncurses)

时间:2018-06-02 21:17:29

标签: c ncurses

我需要在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();
  }

1 个答案:

答案 0 :(得分:0)

除非您的程序读取输入,例如调用getch,否则ncurses将继续使用原始屏幕大小(并且看起来很困惑)。在ncurses收到getch后致电SIGWINCH时,它会返回KEY_RESIZE,然后ncurses更新其屏幕大小。