Ncurses - пустое окно, которое ожидает нажатия кнопки, прежде чем инициализировать мое окно - PullRequest
0 голосов
/ 23 октября 2018

В настоящее время я использую ncurses при попытке создать игру.Я пытаюсь заставить пользователя нажать клавишу ВВОД на клавиатуре, чтобы начать, но, похоже, возникают некоторые проблемы.Когда я создаю случай переключения для вариантов, он не покажет мое окно заставки, пока я не нажму кнопку.Без реализации какого-либо пользовательского ввода, он показывает заставку в момент запуска программы.

Я включил свою основную функцию и функцию выбора.Такие функции, как totalInformation и gameTitle, являются просто графикой и не важны.

Моя основная функция:

int main(void)
{
initscr();
WINDOW * opening_screen;
keypad(stdscr, TRUE);
noecho();
cbreak();
raw();
start_color();

int height, width, start_y, start_x;
width = 80;
height = 40;
start_y = 0;
start_x = 0;
init_pair(1, COLOR_CYAN, COLOR_CYAN);

opening_screen = newwin(width, height, start_y, start_x);
refresh();

keypad(opening_screen, true);
choices(opening_screen);
wrefresh(opening_screen);

totalInformation();
wrefresh(opening_screen);

border('|', '|', '-', '-', '+', '+', '+', '+');
wrefresh(opening_screen);

attron(COLOR_PAIR(1));
gameTitle();
wrefresh(opening_screen);
attroff(COLOR_PAIR(1));

attron(A_BLINK);
mvaddstr(37, 24, "Press the ENTER key to continue");
attroff(A_BLINK);
wrefresh(opening_screen);

getch();
endwin();
}

Моя функция выбора:

void choices(WINDOW * screen)
{
int c = wgetch(screen);
switch(c)
{
    case 10:
        mvaddstr(3,3,"YOUVE PRESSED ENTER");
        break;
    default:
        break;
}
}

Прямо сейчас, когда этоработает, черный экран запускает программу.После того, как я нажму ENTER, появится мой полный экран, а также «YOUVE PRESSED ENTER».

1 Ответ

0 голосов
/ 23 октября 2018

Когда запускается curses, экран изначально пустой, но программа должна обновить (перекрасить) экран, чтобы добраться до этой точки.Вызов wgetch перерисовывает (и очищает на терминале) opening_screen, а затем вызов mvaddstr обновляет главное окно stdscr.Наконец, вызов getch обновляет (т. Е. перерисовывает ) главное окно stdscr и скрывает другие окна.

...