贪吃蛇的队列只能插入一个结点,请教各位大虾和傻孩子
自己写了个贪吃蛇的小程序,在初始化生成蛇身的时候现发现队列只能插入一个结点,找来找去找不到原因,现将程序贴上,麻烦大家赐教#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)//随便插入第一个坐标
这样可以,但再插入一个结点的时候就不行了,发现再插入一个结点的时候对原队列没有影响,也就是说只能插入一个结点
比较郁闷,找了半天没找着错误。 队列问题,一定要自己调试,建议你用VC写一个程序,然后用单步调试看看? 谢谢傻孩子的回复。我一直以为是程序错了,一直找错误,后来经别人指点才发现时堆的大小没设好,动态分配内存的时候不够,现在解决了。vc我没用过,编程比较差,开始自学数据结构,又看到你那13864的古董贴,那几句贪吃蛇的解释,于是决定自己编一个练练手,差不多调好了。呵呵,你解释的很经典哦。
页:
[1]