贪吃蛇项目总结

	这是一个很早之前做的项目,今天突然在文件夹中看到,突然有想去试一下这个小游戏,就给它运行了一遍,顺便回味了一下当初写这个项目的经历。
	当时的自己好像还比较喜欢玩游戏,想研究一下,看看自己适不适合做游戏开发,最后发现自己把游戏想的太简单了,自己的水平还是远远不够的,就只好先做一些最常见小游戏,贪吃蛇就是其中一个。这个游戏我是在linux平台下编写的,一来是因为linux采用gcc编译器,gdb调试工具,和多种可视化的编辑器,功能十分强大,二来,在linux下敲代码给自己一种高大上的感觉(哈哈哈哈哈哈哈哈)。在考虑这个项目的时候,如何让蛇以及食物在屏幕上显示出来成了困扰我的第一个难题,如果采用刷新整个界面的方法,那蛇每动一下,就要设置一遍整个屏幕,这样的操作既浪费时间,也增加了代码的负担。后来询问了好几个学长才了解到可以使用curse库,这里面的函数对我这种小游戏界面显示的帮助实在是太大了,再次感谢那位提出宝贵意见的学长。
	在我编写的游戏中的蛇是用一个双向链表来实现的。为什么要选择用双向链表呢?
	1.使用一个带头节点和尾节点的双向链表可以把蛇身体的每一个结点用一个链表节点来表示。
	2.在蛇向前移动的过程中,可以在蛇头部位添加一个节点,而把蛇尾的一个节点删去,这样的话就模拟出了蛇的前进。
	3.当蛇吃到食物时,只需要取消删除最后一个节点,这样蛇既向前移动了一个单位,而蛇身也增加了一个单位的长度。
	4.最后一个,使用双向链表而不用单链表是因为用双向链表可以更好的记录蛇尾的节点,在删除最后一个节点的时候操作也会变得方便很多。
	总的而言,双向链表这一数据结构对我的贪吃蛇游戏帮助也是很大的。当然,如果不选择用双向链表的话,队列等数据结构应该也是可以的。
	说到游戏的具体实现,很大一部分在上面选用双向链表的原因中已经有所涉及。那么怎么判断游戏失败及得分情况也是代码中比较重要的一部分。首先,关于吃到食物得分。在代码中,预先定义了那么两个结构体,一个是用来代表方向的(x和y两个方向),另一个是用来代表链表节点的,用来确定蛇的位置。当蛇头的下一个位置(当前位置加上运动方向)正好是食物的位置时,便吃到食物,进行加分;而当蛇头的下一个位置正好是四周墙壁的位置时,则碰撞身亡。还有另一种情况是蛇碰到了自己的身体,具体实现方法是这样的:之前每一个蛇的身体部位都会显示一个**‘*’**,用以直观的显示蛇的身体,当判断到蛇头的下一个位置处有**‘*’**时,即碰撞到自身,游戏失败,结束。
	以上就是我写的贪吃蛇游戏的具体经过以及内容,当然,其中还有很多可以完善的地方,我也可以考虑将这个项目结合单片机进行实现,可以采用12864显示屏,然后用按键或者红外遥控进行控制游戏操作,还能在游戏同时播放音效,功能很多,需要学习的也很多。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值