吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计

设计思路

这一讲,鹰哥会向大家介绍贪吃蛇的设计思路,设计方法以及程序的编写,向大家详细介绍贪吃蛇的设计思路,让大家对如此神秘的贪吃蛇有深入的认识! 
这是鹰哥大学的时候做的贪吃蛇游戏(图片1)
贪吃蛇介绍: 鹰哥首先来给大家介绍一下贪吃蛇,贪吃蛇是世界知名的益智类小游戏,鹰哥选择这个项目的原因是为了将我们自己的所学知识加以运用;另一方面,虽然我们很小就接触这个游戏,那时候用设计玩,觉得很有意思,但是它的制作方法对我们而言还是很神秘的。鹰哥希望通过自己的所学知识把它剖析开来,通过自己的动手实践,真正的了解它的本质和精髓。
 
这是鹰哥大学的时候做的贪吃蛇游戏(图片2)
希望通过这次实践,大家能从中提高自己的编程能力。并从中学会从零开始分析设计程序。 
在以下一些列的章节中,会详细介绍贪吃蛇设计的每一个环节,对于大家如果有更好的方法或者建议,吴鉴鹰欢迎大家提供!
 
游戏整体流程:这个游戏流程图描述了整个游戏的总体运行过程。在开始游戏后对蛇与食物重绘,以及屏幕上的相关信息绘制。当蛇碰到石头或是咬到自己,就捕捉异常,游戏就结束。
 
游戏规则:游戏中玩家可以通过键盘控制游戏中的贪吃蛇的运动,当蛇头碰到系统产生的食物时加长蛇身。当蛇碰到石头或者自己的身体时,游戏结束。游戏玩家还可以通过鼠标来控制蛇的移动。

游戏规则: 
1 玩家通过键盘控制蛇在游戏区中运动; 
2 当蛇头碰到食物时,得分增加,蛇身增长一个单位; 
3 当蛇头碰到蛇身或者石头,游戏结束; 
要求实现以下功能: 
玩家可以通过按键来控制贪吃蛇吃食物,游戏过程中还配有音效渲染气氛。
游戏设计思路:贪吃蛇游戏是一款非常经典的游戏,已经有很多版本的贪吃蛇游戏,游戏的玩法各版本大体相同。以下是本课题的贪吃蛇游戏设计的一些简单的说明: 1、 先设置一个主控面板; 
2、 依次向面板中添加蛇,食物,石头; 
3、 设法引导贪吃蛇吞掉食物以使它变得更长; 
4、 添加监听程序,通过方向键来改变蛇的运动方向;
5、 添加监听程序,通过按键来改变蛇的运动方向; 
6、 蛇不能吃到石头或是自己的身体,如果吃到石头或者自己的身体,游戏结束; 
7、 蛇吃食物或者死掉的时候都有特定的音效产生,我们这里由于没有蜂鸣器,所以这个程序没加,感兴趣的读者可以自己加上去试试!
算法中的基本概念:
节:一条蛇可以看成由许多圆拼凑成,把它称作节。节是贪吃蛇身上最小的单位。 
坐标系:坐标以左上角那点为(0,0),向右则递增,向下则递增。 
链表:用来保存每一节的状态,链表的第一个元素表示蛇的头部结点。
 
 
蛇、石头、食物的表示:
我们可以把显示区域想象成一个大大的表格,里面的格子就是组成蛇的基本单位,一个格子可以代表一个食物,也可以代表一个石头,几块连在一起的石头就可以代表一条蛇。使用坐标来区分这些格子。 
这里我们用一个集合来存储这些坐标,并且要求能够区分出蛇头和蛇尾。 
 
蛇的移动: 
蛇向前移动一步,可以看作是蛇头前面增加了一个节点,蛇的尾巴上少了一个节点(即去尾,加头) 

存储蛇身的数据结构 
由于要区分蛇头和蛇尾,我们必须用一个有顺序的数组表示,另一方面,我们需要经常的访问第一个和最后一个节点。


蛇的移动方向 
这里讨论蛇的移动方向控制。 
蛇下一步移动到哪里,是由方向来控制的。 
这里我们用int型常量来表示蛇的移动方向。 
因为我们是根据原蛇头的坐标和方向来确定新蛇头的坐标。在原坐标的基础上,根据蛇头的运动方向来确定新蛇头的坐标,比如向上移动就是y-1. 

如何显示蛇身 
显示蛇身,其实就是填充用颜色填充格子。 
需要4个参数,像素坐标x,像素坐标y,格子宽度,格子高度。 
像素坐标就是矩形左上角的坐标 

蛇身的移动方向 
1 相反方向 
和上一次移动的方向相反的方向称为相反方向,这种输入应该忽略。这样可以防止蛇从自己的身体中穿过。 
2 无效方向 
在蛇的这一次移动之后和下一次移动之前这个时间间隔内输入了多个非相反方向,只有最后一个是有效方向,其他的都是无效方向。 
蛇的最终运动方向以有效方向为准。 

吃到食物判定 
这里通过判定坐标是否重合来判断,只需要判断蛇头是否和食物重合就可以了,因为蛇的身体都是走蛇头走过的地方。
 
吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计(贪吃蛇子程序).doc
吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计(贪吃蛇按键子程序).doc
吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计(完整程序).doc
吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计PROTEUS仿真图.zip
吴鉴鹰(十四)基于12864的贪吃蛇游戏的设计详精讲.pdf
 
永不止步步 发表于05-13 16:09 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:346391个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号