链表优化贪吃蛇

用链表优化贪吃蛇

上次用数组写了基本贪吃蛇。数组贪吃蛇在一开始就划定了一部分内存来记录蛇身坐标,可以说是一种浪费。使用动态链表可以对此进行优化。

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++; 
}

蛇的运动简化成只将蛇尾地址赋予新的蛇头,这样就利用了内存,达到优化目的。

猜你喜欢

转载自blog.csdn.net/weixin_43145829/article/details/83047830
今日推荐