10.内存释放和游戏状态的判断

HJ Lv2

10.内存释放和游戏状态的判断

内存释放

因为豌豆是链表,所以我们需要及时释放内存,避免过高内存占用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void deletePeaAfterNode(peas* head) {//删除已经消失的豌豆节点
// 检查链表是否至少有两个节点
if (head == NULL || head->next == NULL) return;
peas* current = head->next; // 从第二个节点开始
peas* prev = head; // 头节点作为起始的前一个节点

while (current != NULL) {
if (current->status == 0) {
// 删除
prev->next = current->next;
free(current);
current = prev->next; // 继续向后遍历
}
else {
prev = current;
current = current->next;
}
}
}//删除豌豆节点释放内存

这段代码删除除头节点外状态为0的豌豆。如果当前节点豌豆状态为0 ,则连接前后两个节点。以此类推删除所有状态为0的节点。

  • 首先检查链表是否至少有两个节点:如果链表为空 (head == NULL) 或者只有一个节点 (head->next == NULL),函数什么也不做,直接返回。这是因为函数设计为从第二个节点开始检查,如果链表不满足这个最基本的条件,就没有必要进行下一步操作。
  • 初始化遍历指针:current 指针设置为从链表的第二个节点开始 (head->next),而 prev 指针保持在 current 的前一个节点,即链表的头节点 (head)。
  • 遍历链表;如果当前节点 (current) 的 status 等于 0,表示这个节点代表的豌豆“已经消失”,需要被删除。
  • 删除:连接前后两个节点,这样就从链表中移除了current 指向的节点。
  • 释放内存:使用 free(current) 释放被删除节点的内。
  • 如果当前节点不需要删除:如果 current 节点的 status 不等于 0,即这个节点不需要被删除,prev 指针移动到 current,current 指针移动到 current->next,以继续向链表后方遍历。

游戏状态的判断

1
2
3
4
5
int checkGameStatus() {//1,赢,2,输
if (zombielist->gx==0)return 1;//僵尸移动到左边即赢得游戏
if (credit < 0 || zombielist->hp <= 0 || stime<0)return 2;//积分,血量,时间任一没有即失败
return 0;
}

如果这个函数返回1表示游戏胜利,返回2表示游戏失败。

此页目录
10.内存释放和游戏状态的判断