2012-07-13 13 views
5

Eventuali duplicati:
Non-blocking getch(), ncursesnon bloccante getch()

Im cercando di fare gioco Tetris in consolle standard. Ho bisogno di getch non bloccante(), quindi i blocchi possono cadere senza premere alcun tasto. Sarebbe bello avere una funzione che restituisce -1 se non si preme alcun tasto, altrimenti il ​​codice chiave.

Sarei lieto se qualcuno mi può dare un suggerimento o alcuni collegamenti.

+0

È necessario disporre di un ciclo infinito e gestire gli eventi _keypress_ all'interno di esso. – SingerOfTheFall

+0

@RobKennedy - dupe presuppone l'utilizzo di ncurses –

+0

@kittyPL, quale sistema operativo e compilatore stai utilizzando? Come puoi dedurre dal voto duplicato, 'getch()' è una funzione non standard. Le funzioni con questo nome sono fornite nell'API di MS Windows e in una libreria Unix chiamata "curses". Oltre alla condivisione casuale di un nome, tali funzioni sono del tutto estranee. –

risposta

7

E 'specifico sistema operativo, ma la vostra biblioteca ha probabilmente una funzione chiamata kbhit() o simile che farà questo

11

Questo è esattamente quello che volevi:

int getch_noblock() { 
    if (_kbhit()) 
     return _getch(); 
    else 
     return -1; 
} 

Fondamentalmente kbhit() fa il lavoro di determinare se viene premuto un tasto.

Presuppone Windows e Microsoft Visual C++.

+0

Solo per menzionare che è necessario #include per utilizzare _kbhit() – lowtech