在 C 中保持纵横比(ncurses)
Keeping aspect ratio in 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();
}
除非您的程序读取输入,例如调用 getch
,否则 ncurses 将继续使用原始屏幕大小(并且看起来很混乱)。当您在 ncurses 收到 SIGWINCH
后调用 getch
时,它会 returns KEY_RESIZE
,此时 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();
}
除非您的程序读取输入,例如调用 getch
,否则 ncurses 将继续使用原始屏幕大小(并且看起来很混乱)。当您在 ncurses 收到 SIGWINCH
后调用 getch
时,它会 returns KEY_RESIZE
,此时 ncurses 会更新其屏幕大小。