返回了错误collect2.exe: error: ld returned 1 exit status请大神帮看看有什么错误……
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void duan_body (char plays[][20],int body_direction[],int *error) //短身体函数,用来缩短蛇身
{
short int end=0;
while(body_direction[end]!=-1) //确定方向数组里的结尾
end=end+1;
plays[body_direction[end-2]][body_direction[end-1]]=32; //缩短身体
body_direction[end-3]=body_direction[end-3]-1; //缩短最后的长度
switch(end-4)
{
case 0:
body_direction[end-1]=body_direction[end-1]-1; //这里是对结尾的重新定义,方向是0上1右2下3左
break;
case 1:
body_direction[end-2]=body_direction[end-2]-1;
break; //由于是从蛇头算的方向,所以这里反过来
case 2:
body_direction[end-1]=body_direction[end-1]+1;
break;
case 3:
body_direction[end-2]=body_direction[end-2]+1;
break;
default:
*error=1;
break;
}
if (body_direction[end-3]==1)
{
body_direction[end-4]=body_direction[end-2];
body_direction[end-3]=body_direction[end-1]; //如果最后的长度为一,删除最后的方向数据
body_direction[end-1]=body_direction[end]=0;
body_direction[end-2]=-1;
}
}
void wave_body (char plays[][20],int body_direction[],char *direction,int *over,int *error,int *food) //移动身体函数,用于移动身体
{
short int x,y;
x=body_direction[0];
y=body_direction[1];
plays[x][y]='★';
switch((int)direction)
{
case 119:
if(plays[x][y+1]=='■'||plays[x][y+1]=='★')
over=1;
else if(plays[x][y+1]==32||plays[x][y+1]=='⊙')
{
plays[x][y+1]='☆';
body_direction[3]=body_direction[3]+1;
body_direction[1]=body_direction[1]+1;
if(plays[x][y+1]==32)
duan_body(plays,body_direction,&error);
else
food=1;
}
break;
case 97:
if(plays[x-1][y]=='■'||plays[x-1][y]=='★')
over=1;
else if(plays[x-1][y]==32||plays[x-1][y]=='⊙')
{
plays[x-1][y]='☆';
body_direction[3]=body_direction[3]+1;
body_direction[0]=body_direction[0]-1;
if(plays[x-1][y]==32)
duan_body(plays,body_direction,&error);
else
food=1;
}
break;
case 115:
if(plays[x][y-1]=='■'||plays[x][y-1]=='★')
over=1;
else if(plays[x][y-1]==32||plays[x][y-1]=='⊙')
{
plays[x][y-1]='☆';
body_direction[3]=body_direction[3]+1;
body_direction[1]=body_direction[1]-1;
if(plays[x][y-1]==32)
duan_body(plays,body_direction,&error);
else
food=1;
}
break;
case 100:
if(plays[x+1][y]=='■'||plays[x+1][y]=='★')
over=1;
else if(plays[x+1][y]==32||plays[x+1][y]=='⊙')
{
plays[x+1][y]='☆';
body_direction[3]=body_direction[3]+1;
body_direction[0]=body_direction[0]+1;
if(plays[x+1][y]==32)
duan_body(plays,body_direction,&error);
else
food=1;
}
break;
default:
error=1;
break;
}
}
int main()
{
char welcome[20][20]={
"■■■■■■■■■■■■■■■■■■■■",
"■ ■",
"■ 贪吃蛇 ■",
"■ ■",
"■ ■",
"■ 1:开始 ■",
"■ ■",
"■ 0:退出 ■",
"■ ■",
"■ 使用wasd控制 ■",
"■ ■", //对于开始界面的定义
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■■■■■■■■■■■■■■■■■■■■",
};
char playsTemplate[20][20]={
"■■■■■■■■■■■■■■■■■■■■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ☆★★ ■",
"■ ■", //对于游戏模板的定义
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■ ■",
"■■■■■■■■■■■■■■■■■■■■",
};
char plays[20][20]={0};
short int body_direction[40]={8,10,1,3,10,10,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char begin,direction,replay; //各种定义,上面那个长的是对蛇身全部的描述
short int error,over,x,y,food; //描述格式是前两个是蛇头的坐标,然后是方向1,长度1,方向2……-1是结束符,它前两个是蛇尾的坐标
food=error=over=0; //PS:坐标以plays[0][0]为(1,1)
for(x=0;x<20;x++)
printf("%s\n",welcome[x]);
srand((unsigned)time(NULL));
begin=getch();
if(begin=='1')
{
do{
system("cls");
for(x=0;x<20;x++)
{
for(y=0;y<20;y++)
plays[x][y]=playsTemplate[x][y];
}
for(x=0;x<20;x++)
printf("%s\n",plays[x]);
direction=getch();
direction='a';
y=0;
while(over!=0)
{
if(kbhit())
direction=getch();
wave_body(plays,body_direction,&direction,&over,&error,&food);
if(error==1)
break;
Sleep(500);
system("cls");
for(x=0;x<20;x++)
printf("%s\n",plays[x]);
if(food==1)
{
plays[rand()%18+2][rand()%18+2]='⊙';
food=0;
}
}
system("cls");
if(over==1)
printf("\n\n\n\n\n\n\n\n\n 不好意思,您输了,摁0退出,摁1重新开始");
else
printf("\n\n\n\n\n\n\n\n\n 出现错误!摁0退出,摁1重新开始");
replay=getch();
}while(replay==1);
}
system("cls");
preintf("再见\n");
system("pause");
return 0;
}
|