我需要在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();
}
发布于 2018-06-03 09:07:21
除非您的程序读取输入,例如调用getch
,ncurses将继续使用原始屏幕大小(看起来很困惑)。当您在ncurses收到SIGWINCH
之后调用getch
时,它会返回KEY_RESIZE
,此时ncurses会更新其屏幕大小。
https://stackoverflow.com/questions/50661248
复制相似问题