void Snake_Grow(body Head, int* len, body* rear, int* button) { (*len)++; body q = (body)malloc(sizeof(BODY)); //将蛇增加的结点插入蛇头后面 q->next = Head->next; if (q->next != NULL) { q->next->prex = q; } Head->next = q; q->prex = Head; //插入新的结点坐标 q->x = Head->x; q->y = Head->y; Show_Snake(Head); switch (*button) { case 72: Head->y = Head->y - 20; break; case 80: Head->y = Head->y + 20; break; case 75: Head->x = Head->x - 20; break; case 77: Head->x = Head->x + 20; break; default: break; } if ((*rear) == NULL) //达到尾指针的值 *rear = q; } void Snake_move(int* button, int* len, body Head, body* rear, food Food) { //把原来的蛇隐藏 Hide_Snake(Head); //移动蛇身 body p = (*rear); while (p && p != Head) { p->x = p->prex->x; p->y = p->prex->y; p = p->prex; } //移动蛇头 switch (*button) { case 72: Head->y = Head->y - 20; break; case 80: Head->y = Head->y + 20; break; case 75: Head->x = Head->x - 20; break; case 77: Head->x = Head->x + 20; default: break; } if (Head->x + 10 >= Food->x && Head->x + 10 < Food->x + 20 && Head->y + 10 >= Food->y && Head->y + 10 < Food->y + 20) { //隐藏食物 Hide_Food(Food); //更新食物位置 Rnew_Food(Head, Food); //蛇变长 Snake_Grow(Head, len, rear, button);}为什么蛇的第二个结点图形没有显示
时间: 2024-03-24 15:38:08 浏览: 60
Queue_hustC++实验_
根据提供的代码,蛇的第二个结点图形没有显示的原因可能是因为在Snake_move函数中,移动蛇身时没有将第二个结点的图形更新。
在while循环中,p指向的是蛇尾,而不是蛇头。因此,在移动蛇身时,需要将p指向的结点的图形更新为它前一个结点的图形。
可以在while循环中加入以下代码:
```
while (p && p != Head) {
p->x = p->prex->x;
p->y = p->prex->y;
Show_Body(p); // 显示每一个结点的图形
p = p->prex;
}
```
在每次移动一个结点的坐标之后,调用Show_Body函数显示这个结点的图形。
这样就可以保证每个蛇结点的图形都能够被正确地显示出来了。
阅读全文