貪吃蛇遊戲中我們需要通過按鍵來控制貪吃蛇的前進方向,在**中,我用到了kbhit() 函式來實現這一功能。kbhit() 函式是乙個用於非阻塞的響應鍵盤輸入事件的c語言函式,下面我們就來簡單介紹一下這個函式的功能和用法。
直接來乙個**吧~
函式名kbhit()
函式原型
int kbhit(void);
標頭檔案conio.h
函式功能
檢查當前是否有鍵盤輸入(僅此而已)
返回值若有鍵盤輸入返回乙個非0值,否則返回0
非阻塞函式是一種無論是否執行相關操作都會返回的函式,與之對立的是阻塞函式,如 scanf()、getch() 等,如果不操作,函式就會一直等著,不返回。
貪吃蛇實現方向控制的**框架如下
if
(kbhit()
)//有按鍵按下
判斷 str 的值,進而確定方向
上面的方法先要判斷是否有按鍵按下,進而需要接收鍵入的字元,最後再進行方向的判斷。這實在是一種麻煩的方法。
那麼有木有乙個在確定有鍵按下的同時也能確定是哪乙個按鍵被按下的函式呢?答案是yes!
即下面介紹的 getasynckeystate() 函式
函式名getasynckeystate()
函式原型
short getasynckeystate(int vkey);
標頭檔案windows.h
函式功能
確定使用者當前是否按下了鍵盤上的某乙個鍵
返回值表示兩個內容,乙個是最高位bit的值,代表這個鍵(自上次引用此函式以來)是否被按下,按下為1,抬起為0;乙個是最低位bit的值
getasynckeystate() 函式預 kbhit() 函式一樣是個非阻塞函式。
控制方向的**可以改寫為
if
(getasynckeystate
(vk_left)&
0x8000
)//左 ←if(
getasynckeystate
(vk_right)&
0x8000
)//右 →if(
getasynckeystate
(vk_up)&
0x8000
)//上 ↑if(
getasynckeystate
(vk_down)&
0x8000
)//下 ↓
此時不是用awds
來控制方向了,當然如果想用的話只需要改一下getasynckeystate
()函式裡的引數值
說一下為什麼getasynckeystate要 『與』上 0x8000這個常數
答案:獲取按鍵狀態,遮蔽掉其他的可能狀態
不『與』的話,對於虛鍵而言這樣寫邏輯是不對的,雖然結果一樣。。。。。。
getasynckeystate() 函式是在按下的同時被引用的,怎麼理解呢?下面的**會很好的幫助你理解
#include
#include
#include
#include
#include
#include
int main()
return0;
}
結果:如果你按著 『↓』 不放,則會一直輸出 『a』
附常用鍵位:
vk_lbutton
滑鼠左鍵
0x01
vk_rbutton
滑鼠右鍵
0x02
vk_cancel
ctrl + break
0x03
vk_mbutton
滑鼠中鍵
0x04
vk_back
backspace 鍵
0x08
vk_tab
tab 鍵
0x09
vk_return
回車鍵0x0d
vk_shift
shift 鍵
0x10
vk_control
ctrl 鍵
0x11
vk_menu
alt 鍵
0x12
vk_pause
pause 鍵
0x13
vk_capital
caps lock 鍵
0x14
vk_escape
esc 鍵
0x1b
vk_space
空格鍵0x20
vk_prior
page up 鍵
0x21
vk_next
page down 鍵 0x22
vk_end
end 鍵
0x23
vk_home
home 鍵
0x24
vk_left
左箭頭鍵
0x25
vk_up
上箭頭鍵
0x26
vk_right
右箭頭鍵
0x27
vk_down
下箭頭鍵 0x28
vk_snapshot
print screen 鍵
0x2c
vk_insert
insert 鍵
0x2d
vk_delete
delete 鍵
0x2e
『0』 – 『9』
數字 0 - 9
0x30 - 0x39
『a』 – 『z』
字母 a - z
0x41 - 0x5a
vk_lwin
左winkey(104鍵盤才有)
0x5b
vk_rwin
右winkey(104鍵盤才有)
0x5c
0x5d
vk_numpad0
小鍵盤 0 鍵
0x60
vk_numpad1
小鍵盤 1 鍵
0x61
vk_numpad2
小鍵盤 2 鍵
0x62
vk_numpad3
小鍵盤 3 鍵
0x63
vk_numpad4
小鍵盤 4 鍵
0x64
vk_numpad5
小鍵盤 5 鍵
0x65
vk_numpad6
小鍵盤 6 鍵
0x66
vk_numpad7
小鍵盤 7 鍵
0x67
vk_numpad8
小鍵盤 8 鍵
0x68
vk_numpad9
小鍵盤 9 鍵
0x69
vk_f1 - vk_f24
功能鍵f1 – f24
0x70 - 0x87
vk_numlock
num lock 鍵
0x90
vk_scroll
scroll lock 鍵
0x91
貪吃蛇遊戲
貪吃蛇遊戲 結構化程式設計 c語言程式設計 重要的的是結構化的程式設計思想 include include include include include include define field width 300 就做20個格仔的 define field height 300 define f...
貪吃蛇(改進)
該程式分成3個檔案 第乙個檔案 fang.cs using system using system.collections.generic using system.text using system.windows.forms using system.drawing namespace snak...
貪吃蛇遊戲
include include include include include 使用當前時間做種子 enum dir 列舉型別enum dir 圍牆 class fencef 定義物件 畫框框 void fence initfence 顯示框框 void fence outputf int snak...