#c #ncurses
#c #ncurses
Вопрос:
Я пытаюсь создать простую игру в тетрис в терминале. Мне нужно перемещать фигуры, когда игрок нажимает клавишу со стрелкой. Я слышал о методе getch(), но, похоже, он не работает с клавишами со стрелками (все они были обнаружены с помощью одного и того же кода ввода: 27). Что мне делать?
Вот мой текущий код:
initscr();
int inputCode;
do
{
inputCode = getch();
// here I would put my code to move the pieces if the code is right
} while (inputCode != 113); // q to exit
endwin();
С уважением,
Томас
Комментарии:
1. Вы всегда можете использовать wasd
2.
getch()
должен возвращатьKEY_UP
,KEY_DOWN
,KEY_LEFT
илиKEY_RIGHT
при нажатии. Попробуйте добавить вызовыraw(); keypad(stdscr, TRUE); noecho();
перед циклом.3. Эти статьи могут быть полезны. NCURSES- клавиши со стрелками не обнаружены? , 11. Взаимодействие с клавиатурой
Ответ №1:
Как указано на странице руководства:
Most programs would additionally use the sequence:
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
То есть ваша программа должна включить режим клавиатуры, чтобы получить KEY_UP
и т. Д:
Опция клавиатуры включает клавиатуру терминала пользователя. Если включено (значение bf равно TRUE), пользователь может нажать функциональную клавишу (например, клавишу со стрелкой), и wgetch(3x) возвращает единственное значение, представляющее функциональную клавишу, как в KEY_LEFT . Если отключено (bf равно FALSE), curses не обрабатывает функциональные клавиши специально, и программа должна сама интерпретировать escape-последовательности. Если клавиатура в терминале может быть включена (настроена на передачу) и выключена (настроена на локальную работу), включение этой опции приводит к включению клавиатуры терминала при вызове wgetch(3x). Значение по умолчанию для клавиатуры равно FALSE .