该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
源码太长,只贴出问题的这部分吧,我调试过了,问题确实是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; }}