c语言游戏方向,求大神,写游戏的时候,要用到方向控制,switch语句不起作用...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

源码太长,只贴出问题的这部分吧,我调试过了,问题确实是switch语句不起作用,按完方向键屏幕就不懂了。

#define LEFT 75

#define RIGHT 77

#define DOWN 80

#define UP 72

#define ESC 27

int key;

宏定义部分,其中方向键的键值我是测试出来的,应该不会错,也试过24475,24477,0x4b00等键值,一样没作用。

main函数用if(kbhit())

{key=getch();}

把输入的值赋给了全局变量key,供switch语句用作判断,

以下是switch语句部分:

void snakexy()

/*从第二节开始,自动计算蛇各节坐标(根据第一节变化)*/

{

int i,j;

snake.x[1]=headx;

snake.y[1]=heady;

switch(key)

{

case RIGHT:

snake.x[1]=snake.x[1]++;

for(i=j=2;i<=snake.node;i++,j++)/*向右时为蛇赋予坐标*/

{

snake.x[i]=snake.x[i-1]-1;

snake.y[j]=snake.y[1];

}

for(i=j=1;i<=snake.node;i++,j++)

if(snake.x[i]<=59&&snake.x[i]>=0)

{

gotoxy(snake.x[i]+3*i,snake.y[j]);

/*乘3,留下足够的空间输出字符,一个字符占两个坐标位置*/

printf("●");

}

Sleep(100);

break;

以下大概都差不多,我就不缩进了。

case LEFT:

snake.x[1]=snake.x[1]--;

for(i=j=2;i<=snake.node;i++,j++)

/*向左时为蛇赋予坐标*/

{

snake.x[i]=snake.x[i-1]+1;

snake.y[j]=snake.y[1];

}

for(i=j=1;i<=snake.node;i++,j++)

if(snake.x[i]<=59&&snake.x[i]>=0)

{

gotoxy(snake.x[i]+3*i,snake.y[j]);

/*乘3,留下足够的空间输出字符,一个字符占两个坐标位置*/

printf("●");

}

Sleep(100);

break;

case UP:snake.y[1]=snake.y[1]--;for(i=j=2;i<=snake.node;i++,j++)/*向上时为蛇赋予坐标*/{snake.x[i]=snake.x[1]; snake.y[j]=snake.y[i-1]+1; }for(i=j=1;i<=snake.node;i++,j++)if(snake.x[i]<=59&&snake.x[i]>=0){gotoxy(snake.x[i],snake.y[j]);/*乘3,留下足够的空间输出字符,一个字符占两个坐标位置*/ printf("●"); }Sleep(100);break;

case DOWN:snake.y[1]=snake.y[1]++;for(i=j=2;i<=snake.node;i++,j++)/*向下时为蛇赋予坐标*/{snake.x[i]=snake.x[1]; snake.y[j]=snake.y[i-1]-1; }for(i=j=1;i<=snake.node;i++,j++)if(snake.x[i]<=59&&snake.x[i]>=0){gotoxy(snake.x[i],snake.y[j]);/*乘3,留下足够的空间输出字符,一个字符占两个坐标位置*/ printf("●"); }Sleep(100);break; }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值