鱼C论坛

 找回密码
 立即注册
查看: 1251|回复: 2

Mr.屎壳螂写的贪食蛇snakemove()函数有疑问,急,拜托,谢谢

[复制链接]
发表于 2023-3-4 16:18:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,求助各位大佬,也求助@Mr.屎壳螂,拜托,谢谢啦。
下列snakemove()函数中,加深、斜体、下划线的while的条件部分,为什么不是
                         while(q->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
而是                 while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
求解惑,拜托了,谢谢。。。
void snakemove()//蛇前进,上U,下D,左L,右R
{
        cantcrosswall();
        snake *nexthead;
        nexthead=(snake*)malloc(sizeof(snake));
        if(status==U)
        {
                nexthead->x=head->x;
                nexthead->y=head->y-1;
                if(nexthead->x==food->x && nexthead->y==food->y)//如果下一个有食物//
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;
                        }
                        score=score+add;
                        createfood();
                }
                else                                               //如果没有食物//
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
                        Pos(q->next->x,q->next->y);
                        printf("  ");
                        free(q->next);
                        q->next=NULL;
                }
        }
        if(status==D)
        {
                nexthead->x=head->x;
                nexthead->y=head->y+1;
                if(nexthead->x==food->x && nexthead->y==food->y)  //有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;
                        }
                        score=score+add;
                        createfood();
                }
                else                               //没有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
                        Pos(q->next->x,q->next->y);
                        printf("  ");
                        free(q->next);
                        q->next=NULL;
                }
        }
        if(status==L)
        {
                nexthead->x=head->x-2;
                nexthead->y=head->y;
                if(nexthead->x==food->x && nexthead->y==food->y)//有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;
                        }
                        score=score+add;
                        createfood();
                }
                else                                //没有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
                        Pos(q->next->x,q->next->y);
                        printf("  ");
                        free(q->next);
                        q->next=NULL;
                }
        }
        if(status==R)
        {
                nexthead->x=head->x+2;
                nexthead->y=head->y;
                if(nexthead->x==food->x && nexthead->y==food->y)//有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;
                        }
                        score=score+add;
                        createfood();
                }
                else                                         //没有食物
                {
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
                        Pos(q->next->x,q->next->y);
                        printf("  ");
                        free(q->next);
                        q->next=NULL;
                }
        }
        if(biteself()==1)       //判断是否会咬到自己
        {
                endgamestatus=2;
                endgame();
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-7 19:58:20 From FishC Mobile | 显示全部楼层
自顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-8 08:18:28 | 显示全部楼层
本帖最后由 jhq999 于 2023-3-8 08:19 编辑

我以为
                        nexthead->next=head;
                        head=nexthead;
                        q=head;
                        while(q->next->next!=NULL)
                        {
                                Pos(q->x,q->y);
                                printf("■");
                                q=q->next;        
                        }
                        Pos(q->next->x,q->next->y);
                        printf("  ");
                        free(q->next);////////如果用q->next条件,这里就应该释放q。释放q以后
                        q->next=NULL;/////////它前面的节点的next怎么赋值为NULL?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表