非基于打印数组的C语言版贪吃蛇
部分代码
坐标结构体
struct coordinate
{
int x;
int y;
};
贪吃蛇结构体
struct snake
{
coordinate poshe;
coordinate posta;
coordinate posbody[maxlen];
int direction;
int length;
} eatsnake;
移动一步
void moveOneSept()
{
oper_count++;
if(Is_eatfood()==0)
{
display(eatsnake.posbody[eatsnake.length-1],snackpump);
}
for(int i=eatsnake.length-1; i>0; i--)
{
eatsnake.posbody[i].x=eatsnake.posbody[i-1].x;
eatsnake.posbody[i].y=eatsnake.posbody[i-1].y;
}
if(eatsnake.direction==Up)
{
eatsnake.posbody[0].y--;
}
else if(eatsnake.direction==Down)
{
eatsnake.posbody[0].y++;
}
else if(eatsnake.direction==Left)
{
eatsnake.posbody[0].x-=2;
}
else if(eatsnake.direction==Right)
{
eatsnake.posbody[0].x+=2;
}
display(eatsnake.posbody[0],snackbody);
}
吃到食物
int Is_eatfood()
{
if( eatsnake.posbody[0].x==pnew.x&&eatsnake.posbody[0].y==pnew.y)
{
return 1;
}
else
{
return 0;
}
}
void eatfood()
{
if(Is_eatfood())
{
color();
coordinate adgr;
if(eatsnake.posbody[eatsnake.length-1].x-eatsnake.posbody[eatsnake.length-2].x>0)
{
adgr.x=eatsnake.posbody[eatsnake.length-1].x-2;
adgr.y=eatsnake.posbody[eatsnake.length-1].y;
}
else if(eatsnake.posbody[eatsnake.length-1].x-eatsnake.posbody[eatsnake.length-2].x<0)
{
adgr.x=eatsnake.posbody[eatsnake.length-1].x+2;
adgr.y=eatsnake.posbody[eatsnake.length-1].y;
}
else if(eatsnake.posbody[eatsnake.length-1].y-eatsnake.posbody[eatsnake.length-2].y>0)
{
adgr.x=eatsnake.posbody[eatsnake.length-1].x;
adgr.y=eatsnake.posbody[eatsnake.length-1].y-1;
}
else if(eatsnake.posbody[eatsnake.length-1].y-eatsnake.posbody[eatsnake.length-2].y<0)
{
adgr.x=eatsnake.posbody[eatsnake.length-1].x;
adgr.y=eatsnake.posbody[eatsnake.length-1].y+1;
}
display(adgr,snackbody);
eatsnake.length++;
eatsnake.posbody[eatsnake.length-1].x=adgr.x;
eatsnake.posbody[eatsnake.length-1].y=adgr.y;
crenewfood();
}
}
判断游戏结束
int GameOver()
{
int flag=0;
for(int i=1; i<eatsnake.length; i++)
{
if(eatsnake.posbody[i].x==eatsnake.posbody[0].x
&&eatsnake.posbody[i].y==eatsnake.posbody[0].y)
{
flag=1;
SetPos(5,5);
return 1;
}
}
if( eatsnake.posbody[0].x<0
||eatsnake.posbody[0].y<0
||eatsnake.posbody[0].x>len
||eatsnake.posbody[0].y>wid
)
{
SetPos(5,5);
return 2;
}
return 0;
}
食物
void ToMap()
{
for(int k=0; k<eatsnake.length; k++)
{
int p1=eatsnake.posbody[k].x,p2=eatsnake.posbody[k].y;
datamap[p1][p2]=1;
}
}
void crenewfood()
{
coordinate p[len*wid];
ToMap();
int count=0;
for(int i=0; i<len; i+=2)
{
for(int j=0; j<wid; j++)
{
if(datamap[i][j]==0)
{
p[count].x=i;
p[count].y=j;
count++;
}
}
}
if(count>0)
{
srand((unsigned)time(NULL));
int index=rand()%count;
display(p[index],newfood);
datamap[p[index].x][p[index].y]=2;
pnew.x=p[index].x;
pnew.y=p[index].y;
}
}