用链表优化贪吃蛇
上次用数组写了基本贪吃蛇。数组贪吃蛇在一开始就划定了一部分内存来记录蛇身坐标,可以说是一种浪费。使用动态链表可以对此进行优化。
struct snake //结构体
{
int s_y;
int s_x;
struct snake * next;
};
struct snake *head,*p1,*p2;
以链表中s_x,s_y来记录,头指针之类的此处不必多说。
给出主要修改部分:
if(bgd[b][a]==1) //判断是否撞墙以及咬到自己
break;
else if(bgd[b][a]==3)
break;
else if(bgd[b][a]==0) //蛇的运动
{
bgd[head->s_y][head->s_x]=0;
if(num==0)
{
head->s_y=b;
head->s_x=a;
}
else //将蛇的末尾部分给头部,达到移动效果
{
p1=head;
p1->s_y=b;
p1->s_x=a;
head=head->next;
p1->next=NULL;
bgd[p2->s_y][p2->s_x]=3;
p2->next=p1;
p2=p1;
}
bgd[b][a]=2;
}
else if(bgd[b][a]==4) //吃到食物,扩展链表
{
p1=(struct snake*)malloc(SN);
p1->s_y=b;
p1->s_x=a;
p2->next=p1;
bgd[p2->s_y][p2->s_x]=3;
p2=p1;
bgd[b][a]=2;
food();
num++;
}
蛇的运动简化成只将蛇尾地址赋予新的蛇头,这样就利用了内存,达到优化目的。