Мне нужно сделать игру, используя ncurses на C. Игра должна быть 80 (символов) x24 (символов). Мне нужна строка состояния внизу (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();
}
Я сделал окно перед этим циклом: WINDOW * win = newwin (24, 80, 0, 0); getyx (stdscr, y, x); getbegyx (выигрыш, yBeg, xBeg);
Часами пытаюсь поправить соотношение сторон, правда уже не знаю, что делать
Соотношение 80 на 24 (соотношение сторон, которое вы хотите сохранить) - это 3.3333. Так что ширина всегда должна быть в 3.3333 раза больше высоты.
ОК! Но как я могу так сохранить? Должен ли я использовать окно с фиксированным размером вместо stdscr и всегда держать его централизованным?





Если ваша программа не считывает ввод, например, вызывает getch, ncurses продолжит использовать исходный размер экрана (и будет выглядеть сбитым с толку). Когда вы вызываете getch после того, как ncurses получает SIGWINCH, он возвращает KEY_RESIZE, и в этот момент ncurses обновляет размер своего экрана.
Какое соотношение 80 к 24? Вы должны убедиться, что размер рациона такой же.