c语言双向链表贪吃蛇,贪吃蛇游戏 -双向链表

本文详细介绍了如何使用C语言构建贪吃蛇游戏,包括使用双向链表结构存储蛇身,展示了添加、删除蛇身以及销毁蛇身的函数。通过实例演示了如何在游戏循环中动态增长和收缩蛇身,适合初学者了解链表在游戏开发中的应用。
摘要由CSDN通过智能技术生成

//C语言-贪吃蛇游戏 -双向链表

#include

#include

#include

#define WIDTH15//游戏窗口的宽度

#define HEIGHT15//游戏窗口的高度

//蛇身结构体

typedef struct snakeBody

{

int x;//X坐标

int y;//Y坐标

struct snakeBody *prev;//指向上一个节点

struct snakeBody *next;//指向下一个节点

}BODY, *PBODY;

PBODY pHead = NULL;//蛇头

PBODY pTail = NULL;//蛇尾

//增长蛇的身体,返回1表示成功,返回0表示失败

int AddBody(int x, int y)

{

PBODY p = (PBODY)malloc(sizeof(BODY));

if(NULL == p)

{

printf("申请内存空间失败!\n");

return 0;

}

p->x = x;

p->y = y;

p->next = pHead;

p->prev = NULL;

if(!pHead)//之前没有蛇头

{

//添加的是第一个节点

pHead = pTail = p;//把新创建的节点作为蛇头和蛇尾

}

else//之前已经有蛇头

{

pHead -> prev = p; //让之前的蛇头的上一节点为当前创建的新蛇身

pHead = p;//让当前创建的蛇身成为新的蛇头

}

return 1;

}

//删除蛇的身体(删除蛇尾)

void DelBody()

{

if(!pTail)

{

printf("当前没有蛇身可删除!\n");

return;

}

PBODY p = pTail;

pTail = pTail->prev;//让倒数第二个蛇身成为新的蛇尾

pTail->next = NULL;//切断和之前蛇尾的链接

free(p); //释放之前尾节点的内存

}

//销毁蛇身

void DestroySnake()

{

PBODY p;

int count = 0;

while(pHead)

{

p = pHead;//保存头节点的地址

pHead = pHead->next;//让头节点指针指向下一个节点

free(p);//释放之前的头节点内存

++count;

}

printf("共删除节点数:%d\n", count);

}

int main()

{

int i, j;

for(i = 0; i < HEIGHT; ++i)

{

for(j = 0; j < WIDTH; ++j)

{

//如果是第一行或最后一行或第一列或最后一列,打印边框

if(i == 0 || i == HEIGHT - 1 || j == 0 || j == WIDTH - 1)

printf("※");

else

printf("  ");//其他情况,打印两个空格

}

printf("\n");//打印完一行之后进行换行

}

//添加10个蛇身

for(i = 0; i < 10; ++i)

AddBody(i, i);

//删除3个蛇身

for(i = 0; i < 3; ++i)

DelBody();

//销毁整条蛇

DestroySnake();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值