在用C語(yǔ)言寫出的“貪吃蛇”小游戲中,可以自編以下這個(gè)intokey( )函數(shù),用來(lái)獲取方向鍵值以便控制蛇的拐彎。庫(kù)函數(shù)kbhit( )是檢測(cè)是否有按鍵被按下,Dir是代表方向的變量,整型變量flag用來(lái)獲取鍵值,1、2、3、4分別表示方向的上下左右。要#includeconio.h .
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、前郭網(wǎng)絡(luò)推廣、微信小程序定制開發(fā)、前郭網(wǎng)絡(luò)營(yíng)銷、前郭企業(yè)策劃、前郭品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供前郭建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
void intokey( )
{? int flag;
if ( kbhit( ) ) ?//判斷有鍵按下時(shí)才執(zhí)行下面操作
{ flag = getch( ); ?//用flag來(lái)獲取鍵值
if (flag==224) flag = getch( ); //值為224是方向鍵,要再次獲取才行
if (flag==72 dir != 2)? dir = 1; //方向鍵為“上”且原方向不為下時(shí),讓dir=1.
if (flag==80 dir != 1) dir = 2; //方向鍵為“下”且原方向不為上時(shí),讓dir=2.
if (flag==75 dir != 4)? dir = 3; //方向鍵為“左”且原方向不為右時(shí),讓dir=3.
if (flag==77 dir != 3)? dir = 4; //方向鍵為“右”且原方向不為左時(shí),讓dir=4.
}
}
注:上下左右鍵按下后都會(huì)產(chǎn)生2個(gè)值,第一個(gè)是224,第二個(gè)才分別是72、80、75和
77.所以要用庫(kù)函數(shù)getch( )兩次獲取鍵值。如果是ASDW來(lái)控制拐彎,flag可以定義為
字符型,獲取一次鍵值即可。
希望這個(gè)能對(duì)你有幫助:#include
#include
int
main(void){
int
c
;
while(1){
c
=
getch();
if(c==0)
c=getch();
//
getch在遇到方向鍵時(shí)會(huì)返回0
再使用getch便會(huì)返回掃描碼
if(
c
==
72
)
printf("UP\n");
//
我?guī)湍惆焉舷伦笥覕?shù)據(jù)調(diào)出來(lái)
你用的時(shí)候define成
UP來(lái)使用這個(gè)值就可以了
if
(
c
==
80)
printf("DOWN\n");
if
(
c
==
75)
printf("LEFT\n");
if
(
c
==
77)
printf("RIGHT\n");
if(c
==
113)
//按q退出
break;
}
return
0;
}
用bioskey()函數(shù)可以實(shí)現(xiàn)讀取鍵盤的上下左右鍵
函數(shù)原型:int bioskey (int cmd)
說(shuō) ? ? ? 明:bioskey()的函數(shù)原型在bios.h中,即必須包含頭文件#includebios.h
讀取方向鍵可以用下面的程序啊!?
#includestdio.h
#includebios.h
#define?Key_Up?0x4800????//?向上方向鍵?
#define?Key_Down?0x5000??//?向下方向鍵
#define?Key_Right?0x4d00??//?向右方向鍵
#define?Key_Left?0x4b00???//?向左方向鍵
void?main()
{
int?key=bioskey(0);?
switch(key)?
{
case?Key_Up?:?{printf("?向上方向鍵被按下");?break;}
case?Key_Down?:?{printf("?向下方向鍵被按下");?break;}
case?Key_Left?:?{printf("?向左方向鍵被按下");?break;}
case?Key_Right?:?{printf("?向右方向鍵被按下");?break;}?
}
}
在C代碼中可設(shè)置如下自編的intokey(? )函數(shù),用以接收方向鍵值。庫(kù)函數(shù)kbhit( )是檢測(cè)是否有按鍵被按下,庫(kù)函數(shù)getch(? )是讀取鍵盤按鍵值的,不需按回車,也不回顯。dir是代表方向的變量,根據(jù)不同的方向鍵值,讓dir取1到4這四個(gè)不同的值。其它的程序段就可根據(jù)dir的值讓東西朝某個(gè)方向移動(dòng)。方向鍵按下后會(huì)產(chǎn)生2個(gè)值,第一個(gè)是224,另一個(gè)分別為上下左右的72、80、75、77,因此要讀取2次值來(lái)判斷。要包含#includeconio.h .
void intokey(? )
{ int? flag;
if ( kbhit(? ) ) ? //判斷有鍵按下時(shí)才執(zhí)行下面的操作
{ flag = getch(? ); ? //用flag來(lái)獲取鍵值
if (flag==224) flag = getch(? );? //值為224時(shí)表示按下了方向鍵,要再次獲取才行
if (flag==72 dir != 2)? dir = 1; //方向鍵為“上”且原方向不為下時(shí),讓dir=1.
if (flag==80 dir != 1) dir = 2; //方向鍵為“下”且原方向不為上時(shí),讓dir=2.
if (flag==75 dir != 4)? dir = 3; //方向鍵為“左”且原方向不為右時(shí),讓dir=3.
if (flag==77 dir != 3)? dir = 4; //方向鍵為“右”且原方向不為左時(shí),讓dir=4.
}
}
注:這個(gè)函數(shù)來(lái)源于某些“貪吃蛇”的代碼,略有修改,足可獲取方向鍵值。其中的1、2、
3、4分別對(duì)應(yīng)著上下左右。
在貪吃蛇中定義了intokey( )函數(shù)[你也可以改成別的],整個(gè)函數(shù)體中的代碼就是獲取鍵盤的方向鍵值,倒數(shù)第2-5行是獲取回車鍵值,按下回車鍵游戲就暫停。這里用direction表示方向,程序中UP、DOWN、LEFT、RIGHT分別固定代表1、2、3、4這四個(gè)值。第三行判斷獲得了向上的鍵值,第四行在direction不等于DOWN值(就是2)時(shí)執(zhí)行 else { direction = UP; } 第(5、6);(7、8);(9、10)等行的意思,與這第(3、4)行類似,只是取值不同。要包含文件 #includeconio.h 。
void intokey()
{
if (GetAsyncKeyState(VK_UP) 0x8000)
{ if (direction == DOWN) { } else {direction = UP; } }
if (GetAsyncKeyState(VK_DOWN) 0x8000)
{ if (direction == UP) { } else {direction = DOWN; } }
if (GetAsyncKeyState(VK_RIGHT) 0x8000)
{ if (direction == LEFT) { } else {direction = RIGHT; } }
if (GetAsyncKeyState(VK_LEFT) 0x8000)
{ if (direction == RIGHT) { } else {direction = LEFT; } }
if (GetAsyncKeyState(VK_RETURN) 0x0D)
{ while (1)
{ if (GetAsyncKeyState(VK_RETURN) 0x0D) { break; } }
}
}