C语言专业技能实训专题报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训专题报告
题目:贪吃蛇游戏控制台应用及proteus 仿真的实现
实训名称:专业技能实训
班级:
学号:
学生姓名:
指导教师:
哈尔滨工程大学
2016年02月10日
哈尔滨工程大学本科生专业技能实训专题报告
摘要
随着计算机及通讯技术的迅猛发展,人们对小游戏的追求也越来越频繁,所以就有了本文的产生:编写C语言程序实现贪吃蛇游戏。
贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,必须考虑人机交流与用户体验。游戏的界面不能太丑,更不能连个简单的界面都没有。游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。游戏的美观是一方面,游戏的内在素质是另一方面。一个游戏的优劣,最终由玩家决定。在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
在实现C语言部分的设计后,我们也完成了在proteus的环境中实现仿真,将程序进行迁移扩展,来达到通过仿真也能实现在单片机模拟环境中进行游戏。使得游戏更具有趣味性和新鲜感。
关键词:贪吃蛇;C语言;proteus仿真
哈尔滨工程大学本科生专业技能实训专题报告
1系统设计与算法分析
1.1需求分析与系统总体设计
根据课题所在项目的要求,需要开发出一款贪吃蛇小游戏,既能实现在控制台进行操作,同时也能将代码迁移到指定环境(protues仿真)中并实现相应的功能。这个游戏是人们生活中不可或缺的,从小到大,真正伴随我们成长的东西,游戏占有着很重要的地位.不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆.所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的,而贪吃蛇就是这样一个深受人们喜爱的游戏。一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键上的四个光标键控制向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇身体长一节,同时计10分,接着又会随机的出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体则游戏结束。结合以上分析,我们可以得到整个游戏的系统流程图,如图1.1。
1
哈尔滨工程大学本科生专业技能实训专题报告
2
图1.1 系统流程图
根据系统流程图,我们大致将游戏分为六个模块:开始界面模块、创建地图边界模块、创建食物模块、创建蛇模块、蛇移动控制模块和游戏结束模块。下面会分别进行说明。
1.2 游戏开始与结束模块设计
该模块为附加模块,不是主要模块,主要是为了增加游戏趣味性而设计。这一部分是由一个组员提出的设想,由于不是很难,所以很快就完成了。在该模块我主要是参与了控制台游戏开始和结束界面的编写,而仿真部分的界面则是由另一组员完成的。
控制台部分的开机界面比较简单,就是以默认创建好的地图为开机界面,而关机界面,我设计成了一个哭脸,在游戏失败后显示,并完成退回到主界面的操作。
protues 仿真部分的开机关机界面也很简单。开机动画我们仿照了3D 贪吃蛇的开机
哈尔滨工程大学本科生专业技能实训专题报告
3
界面,是一个萌萌的蛇头慢慢出现,吃掉“snake ”的字符,由此引导玩家进入游戏界面,如下图1.2.1;关机界面则在蛇头撞到边界或蛇头位置与蛇身重合时,游戏结束并弹出结束界面“游戏结束,别气馁 再来一次”。由于单片机程序不同于控制台,故结束界面结束后会重新进入游戏。如下图1.2.2所示。由于控制台部分不是本次实训的重点,故而不做重点讲解。
图1.2.1 仿真部分开机截图
哈尔滨工程大学本科生专业技能实训专题报告
图1.2.2仿真部分关机截图
1.3 食物与蛇的创建模块
基于以上需求分析,也可以将核心拆解为两个部分:也就是食物与蛇。为了便于理解,定义两个结构体:Food与snake。
表示食物和蛇的矩形都设计为10 X 10个像素单位,食物的基本数据域为它所出现的位置,用X和y 坐标表示,则矩形块用函数rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)可以画出。由于每次只出现一个食物,而食物被吃掉后,才出现下一个食物,所以设定yes 表示是否要出现一个食物的变量。
蛇的一节身体为一个矩形块,这样表示每个矩形块只需起点坐标x和y。身体是不断增长的,所以用数组存放每一节的坐标,最大设定为N=200 ,node表示当前节数。另外还需要保存蛇移动方向的变量direction 和表示生命的变量 life ,一但life 为1,则蛇死,游戏结束。所以程序功能的实现就是数组的操作。
第一部分是Food结构体的创建:
#define N 200
struct Food
{
int x; /* 食物的横坐标 */
int y; /* 食物的纵坐标 */
int yes; /* 判断是否出现食物的变量 */ } food; /* 食物的结构体 */
4
哈尔滨工程大学本科生专业技能实训专题报告
第二部分是snake结构体的创建:
struct snake
{
int x[N]; /* 蛇的横坐标 */
int y[N]; /* 蛇的纵坐标 */
int node; /* 蛇的节数 */
int direction; /* 蛇移动方向 */
int life; /* 蛇生命,0活着,1死亡 */ }snake;
1.4创建地图边界模块
游戏界面:用点表示墙壁边界,利用void write_dat(unsigned char dat)函数及void set_xy(unsigned char x,unsigned char y)函数和数组的结合对游戏边界进行初始化,并利用void write_hanzi(unsigned char x,unsigned char y,unsigned char code *dat)函数及void write_shuzi(unsigned char x,unsigned char y,unsigned char code *dat)函数对屏幕右侧得分、等级进行显示;
由于这个模块我没有直接参与,所以不做过多的介绍。
1.5蛇移动控制模块
用LCD屏右侧的四个开关LEFT、RIGHT、UP、DOWN控制蛇移动的方向, PAUSE开关控制游戏的暂停。游戏初始等级为低级,随着分数的增加等级会升至中级、高级,根据等级给定相关食物的分数,每吃到一个食物加上相应分数,并在显示屏右侧显示得分和等级。如下图1.5.1。
这一部分,我只负责蛇死亡的判定部分,在这里不做详细说明,详情在下面才测试
5