Question

I'm currently listening to keyboard inputs through a getch() while loop and everything is working great. However, if I'm holding left and press up, then the left movement is stopped until I press it again. The only way I can think of solving this requires knowing if a key is being held / when it is released. I'm using ncurses which supposedly has this ability, but through all my searches I haven't found anything useful.

Tetris Code Snippet in Question:

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();
}

Pas de solution correcte

Autres conseils

This problem is more complicated than you think. It's called keyboard ghosting. To make sure multiple keys work when pressed simultaneously,you may need to have a specialized keyboard that provides anti-ghosting feature, or you may have to remap the Keyboard as per this article. Read it here for more detailed information.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top