貪吃蛇之按鍵

2021-09-24 03:28:49 字數 3553 閱讀 7279

貪吃蛇遊戲中我們需要通過按鍵來控制貪吃蛇的前進方向,在**中,我用到了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...