2012-07-13 13 views
5

Powiel możliwe:
Non-blocking getch(), ncursesdla blokowanie getch()

Im próbuje zrobić gry Tetris w standardowej konsoli. Potrzebuję nie blokującego getch(), więc bloki mogą spaść bez naciskania żadnego klawisza. Byłoby miło mieć funkcję, która zwraca -1, jeśli nie zostanie naciśnięty żaden klawisz, inaczej kod klucza.

Byłbym zadowolony, gdyby ktoś mógł dać mi podpowiedź lub linki.

+0

Musisz mieć nieskończoną pętlę i obsługiwać zdarzenia _keypress_ wewnątrz niej. – SingerOfTheFall

+0

@RobKennedy - dupe zakłada używanie ncurses –

+0

@kittyPL, z jakiego systemu operacyjnego i kompilatora korzystasz? Jak można wywnioskować z duplikatu głosowania, 'getch()' jest niestandardową funkcją. Funkcje o tej nazwie są dostępne w MS Windows API oraz w bibliotece Unix o nazwie "curses". Poza przypadkowym udostępnieniem nazwy funkcje te są całkowicie niezwiązane. –

Odpowiedz

7

Jest to system operacyjny specyficzny ale biblioteka prawdopodobnie posiada funkcję o nazwie kbhit() lub podobne, że zrobi to

11

To jest dokładnie to, czego chciał:

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

Zasadniczo kbhit() spełnia swoje zadanie wyznaczania jeśli zostanie naciśnięty klawisz.

Założono Windows i Microsoft Visual C++.

+0

Wystarczy wspomnieć, że do użycia funkcji _kbhit() konieczne jest #include lowtech