ncurses getch () пропускает каждый второй символ

Я пишу игру Tetris с ncurses, получая ввод с клавиатуры с помощью getch (). Для законченной игры nodelay () будет активен, но для целей тестирования я закомментировал его. По какой-то причине функция ввода, вызываемая моим игровым циклом, игнорирует каждого второго персонажа. Например, ввод ‘q’ закрывает мою программу. Если я введу последовательность aqaqaqaqaq … программа никогда не закроется, потому что q не регистрируются. Ниже приведена функция, которая является моим кодом ncurses для init, а ниже — моя функция ввода.

Изменить: В случае, если это имеет значение, я тестирую код в Ubuntu, работающий в virtualbox на Windows.

****INIT FUNCTION****
void init_ui()
{
initscr();
cbreak();
raw();
keypad(stdscr, TRUE);
noecho();
//nodelay(stdscr, TRUE);

start_color();
init_pair(9, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_WHITE);
init_pair(3, COLOR_BLACK, COLOR_CYAN);
init_pair(4, COLOR_BLACK, COLOR_YELLOW);
init_pair(5, COLOR_BLACK, COLOR_MAGENTA);
init_pair(6, COLOR_BLACK, COLOR_BLUE);
init_pair(7, COLOR_BLACK, COLOR_GREEN);
init_pair(8, COLOR_BLACK, COLOR_BLACK);
attron(COLOR_PAIR(6));
for(int i=0; i<HEIGHT; i++)
{
mvprintw(i, 0, "#%*c", WIDTH*2+1, '#');
}
for(int i=0; i<=WIDTH; i++)
{
mvprintw(HEIGHT, i*2, "##");
}
attroff(COLOR_PAIR(6));
}

****INPUT FUNCTION****
int get_input()
{
int ch = getch();
int result;
switch(ch)
{
case KEY_LEFT:
result = LEFT;
break;
case KEY_RIGHT:
result = RIGHT;
break;
case KEY_DOWN:
result = DOWN;
break;
case 'q':
result = 'q';
break;
default:
result = DOWN;
break;
}
return result;
}

3

Решение

Оказывается, я оставил беспризорную функцию getch () в другой части моей программы и забыл ее удалить. Просто глупая ошибка с моей стороны.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]