c语言中怎样输入和读取方向键?

c语言中怎样输入和读取方向键?,第1张

在贪吃蛇中定义了扮山intokey( )函数[你也可以改成别的],整个函数体中的代码就是获取键盘的方向键值,倒数第2-5行是获取回车键值,按下回车键游戏就暂停。这里用direction表示方向,程序中UP、DOWN、LEFT、RIGHT分别固定代表1、2、3、4这四个值厅盯中。第三行判断获得了向上的键值,第四行在direction不等于DOWN值(就是2)时执行 else { direction = UP} 第(5、6);(7、8);(则岩9、10)等行的意思,与这第(3、4)行类似,只是取值不同。要包含文件 #include<conio.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} }

}

}

在你的基础上改的

#include<stdio.h>

#include<stdlib.h>

#define LISTSIZE 100

#define ADD 10

typedef struct {

int *elem

int length

int listsize

}List//定义线性表的结构体

void SqList(List &L)

{

//int i//C++中C程序的变量定义放在开始

L.elem=(int *)malloc(LISTSIZE*sizeof(int))

if(!L.elem) exit(0)

L.listsize=LISTSIZE

//printf("请输入线性表长度:")

//scanf("%d",&L.length)

//printf("为线性表赋值:")

//for(i=0i<=L.length-1i++)

//scanf("%5d",&L.elem[i])

L.length =0//如果是初始化,那么长度就是0

}//初始化线性表

int InsertSq(List &L,int i,int e)

{

int *p=NULL, *q=NULL//所有变量的定义都必须置前

if(i<0||i>L.length+1) return 0

if(L.length>=L.listsize)

{

int *newbase

newbase=(int *)realloc(L.elem,(L.listsize+ADD)*sizeof(int))

if(!newbase) exit(0)

L.elem=newbase

L.listsize+=ADD

}

q=&L.elem[i-1]

for(p=&L.elem[L.length-1]p>=q--p)

*(p+1)=*p

*q=e

L.length++

return 1

}//在线性表的第i个元素之前插入元素e

void PrintList(List L)

{

printf("顺序表中的元素:\n")

for(int k=0k<=L.length-1k++)

printf("%5d",L.elem[k])

printf("\n"颂桥)

}

void main()

{

//void SqList(List &L)

//int InsertSq(List &L,int i,int e)使用之前已经定义了,可以不用函数说明

List L

int i,e//函数调用前,变量必须定义

SqList(L)

printf("输入顺序表野中猛中元素的个培滚数:")

scanf("%d",&i)

printf("请输入元素:")

for(int j=1j<=ij++)

{

scanf("%d",&e)

InsertSq(L,j,e)

}

PrintList(L)

printf("输入插入的元素及其位置:")

scanf("%5d%5d",&e,&i)

InsertSq(L,i,e)

PrintList(L)

}

在用C语言写出的“贪吃蛇”小游戏中,可以自编以下这个intokey( )函数,用来获取方向键值以便控制蛇的拐弯。库函数kbhit( )是检测是否有按键被按下,Dir是代表方向的变量,整型变量flag用来获取键值厅喊,1、2、3、4分别表示方向的上下左右。要#include<conio.h>.

void intokey( )

int flag

if ( kbhit( ) )  //判断有键按下时才执行下面 *** 作

  { flag = getch( ) //用flag来获橡伏码取键值

    if (flag==224) flag = getch( )//值为224是方向键,要再次获取才行

if (flag==72 &&dir != 2)  dir = 1//方向键为“上”且原方向不为下时,让dir=1.

if (flag==80 &&dir != 1) dir = 2//方向键为“下”且原方向不为上时,让dir=2.

if (flag==75 &&dir != 4)  dir = 3//方梁哪向键为“左”且原方向不为右时,让dir=3.

if (flag==77 &&dir != 3)  dir = 4//方向键为“右”且原方向不为左时,让dir=4.

}

}

注:上下左右键按下后都会产生2个值,第一个是224,第二个才分别是72、80、75和

77.所以要用库函数getch( )两次获取键值。如果是ASDW来控制拐弯,flag可以定义为

字符型,获取一次键值即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12476762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存