我正在做一個小專案來提高我的編碼技能,但我遇到了一個問題。我正在制作 Flappy Bird 的控制臺版本。所以我有一張地圖,它是一個二維字符陣列,這張地圖必須向左移動。我將陣列的所有元素向左移動一個位置,然后清除控制臺并顯示移動的地圖。這是問題,地圖必須不斷移動,但玩家必須在地圖移動時控制一只鳥。我想使用 _getch() 但它暫停了一個程式。一個問題是:我可以在不暫停程式的情況下讀取鍵盤輸入嗎?我的意思是地圖仍然會移動,并且當我在任何時候按下例如 Space 時,鳥的位置都會改變。我正在使用 Windows 10
uj5u.com熱心網友回復:
即使初學者希望它是一個簡單的操作,從鍵盤輸入單個字符也不是,因為在當前的作業系統中,鍵盤默認是面向行的。
而偷看鍵盤(不暫停程式)就更難了。在 Windows 控制臺應用程式中,您可以嘗試使用來自 user32 的函式,例如,GetAsyncKeyState如果您只需要讀取幾個可能的鍵:您將知道該鍵當前是否被按下以及自上次呼叫以來是否被按下GetAsyncKeyState。
但要注意:這些是相當高級的系統呼叫,如果您想提高編碼技能,我強烈建議您不要這樣做。恕我直言,你最好先學習如何撰寫 Windows GUI 應用程式,因為你會得到一個事件回圈,而事件的窺視更為常見,可以在現實世界的應用程式中使用。雖然我從未見過真實世界的控制臺應用程式試圖偷看鍵盤。買者自負...
uj5u.com熱心網友回復:
包括 conio.h 你可以使用這個方法:
#define ARROW_UP 72
#define ARROW_DOWN 80
#define ARROW_LEFT 75
#define ARROW_RIGHT 77
int main(){
int key;
while( true ){
if( _kbhit() ){ // If key is typed
key = _getch(); // Key variable get the ASCII code from _getch()
switch( key ){
case ARROW_UP:
//code her...
break;
case ARROW_DOWN:
//code her...
break;
case ARROW_LEFT:
//code her...
break;
case ARROW_RIGHT:
//code her...
break;
default:
//code her...
break;
}
}
}
return 0;
}
上面的代碼是一個例子,您可以對鍵盤的任何鍵執行此操作。在此站點中,您可以找到密鑰的 ASCII 代碼:
- http://www.jimprice.com/jim-asc.shtml#keycodes
- https://brebru.com/asciicodes.html
如果對你有幫助就說吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402100.html
上一篇:無法找到數字1-20的最小公倍數
