【精品】软件
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
实践
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
83
软件工程实践报告
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目名称: 贪食蛇游戏软件
姓名
专业
班级学号
同 组 人
指导教师
摘 要
随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界。人们不在拘泥于一小块天地。加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成了必需品。在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点。 现在我们所要介绍的这一款游戏----贪吃蛇,就是满足以上要求而
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
出来的,希望能给玩家带来娱乐。贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。
关键字:turbo c,结构体函数,蛇节模型
- 2 -
目录
第一章 前言--------------------------------------------------------1 第二章 需求分析----------------------------------------------------1
第三章 设计要求----------------------------------------------------2
3.1基本要求和提高要求-------------------------------------------2 第四章 系统的组成--------------------------------------------------3 第五章 概要设计----------------------------------------------------3
5.1程序初始化---------------------------------------------------3
5.2程序流程--------------------------------------------------------------------------------4
第六章 详细设计------------------------------------------------------------------------------6
6(1对象模型设---------------------------------------------------6
6.2食物及蛇状态的初始化及食物的出现------------------------------9 6.3游戏运行中的设计思-------------------------------------------12
6.4设置游戏规则及结---------------------------------------------14 第七章 调试及测试结果与分析----------------------------------------17 第八章 结论--------------------------------------------------------18
参考文献-----------------------------------------------------------19
附录---------------------------------------------------------------19
- 3 -
第一章 前 言
C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。因而越来越多的高等院校已经将C语言作为非计算机专业甚至计算机专业的必修课和选修课,C语言也成为了软件设计的首选语言之一。
本学期我们进行了软件工程实习活动,主要的任务就是运用所学的C语言知识,在turbo c集成环境下制作一个小型贪食蛇应用程序,以达到熟悉和熟练运用C语言的目的,为将来的学习和工作打下良好的实践基础。
虽然贪食蛇游戏在我们日常生活中是很平常见,但作为很普通的一款小游戏,他却有着极强的生命力。它的简单易行使之广泛的存在于电脑,手机,游戏机等载体上,加上变化无穷、引人入胜让它成为了一款受人喜欢的小游戏
第二章 需求分析
项目背景和内容概要:现在我们所要介绍的这一款游戏---贪吃蛇。是个简单的小游戏,但却能给人以放松,让我们从繁重的日常生活中解脱出来。而只有我们的身
心得
信息技术培训心得 下载关于七一讲话心得体会关于国企改革心得体会关于使用希沃白板的心得体会国培计划培训心得体会
到了娱乐才能更好的投入到新的工作。现在的人,不管是已经工作的,还是还未进入社会的学生,都面临着很大的压力,而这样一款能让我们随时随地都能享受的游戏,其魅力还是不可估量的。
- 4 -
?系统分析
1 可行性分析
1。1 技术可行性
完全可以利用C语言来编程,在TC下也能顺利运行,可以说在技术这方面不会有大的问题。
1。2 经济可行性
可以说其经济利益将相当可观,随着手机和电脑的普及,这样的小游戏也将随着普及,到时候我们也可以静观其成。
1。3 操作可行性
对于这样一个简单易行的游戏,其操作不会有问题的,不论是怎样的平台都能很好的运行。而用户也可以在其受益不浅。
2 需求分析
游戏是人们生活中不可或缺的,一个人从小到大,真正伴随他成长的东西,游戏占有着很重要的地位。不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆。所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的。
第三章 设计要求
具体的设计要求包括基本要求和提高要求
贪食蛇游戏的基本要求是在turbo c集成环境下用C语言进行编译。 游戏规则:
1、蛇头不能咬蛇身,,蛇头不能和蛇身发生碰撞,撞上就gameover,包括不能反方向运动
2、蛇头不能碰障碍,,撞上就gameover,包括不能走出游戏区域
3、蛇吃了食物会增加长度,食物吃掉一个才会产生新的
4、蛇只有上下左右四个行走方向
- 5 -
提高要求是为了让界面看起来更大方和美观,并对吃下的豆子进行积分,当游戏结束时,界面出现“GAME OVER”的提示
第四章 系统的组成
系统的组成部分即程序模块结构:
1、初始化:场景、外边框和蛇(初始化蛇的长度,初始化蛇的行走方向)
2、在场景中放置食物,吃完一个再出现下一个,吃一个食物蛇身增加一节,食物不能和障碍重合
3、蛇的运动,一节跟一节
4、行走中检测蛇头不能和障碍、蛇身碰撞,也不能 超出游戏区域
5、键盘的监听,控制蛇的运动,及改变游戏状态
第五章 概要设计
一、程序初始化:
1、全局变量的定义(初始化游戏的速度以及得分)
2、蛇结构体的定义,食物结构体的定义
3、图形界面的初始化(Init( )函数)
游戏围墙的绘制(Draw()函数)
食物的出现(Gameplay()函数)
此次编译方法采用的是结构体定义编程,除了此方法还可以运用双向链表的方法制作贪食蛇游戏,但是因为编程复杂且不容易理解,所以未采用。 二、设计流程图
在游戏程序中,主任务0主要完成一些初始化的工作,开机画面的显示。在任务2种一开始将屏幕清屏,然后绘制贪食蛇游戏的边界和计分状态,最后进入一个无限循环,在循环体中根据游戏者的按键进行相应的处理,详细流程图如下图所示:
- 6 -
绘制游蛇的边
界图案
显示游戏界面 右边的静态图
片和计分清零
初始化蛇的位
置以及蛇的游
动方向
等待键盘扫描
任务发来的消
息
Reset键 暂停键 判断按键
的值
方向键
重新创建任务把任务2 改变蛇游动的方向
2,重新开始游挂起,使游 戏 戏暂停
延时
图1: 贪食蛇吃豆的任务流程图
蛇的动态显示建立在任务2,主要是不停的更新蛇的位置,另外每更新一次还需
要判断蛇是否碰到边界,是否碰到自己身子,是否吃到豆子等。其流程图如下图
所示:
- 7 -
游戏
结束否,
否
更新蛇的位
置,将蛇头原
来坐标赋给蛇
身,蛇身原来 坐标赋给蛇
尾。
是 是否碰到边
界或自己身
体
游戏结束
否
是否吃到豆
子
增加蛇身的长
度
更新豆子
蛇身各坐标赋值
延时
第六章 详细设计 一、对象模型设计
1、寻找规律,建立对象模型:
- 8 -
首先从物理的角度来分析蛇得运动规律。它是蠕动的,像水一样流动。他有
个特性就是身体的每一个点都经过他头部所在的点,他每一个时刻骨节所要运动
的目的地是他前一个骨节所在的位置。
不难看出,其中的对象模型为 蛇,骨骼,骨节,头
抽象的接口为
蛇,骨骼,骨节,头,图中豆子
2、结构图:
骨骨
骼 节 蛇 豆子 接口结构图
头 骨骼骨骼
对象结构图
豆子
骨蛇 骨头 节 骼
骨骼 蛇 骨节
头
3、给接口添加行为:
图元(GraphicObject)
绘画:进行图元自身的绘画操作
当前矩形:得到图元当前所在的矩形,也可考虑使用region,这样使得对图
元范围得描述更加具体。
- 9 -
骨节(Condyle)
前一个骨节:提供前序访问
后一个骨节:提供后序访问
流动:进行骨节运动诡计得计算。
骨骼(Cadre)(管理骨节链)
得到头:得到蛇头
得到尾:得到蛇尾
新增骨节:在骨节链中新增骨骼
删除骨节:在骨节链中删掉指定骨节
头(head)
方向:能够设定和访问当前运动方向。
蛇(Snake)
增长:蛇进行自身得增长
4、完善模型,引入访问者模式
存在的问题:
当前是由具体的骨骼对象来负责图元的绘画以及处理流动的,而骨骼只是管理骨节,没有提供任何访问骨节的方法,我们应该怎样访问骨节呢,比如我们要每个骨节画出自己的形态,我们可能会这样做。在骨骼上提供一个绘画方法,然后通过遍历骨节链,调用每个骨节的绘画方法。这样似乎可以解决问题。那么,我们要进行骨节流动计算呢,我们再在骨骼上提供流动方法,然后同样的遍历骨节,调用每个的流动方法。我们要是加入统计骨节个数功能呢,我们要是加入其他的需要遍历骨骼的方法呢,„„
这样做的缺点是什么,
相似的代码有多份
如果骨节的访问结构发生变化,后果会怎样,
有新功能需要遍历骨节链该怎么办,
这样会迫使我们拷贝代码。
解决办法,引入访问者模式:
新增加接口如下:
加入行为:
- 10 -
访问者:(空,无方法,属性)
被访问者:
接受访问者
骨节访问者:继承自访问者
访问骨节
访问者 被访问者
骨节访问者
5、完整的结构图:
被访问者 图 元 蛇 骨 骨头 节 骼
骨骼 蛇 骨节
头
二、食物及蛇状态的初始化及食物的出现 (一)、程序初始化
——————全局变量
- 11 -
全局变量:
是指在函数之外定义的变量,其作用范围是从定义位置开始到源文件结束
为止,其间的函数
都可以使用
a , b ; int
f1 ( int c )
{
int d , e ;
„
}
int i;
main()
{
int m , n ;
„
}
全局变量a、b的作用范围,c 的作用范围,d、e的作用范围
(二)、程序初始化
—————结构体的定义 蛇的结构体的定义:
每一节蛇坐标的表示蛇移动方向的表示蛇生命的表示蛇节数的表示
食物结构体的定义:
食物的坐标的表示食物有无的表示 (三)、程序初始化
—————图形界面的初始化 int gd=DETECT , gm;
initgraph ( &gd , &gm ,”c:\\Win-TC”) ;
(四)、游戏边框的绘制(Draw函数) 开始画面,左上角坐标为(50,40)
- 12 -
右下角坐标为(610,460)的围墙
库函数rectangle (left, top, right , bottom ) ; (50,40)
(610,460)
50) (60,
(600,450)
9
(五)、Gameplay()函数:
———结构体变量的使用
需要出现新食物 :food。yes=1; /*1表示需要出现、0表示已存在*/ 蛇的状态:snake。life=0; /*0表示活着、1表示死亡*/ 蛇默认(初始)运动方向:snake。direction=,; 蛇的默认(初始)节数: snake。node=2; 蛇的默认(初始)坐标:
snake。x[0]=,;snake。y[0]=,; /*蛇头*/
snake。x[1]=90;snake。y[1]=100; /*蛇身*/ 注意结构体变量成员的引用格式: <结构体变量> 。 <成员> (六)、Gameplay()函数:
—————食物的出现
判断是否需要出现食物——判断food。yes的值
1: /*需要出现新食物*/
随机产生食物坐标,并使坐标能被十整除
/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
改变food。yes的状态:
0 : /*显示食物*/
画出食物
蛇的运动:先自由移动,用方向键控制蛇的方向。
三、游戏运行中的设计思想:
1、蛇自由移动:在没有任何按键的时候,蛇按照初始方向向前移动 ;
- 13 -
2、方向键控制蛇的移动方向:用方向键控制蛇结构体里面的方向成员。同时如
果不出现蛇死亡或者按ESC键,我们可以永远玩游戏。永远玩游戏这里将用到一
个什么语句,
永循环
while) (1
while(bioskey(1)==0)表示无键盘输入
Gameplay( )程序结构
while (1)
{
while (bioskey(1)==0)
{
蛇身、蛇头坐标的改变
画出蛇,并使蛇运动
} /*end while(!bioskey(1))*/
监听方向键及ESC键
} /*end while*/
判断是否需要出现食物,并进行相应的操作 食物及蛇状态的初始化
3、蛇的移动
移动的思想:
(1)蛇身、蛇头坐标的改变
蛇身:将蛇的第二节在屏幕中的坐标移动到第一
节,第三节中的坐标节移动到第二节„„
蛇头:随着方向键走。
(2)蛇向前运动:
画出蛇,延时(gamespeed),并用用背景色去除
蛇的最后一节
- 14 -
4、蛇的坐标改变
for( i = snake。node-1 ; i > 0; i -- ) {
snake 。 x [i] = snake 。 x [i-1] ;
snake 。 y [i] = snake 。 y [i-1] ; }
5、方向键的表示
上 下 左 右
UP DOWN LEFT RIGHT
1 2 3 4
6、如果蛇结构体的方向成员为
1: snake 。 y [0] - = 10 ;
2: „„„„„
3: „„„„„
4: „„„„„
7、蛇向前运动
画蛇(for)
delay(gamespeed);
用背景色去除蛇的最后一结:
(1)接受按键:key=bioskey(0); (2)按ESC键退出游戏
(3)方向键改变蛇的结构体方向成员
如果key ==UP&&snake。direction!=2:
snake。direction=1;
„„„依此„„„。。类推„„„„„„„„„„ (二)、方向键控制蛇的移动
四、设置游戏规则
- 15 -
1、判断蛇是否撞击自己,如果撞击自己游戏就结束(调用gameover()函数,
在程序外面定义gameover()函数,同时蛇的生命成员为1; 2、判断蛇是否撞击墙壁,如果撞击墙边游戏就结束(调用gameover()函数),
同时蛇的生命成员为1;
、判断蛇是否吃到食物,如果吃到食物,先把食物擦除,蛇长度加1,食物的3
判断变量food。yes=1,分数加10,输出分数(调用显示分数函数printscore
( ),在程序外面定义printscore( )函数);
判断蛇是否撞击自己
for(i=3 ; i
#include
h> #include 0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake。x[i]=snake。x[i-1];
snake。y[i]=snake。y[i-1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake。direction)
{
case 1:snake。x[0]+=10;break;
case 2: snake。x[0]-=10;break;
case 3: snake。y[0]-=10;break;
case 4: snake。y[0]+=10;break;
}
for(i=3;i595||snake。y[0]<55|| snake。y[0]>455)/*蛇是否撞到墙壁*/
{
GameOver();/*本次游戏结束*/
- 26 -
snake。life=1; /*蛇死*/
}
if(snake。life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
break;
if(snake。x[0]==food。x&&snake。y[0]==food。y)/*吃到食物以后*/ {
setcolor(0);/*把画面上的食物东西去掉*/
rectangle(food。x,food。y,food。x+10,food。y-10); snake。x[snake。node]=-20;snake。y[snake。node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake。node++;/*蛇的身体长一节*/
food。yes=1;/*画面上需要出现新的食物*/
score+=10;
PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;i
本文档为【【精品】软件工程实践报告83】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。