请用c语言实现贪吃蛇移动的函数,考虑移动时分别当吃到果子和没有吃的果子的场景同时还要判断在移动一步之后是否会造成碰到蛇自己本身《不考虑碰壁》,即当 蛇的头部碰到蛇身体任何部分即表示失败。 int SnakeMove(Food S *pFood 8LIST S *pHeadSnake, SLIST S *pTailSnake); 函数说明: 参微pFood;作为入参表示下一个移动的位置,当成员IsHsveFood为FLASE时表示仅仅只是移动位置,当IsHeveFood为IRUE时,表示吃到了果子; 参数pHeadSnake、pTailSnake: 分别表示贪吃蛇的头屋节点即是入参也是出参; 返回值:表示食吃蛇移动函数的结果是成功还是失败,0表示成功, -1表示失败; typedef struct SLIST{ int x; int y; struct SLIST *prev; struct SLIST *next; }SLIST-S; typedef struct Food{ int x; int y; bool IsHaveFood; }Food-s;
时间: 2024-02-21 13:59:54 浏览: 46
下面是一个简单的贪吃蛇移动函数的实现,仅供参考:
```
int SnakeMove(Food* pFood, SLIST** pHeadSnake, SLIST** pTailSnake) {
// 获取当前蛇头的位置
int headX = (*pHeadSnake)->x;
int headY = (*pHeadSnake)->y;
// 计算下一个位置
int nextX = pFood->x;
int nextY = pFood->y;
// 判断是否吃到了果子
if (pFood->IsHaveFood) {
// 添加新的节点作为蛇头
SLIST* newHead = (SLIST*)malloc(sizeof(SLIST));
newHead->x = nextX;
newHead->y = nextY;
newHead->prev = NULL;
newHead->next = *pHeadSnake;
(*pHeadSnake)->prev = newHead;
*pHeadSnake = newHead;
// 修改食物状态
pFood->IsHaveFood = false;
} else {
// 移动蛇尾到下一个位置
SLIST* tail = *pTailSnake;
(*pTailSnake) = tail->prev;
(*pTailSnake)->next = NULL;
tail->x = nextX;
tail->y = nextY;
tail->prev = NULL;
tail->next = *pHeadSnake;
(*pHeadSnake)->prev = tail;
*pHeadSnake = tail;
}
// 判断是否碰到蛇身
SLIST* node = (*pHeadSnake)->next;
while (node) {
if (node->x == headX && node->y == headY) {
return -1;
}
node = node->next;
}
return 0;
}
```
此函数会根据传入的食物位置和状态来判断下一个位置,如果吃到了果子,则会添加一个新的节点作为蛇头;否则会将蛇尾移动到下一个位置。然后判断是否碰到蛇身,如果碰到则返回失败。函数的返回值表示移动结果,0 表示成功,-1 表示失败。
阅读全文