C语言专业技能实训专题报告.docx
- 文档编号:16532188
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:12
- 大小:362.26KB
C语言专业技能实训专题报告.docx
《C语言专业技能实训专题报告.docx》由会员分享,可在线阅读,更多相关《C语言专业技能实训专题报告.docx(12页珍藏版)》请在冰点文库上搜索。
C语言专业技能实训专题报告
实训专题报告
题目:
贪吃蛇游戏控制台应用及proteus仿真的实现
实训名称:
专业技能实训
班级:
学号:
学生姓名:
指导教师:
哈尔滨工程大学
2016年02月10日
摘要
随着计算机及通讯技术的迅猛发展,人们对小游戏的追求也越来越频繁,所以就有了本文的产生:
编写C语言程序实现贪吃蛇游戏。
贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的内在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
在实现C语言部分的设计后,我们也完成了在proteus的环境中实现仿真,将程序进行迁移扩展,来达到通过仿真也能实现在单片机模拟环境中进行游戏。
使得游戏更具有趣味性和新鲜感。
关键词:
贪吃蛇;C语言;proteus仿真
1系统设计与算法分析
1.1需求分析与系统总体设计
根据课题所在项目的要求,需要开发出一款贪吃蛇小游戏,既能实现在控制台进行操作,同时也能将代码迁移到指定环境(protues仿真)中并实现相应的功能。
这个游戏是人们生活中不可或缺的,从小到大,真正伴随我们成长的东西,游戏占有着很重要的地位.不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆.所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的,而贪吃蛇就是这样一个深受人们喜爱的游戏。
一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键上的四个光标键控制向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇身体长一节,同时计10分,接着又会随机的出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体则游戏结束。
结合以上分析,我们可以得到整个游戏的系统流程图,如图1.1。
图1.1系统流程图
根据系统流程图,我们大致将游戏分为六个模块:
开始界面模块、创建地图边界模块、创建食物模块、创建蛇模块、蛇移动控制模块和游戏结束模块。
下面会分别进行说明。
1.2游戏开始与结束模块设计
该模块为附加模块,不是主要模块,主要是为了增加游戏趣味性而设计。
这一部分是由一个组员提出的设想,由于不是很难,所以很快就完成了。
在该模块我主要是参与了控制台游戏开始和结束界面的编写,而仿真部分的界面则是由另一组员完成的。
控制台部分的开机界面比较简单,就是以默认创建好的地图为开机界面,而关机界面,我设计成了一个哭脸,在游戏失败后显示,并完成退回到主界面的操作。
protues仿真部分的开机关机界面也很简单。
开机动画我们仿照了3D贪吃蛇的开机界面,是一个萌萌的蛇头慢慢出现,吃掉“snake”的字符,由此引导玩家进入游戏界面,如下图1.2.1;关机界面则在蛇头撞到边界或蛇头位置与蛇身重合时,游戏结束并弹出结束界面“游戏结束,别气馁再来一次”。
由于单片机程序不同于控制台,故结束界面结束后会重新进入游戏。
如下图1.2.2所示。
由于控制台部分不是本次实训的重点,故而不做重点讲解。
图1.2.1仿真部分开机截图
图1.2.2仿真部分关机截图
1.3食物与蛇的创建模块
基于以上需求分析,也可以将核心拆解为两个部分:
也就是食物与蛇。
为了便于理解,定义两个结构体:
Food与snake。
表示食物和蛇的矩形都设计为10X10个像素单位,食物的基本数据域为它所出现的位置,用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结构体的创建:
#defineN200
structFood
{
intx;/*食物的横坐标*/
inty;/*食物的纵坐标*/
intyes;/*判断是否出现食物的变量*/}food;/*食物的结构体*/
第二部分是snake结构体的创建:
structsnake
{
intx[N];/*蛇的横坐标*/
inty[N];/*蛇的纵坐标*/
intnode;/*蛇的节数*/
intdirection;/*蛇移动方向*/
intlife;/*蛇生命,0活着,1死亡*/}snake;
1.4创建地图边界模块
游戏界面:
用点表示墙壁边界,利用voidwrite_dat(unsignedchardat)函数及voidset_xy(unsignedcharx,unsignedchary)函数和数组的结合对游戏边界进行初始化,并利用voidwrite_hanzi(unsignedcharx,unsignedchary,unsignedcharcode*dat)函数及voidwrite_shuzi(unsignedcharx,unsignedchary,unsignedcharcode*dat)函数对屏幕右侧得分、等级进行显示;
由于这个模块我没有直接参与,所以不做过多的介绍。
1.5蛇移动控制模块
用LCD屏右侧的四个开关LEFT、RIGHT、UP、DOWN控制蛇移动的方向,PAUSE开关控制游戏的暂停。
游戏初始等级为低级,随着分数的增加等级会升至中级、高级,根据等级给定相关食物的分数,每吃到一个食物加上相应分数,并在显示屏右侧显示得分和等级。
如下图1.5.1。
这一部分,我只负责蛇死亡的判定部分,在这里不做详细说明,详情在下面才测试部分再提及。
图1.5.1蛇移动算法流程图
2系统实现与测试
整个系统是在我们小组四个人的共同努力下完成的,所以下文的介绍也有所侧重,主要针对我个人完成的部分进行介绍。
2.1游戏功能的实现
在这部分,我分别从主要功能、界面功能、操作功能三方面进行介绍。
2.1.1主要功能
(1)进入游戏界面,在游戏过程随着蛇吃到食物的数量增加,游戏难度随之加大即蛇的行进速度变快。
(2)当游戏难度加大时,玩家等级增加,同时吃到食物的分值增加,显示器右侧的显示玩家得分和游戏等级情况。
2.1.2界面功能
(1)在游戏界面有一个显示当前等级情况的窗口,方便用户来了解自己的等级。
(2)在游戏界面有一个显示当前得分情况的窗口,方便用户来了解自己的战绩。
2.1.3操作功能
游戏的主要操作是UP、DOWN、LEFT、RINGT、PAUSE五个按钮,分别表示向上、下、左、右移动和游戏暂停。
2.2蛇移动模块的实现
该模块主要以判定为主,首先要先判断,在蛇前进的四个方向上有没有食物,以向上为例:
if(status==w)
{
nexthead->x=head->x;
nexthead->y=head->y-1;
if(nexthead->x==food->x&&nexthead->y==food->y)//如果下一个有食物//
eatFood(nexthead);
else//如果没有食物//
noFood(nexthead);
}
这样在四个方向分别进行判断后即可确定蛇的移动方向。
2.3蛇死亡方式的实现
蛇的死亡方式分为两种:
一种为咬到自身儿死亡;一种为撞到游戏边界(墙)而死亡。
下面分别进行介绍。
首先为咬到自身死亡,我设置为函数dead1():
intdead1()//咬到自身死亡
{
snake*s0;
s0=head->next;
while(s0!
=NULL)
{
if(s0->x==head->x&&s0->y==head->y)
{
return1;
}
s0=s0->next;
}
return0;
}
然后是第二种死亡方式,撞墙而死,我设置为函数dead2():
voiddead2()//撞墙而死
{
if(head->x==0||head->x==length||head->y==0||head->y==height)
{
gameOver=1;
end();
}
}
2.4等级模块的实现
为了增加游戏的趣味性,我们给游戏设计了自带加速功能,每五个食物点为一个等级,依次设置低级、中级、高级的等级,每上升一个等级,贪吃蛇的行进速度就会加快,得到的分值也会有相应的递增(低级每吃到一个食物得1分,中级3分,高级6分),使用户享受更加刺激的体验。
这部分不是我一个人完成的,还有小组另一个人,我们两个共同完成的。
最后实现的界面如下图2.4.1。
图2.4.1游戏低、中、高等级截图
3结论
两周的实训时间真的过得很快,在这么短的时间内,我的C语言知识得到了温习,编程能力得到了很大幅度的提高,我觉得这次实习真的很重要,而且是恰逢其时,当然通过自己编程的过程,也有了一些心得:
编程要的是正确的结果,体会的是艰辛的过程,收获的是好心情。
首先编程的时候你不能觉得这是一个繁琐的过程,在遇到出错的时候要有信心解决,不要害怕出错,不能忽略细节,尤其是对标点以及输入输出函数,要正确使用。
其次,编程要有一个扎实的知识储备,没把课本看好,没把例题看好,不会编出正确的程序,同时,如果不多看程序,不断吸收别人的编程思想,就不会编出精彩的程序;当然也不能忽略与别人讨论与请教,在这过程中,我们可以相互交流编程想法,找到解决问题的最佳路径,这种团结协作的精神也是必须要有的。
两周很短,编程的过程却很漫长,思考,编程,改错,运行,这就是编程的感觉。
在这次实训中,我对C语言有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,每次运行程序成功,让我对下面的项目就充满信心。
通过自己与同学合作编写程序,最终把最初的理论知识转化基本技能。
这次的实训,使我对C语言的学习产生浓厚的兴趣。
贪吃蛇的这个项目,第一部分考察了我们C语言部分编码的熟练程度,第二部分仿真的部分,则需要我们在短时间内掌握一项之前没有接触过的单片机部分的技术,这不仅考验我们的知识的学习,更重要的是一种知识的迁移能力,我相信这对我们在今后的学习生活中,也会起到非常重大的作用,让我们终身受益。
参考文献
[1]【美】霍顿.C语言入门经典.计算机科学,2013,37(11):
300-301,306P.
[2]【美】普拉塔.CPrimerPlus.计算机工程与科学,2005,32
(2):
114-117P.
[3]詹晓丽.AMPIRE128X64显示器.计算机工程,2005,12(5):
255-257P.
[4]彭伟.C语言程序设计Protues.计算机工程,2009,11(5):
255-257P.
[5]李伟.LCD12864液晶的使用.计算机工程,2001,10(5):
255-257P.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 专业技能 专题报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)