В настоящее время я слушаю ввод с клавиатуры через цикл getch (), и все работает отлично. Однако, если я держусь влево и нажимаю вверх, то левое движение останавливается, пока я не нажму его снова. Единственный способ решить эту проблему — знать, удерживается ли ключ / когда он отпущен. Я использую ncurses, который предположительно обладает этой способностью, но во всех своих поисках я не нашел ничего полезного.
Фрагмент кода тетриса в вопросе:
int ch = getch();
while(ch != 'x') {
// Handle arrow keys first
if (ch == '\033') {
getch(); // Get rid of slash
switch (getch()) {
case 'A': rotate(); redraw(); break; // Up
case 'B': move(DOWN); redraw(); break; // Down
case 'C': move(RIGHT); redraw(); break; // Right
case 'D': move(LEFT); redraw(); break; // Left
}
} else {
switch(ch) {
// Stuff not relevant to this question
}
}
ch = getch();
}
Эта проблема сложнее, чем вы думаете. Это называется ореолом клавиатуры. Чтобы убедиться, что несколько клавиш работают при одновременном нажатии, вам может потребоваться специальная клавиатура, которая обеспечивает функцию защиты от двоения, или вам может потребоваться переназначить клавиатуру в соответствии с этой статьей. Прочитайте это здесь для более подробной информации.
Решение должно работать под Linux?