qiuxiangkai 发表于 2009-10-12 14:52:21

贪吃蛇的队列只能插入一个结点,请教各位大虾和傻孩子

自己写了个贪吃蛇的小程序,在初始化生成蛇身的时候现发现队列只能插入一个结点,找来找去找不到原因,现将程序贴上,麻烦大家赐教

#define len sizeof(linkquen)

typedef unsigned char byte;

//声明状态类型
typedef enum{ok,error} statu;

//蛇的一个节点,存储坐标等信息
typedef struct queue
{
        byte datax;
        byte datay;
        struct queue *next;
}linkquen;

typedef struct
{
        linkquen *head;
        linkquen *rear;
}pointer;

pointer Q;        //Q应为全局变量


//开辟头结点为空,初始化蛇身
statu init_queue(void)
{
        Q.head = Q.rear = (linkquen *)malloc(len);       
        if(Q.head == NULL)
        {
                return error;
        }
        Q.rear->next = NULL;
        return ok;
}

//移动一步,蛇头即队尾插入一个新的点
statu rear_insert(byte x,byte y)
{
        struct queue *p;
        p = (linkquen* )malloc(len);
        if(p == NULL)
        {
                return error;
        }
        p->datax = x;
        p->datay = y;
        p->next = NULL;
        Q.rear->next = p;
        Q.rear = p;
        return ok;
}

初始化的时候先init_queue( );
然后rear_insert(5,4)//随便插入第一个坐标
这样可以,但再插入一个结点的时候就不行了,发现再插入一个结点的时候对原队列没有影响,也就是说只能插入一个结点
比较郁闷,找了半天没找着错误。

Gorgon_Meducer 发表于 2009-10-12 22:20:35

队列问题,一定要自己调试,建议你用VC写一个程序,然后用单步调试看看?

qiuxiangkai 发表于 2009-10-16 14:43:26

谢谢傻孩子的回复。我一直以为是程序错了,一直找错误,后来经别人指点才发现时堆的大小没设好,动态分配内存的时候不够,现在解决了。vc我没用过,编程比较差,开始自学数据结构,又看到你那13864的古董贴,那几句贪吃蛇的解释,于是决定自己编一个练练手,差不多调好了。呵呵,你解释的很经典哦。
页: [1]
查看完整版本: 贪吃蛇的队列只能插入一个结点,请教各位大虾和傻孩子