软件综合项目工程实践报告.docx
《软件综合项目工程实践报告.docx》由会员分享,可在线阅读,更多相关《软件综合项目工程实践报告.docx(28页珍藏版)》请在冰豆网上搜索。
软件综合项目工程实践报告
软件工程实践报告
题目名称:
贪食蛇游戏软件
摘要
随着社会发展,人们生活步调日益加快,越来越多人加入了全球化世界。
人们不在拘泥于一小块天地。
加班,出差成了当代人不可避免公务。
而此时一款可以随时随处娱乐游戏成了必须品。
在手机和电脑成为人们日用品社会,一款能在其上能便捷运营游戏成为买家参照点。
当前咱们所要简介这一款游戏----贪吃蛇,就是满足以上规定而设计出来,但愿能给玩家带来娱乐。
贪吃蛇这一游戏简朴易行,操作以便,娱乐性较强,吸引了不少人。
这一款游戏紧紧地抓住了人们心理,虽然简朴,却起乐无穷,在人们不断追求更多欲望下,该游戏给人们带来了追逐快感,以及成功后满足感,对于始终处在高压下当代人是较好放松工具。
核心字:
turboc,构造体函数,蛇节模型
第一章前言--------------------------------------------------------1
第二章需求分析----------------------------------------------------1
第三章设计规定----------------------------------------------------2
3.1基本规定和提高规定-------------------------------------------2
第四章系统构成--------------------------------------------------3
第五章概要设计----------------------------------------------------3
5.1程序初始化---------------------------------------------------3
5.2程序流程--------------------------------------------------------------------------------4
第六章详细设计------------------------------------------------------------------------------6
6.1对象模型设---------------------------------------------------6
6.2食物及蛇状态初始化及食物浮现------------------------------96.3游戏运营中设计思-------------------------------------------12
6.4设立游戏规则及结---------------------------------------------14
第七章调试及测试成果与分析----------------------------------------17
第八章结论--------------------------------------------------------18
参照文献-----------------------------------------------------------19
附录---------------------------------------------------------------19
第一章前言
C语言是在70年代初问世。
一九七八年由美国电话电报公司(AT&T)贝尔实验室正式刊登了C语言。
初期C语言重要是用于UNIX系统。
由于C语言强大功能和各方面长处逐渐为人们结识,到了八十年代,C开始进入其他操作系统,并不久在各类大、中、小和微型计算机上得到了广泛使用。
成为当代最先进程序设计语言之一。
语言是一种构造化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言体现能力和解决能力极强。
它不但具备丰富运算符和数据类型,便于实现各类复杂数据构造。
它还可以直接访问内存物理地址,进行位(bit)一级操作。
由于C语言实现了对硬件编程操作,因而C语言集高档语言和低档语言功能于一体。
既可用于系统软件开发,也适合于应用软件开发。
此外,C语言还具备效率高,可移植性强等特点。
因而广泛地移植到了各类各型计算机上,从而形成了各种版本C语言。
因而越来越多高等院校已经将C语言作为非计算机专业甚至计算机专业必修课和选修课,C语言也成为了软件设计首选语言之一。
本学期咱们进行了软件工程实习活动,重要任务就是运用所学C语言知识,在turboc集成环境下制作一种小型贪食蛇应用程序,以达到熟悉和纯熟运用C语言目,为将来学习和工作打下良好实践基本。
虽然贪食蛇游戏在咱们寻常生活中是很寻常用,但作为很普通一款小游戏,她却有着极强生命力。
它简朴易行使之广泛存在于电脑,手机,游戏机等载体上,加上变化无穷、引人入胜让它成为了一款受人喜欢小游戏
第二章需求分析
项目背景和内容概要:
当前咱们所要简介这一款游戏---贪吃蛇。
是个简朴小游戏,但却能给人以放松,让咱们从繁重寻常生活中解脱出来。
而只有咱们身心得到了娱乐才干更好投入到新工作。
当前人,不论是已经工作,还是尚未进入社会学生,都面临着很大压力,而这样一款能让咱们随时随处都能享有游戏,其魅力还是不可预计。
·系统分析
1可行性分析
1。
1技术可行性
完全可以运用C语言来编程,在TC下也能顺利运营,可以说在技术这方面不会有大问题。
1。
2经济可行性
可以说其经济利益将相称可观,随着手机和电脑普及,这样小游戏也将随着普及,届时候咱们也可以静观其成。
1。
3操作可行性
对于这样一种简朴易行游戏,其操作不会有问题,无论是如何平台都能较好运营。
而顾客也可以在其受益不浅。
2需求分析
游戏是人们生活中不可或缺,一种人从小到大,真正随着她成长东西,游戏占有着很重要地位。
无论是一种玩具,还是一种能和伙伴一起开心小游戏,都是能给咱们留下诸多美好回忆。
因此无论是什么样游戏,只要它能迎合人们内心某种需求,它市场总会是好。
第三章设计规定
详细设计规定涉及基本规定和提高规定
贪食蛇游戏基本规定是在turboc集成环境下用C语言进行编译。
游戏规则:
1、蛇头不能咬蛇身--蛇头不能和蛇身发生碰撞,撞上就gameover,涉及不能反方向运动
2、蛇头不能碰障碍--撞上就gameover,涉及不能走出游戏区域
3、蛇吃了食物会增长长度,食物吃掉一种才会产生新
4、蛇只有上下左右四个行走方向
提高规定是为了让界面看起来更大方和美观,并对吃下豆子进行积分,当游戏结束时,界面浮现“GAMEOVER”提示
第四章系统构成
系统构成某些即程序模块构造:
1、初始化:
场景、外边框和蛇(初始化蛇长度,初始化蛇行走方向)
2、在场景中放置食物,吃完一种再浮现下一种,吃一种食物蛇身增长一节,食物不能和障碍重叠
3、蛇运动,一节跟一节
4、行走中检测蛇头不能和障碍、蛇身碰撞,也不能超过游戏区域
5、键盘监听,控制蛇运动,及变化游戏状态
第五章概要设计
一、程序初始化:
1、全局变量定义(初始化游戏速度以及得分)
2、蛇构造体定义,食物构造体定义
3、图形界面初始化(Init()函数)
游戏围墙绘制(Draw()函数)
食物浮现(Gameplay()函数)
本次编译办法采用是构造体定义编程,除了此办法还可以运用双向链表办法制作贪食蛇游戏,但是由于编程复杂且不容易理解,因此未采用。
二、设计流程图
在游戏程序中,主任务0重要完毕某些初始化工作,开机画面显示。
在任务2种一开始将屏幕清屏,然后绘制贪食蛇游戏边界和计分状态,最后进入一种无限循环,在循环体中依照游戏者按键进行相应解决,详细流程图如下图所示:
Reset键暂停键
方向键
图1:
贪食蛇吃豆任务流程图
蛇动态显示建立在任务2,重要是不断更新蛇位置,此外每更新一次还需要判断蛇与否遇到边界,与否遇到自己身子,与否吃到豆子等。
其流程图如下图所示:
否
是
否
第六章详细设计
一、对象模型设计
1、寻找规律,建立对象模型:
一方面从物理角度来分析蛇得运动规律。
它是蠕动,像水同样流动。
她有个特性就是身体每一种点都通过她头部所在点,她每一种时刻骨节所要运动目地是她前一种骨节所在位置。
不难看出,其中对象模型为
蛇,骨骼,骨节,头
抽象接口为
蛇,骨骼,骨节,头,图中豆子
2、构造图:
接口构造图
骨骼骨骼
对象构造图
3、给接口添加行为:
图元(GraphicObject)
绘画:
进行图元自身绘画操作
当前矩形:
得到图元当前所在矩形,也可考虑使用region,这样使得对图元范畴得描述更加详细。
骨节(Condyle)
前一种骨节:
提供前序访问
后一种骨节:
提供后序访问
流动:
进行骨节运动诡计得计算。
骨骼(Cadre)(管理骨节链)
得到头:
得到蛇头
得到尾:
得到蛇尾
新增骨节:
在骨节链中新增骨骼
删除骨节:
在骨节链中删掉指定骨节
头(head)
方向:
可以设定和访问当前运动方向。
蛇(Snake)
增长:
蛇进行自身得增长
4、完善模型,引入访问者模式
存在问题:
当前是由详细骨骼对象来负责图元绘画以及解决流动,而骨骼只是管理骨节,没有提供任何访问骨节办法,咱们应当如何访问骨节呢?
例如咱们要每个骨节画出自己形态,咱们也许会这样做。
在骨骼上提供一种绘画办法,然后通过遍历骨节链,调用每个骨节绘画办法。
这样似乎可以解决问题。
那么,咱们要进行骨节流动计算呢?
咱们再在骨骼上提供流动办法,然后同样遍历骨节,调用每个流动办法。
咱们要是加入记录骨节个数功能呢?
咱们要是加入其她需要遍历骨骼办法呢?
……
这样做缺陷是什么?
相似代码有多份
如果骨节访问构造发生变化,后果会如何?
有新功能需要遍历骨节链该怎么办?
这样会迫使咱们拷贝代码。
解决办法,引入访问者模式:
新增长接口如下:
加入行为:
访问者:
(空,无办法,属性)
被访问者:
接受访问者
骨节访问者:
继承自访问者
访问骨节
5、完整构造图:
二、食物及蛇状态初始化及食物浮现
(一)、程序初始化
——————全局变量
全局变量:
是指在函数之外定义变量,其作用范畴是从定义位置开始到源文献结束为止,其间函数
都可以使用
int a,b ;
f1(intc)
{
intd,e;
…
}
inti;
main()
{
intm,n;
…
}
全局变量a、b作用范畴,c作用范畴,d、e作用范畴
(二)、程序初始化
—————构造体定义
蛇构造体定义:
每一节蛇坐标表达蛇移动方向表达蛇生命表达蛇节数表达
食物构造体定义:
食物坐标表达食物有无表达
(三)、程序初始化
—————图形界面初始化
intgd=DETECT,gm;
initgraph(&gd,&gm,”c:
\\Win-TC”);
(四)、游戏边框绘制(Draw函数)
开始画面,左上角坐标为(50,40)
右下角坐标为(610,460)围墙
库函数rectangle(left,top,right,bottom);
(50,40)
(610,460)
(60,50)
(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、蛇自由移动:
在没有任何按键时候,蛇按照初始方向向前移动;
2、方向键控制蛇移动方向:
用方向键控制蛇构造体里面方向成员。
同步如果不浮现蛇死亡或者按ESC键,咱们可以永远玩游戏。
永远玩游戏这里将用到一种什么语句?
永循环
while
(1)
while(bioskey
(1)==0)表达无键盘输入
Gameplay()程序构造
while
(1)
{
while(bioskey
(1)==0)
{
蛇身、蛇头坐标变化
画出蛇,并使蛇运动
} /*endwhile(!
bioskey
(1))*/
监听方向键及ESC键
} /*endwhile*/
判断与否需要浮现食物,并进行相应操作
食物及蛇状态初始化
3、蛇移动
移动思想:
(1)蛇身、蛇头坐标变化
蛇身:
将蛇第二节在屏幕中坐标移动到第一
节,第三节中坐标节移动到第二节……
蛇头:
随着方向键走。
(2)蛇向前运动:
画出蛇,延时(gamespeed),并用用背景色去除
蛇最后一节
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;
………依此………。
。
类推…………………………
(二)、方向键控制蛇移动
四、设立游戏规则
1、判断蛇与否撞击自己,如果撞击自己游戏就结束(调用gameover()函数,在程序外面定义gameover()函数,同步蛇生命成员为1;
2、判断蛇与否撞击墙壁,如果撞击墙边游戏就结束(调用gameover()函数),同步蛇生命成员为1;
3、判断蛇与否吃到食物,如果吃到食物,先把食物擦除,蛇长度加1,食物判断变量food。
yes=1,分数加10,输出分数(调用显示分数函数printscore(),在程序外面定义printscore()函数);
判断蛇与否撞击自己
for(i=3;inode;i++)
{
if(snake。
x[i]==snake。
x[0]&&snake。
y[i]==snake。
y[0])
{
GameOver();
snake。
life=1;
break;
}
}
判断蛇与否撞击墙壁
判断蛇头坐标与否撞击墙壁
若撞击,调用GameOver();
并将蛇状态设立为1
判断蛇与否吃到食物
判断蛇头与食物坐标与否相似
相似:
擦除食物
蛇身体长一节
变化food。
yes状态
score增长10
输出新得分:
PrScore();
Gameover()函数
使用到库函数:
cleardevice()
/*图形模式下清除屏幕上内容*/
settextstyle();
/*设立图形模式下字符显示字体、方向和大小*/
outtextxy();
/*图形模式下在x,y坐标位置显示一行字符串*/
Printscore()函数
用到库函数:
setfillstyle(pattern,color);
/*设立填充模式和填充颜色*/
bar(left,top,right,bottom);
/*画矩形,并填充矩形内部区域*/用于分数底色*/
setcolor(6); /*用于分数底色*/
settextstyle(0,0,2);
sprintf(str,“score:
%d”,score);
/*把要输出字符转移给字符数组str(str要先定义)*/
outtextxy(55,20,str); /*输出分数*/
Gameplay()
{
食物及蛇状态初始化
Printscore()
while
(1)
{
while(bioskey
(1)==0)
{
判断与否需要浮现食物
蛇身、蛇头坐标变化
判断蛇与否撞击自己
判断蛇与否撞击墙壁
if(snake。
life==1)break;
判断蛇与否吃到食物
画出蛇,并使蛇运动
}/*endwhile(!
bioskey
(1))*/
监听方向键及ESC键
} /*endwhile
(1)*/
}
第七章调试及测试成果与分析
调试(debugging)是指去掉程序中错误(普通被称为bugs)过程。
一种错误也许非常简朴,例如拼错一种单词或者漏掉一种分号;也也许比较复杂,例如使用一种指向并不存在地址指针。
无论错误复杂限度如何,掌握对的调试办法都能使程序员受益匪浅。
运营贪食蛇程序时会有各种因素使它不能运营,这些因素可以分为如下4种基本类型:
(1)程序中有死循环;
(2)程序运营时间比所盼望长;
(3)程序在等待某些输入信息,并且直到输入对的后才会继续运营;
(4)程序设计目就是为了延迟一段时间,或者暂停执行。
在讨论了因未知因素而挂起程序调试技巧后,将逐个分析上述每种状况。
调试那些因未知因素而不能运营程序是非常困难。
也许耗费了很长时间编写一种程序,并努力保证每条代码都精确无误,也也许只是在一种本来运营良好程序上作了一种很小修改,然而,当运营程序时屏幕上却什么也没有显示。
有时能得到一种错误成果,或者某些成果,面对长长源代码,刚刚开始主线不懂得错在哪里。
在开始调试贪食蛇程序时,一方面检查一下程序构造,然后再按执行顺序依次查看程序各个某些,看看它们与否能对的运营。
在本次设计中,主程序包括3个函数调用——int()、draw()和gameplay(),在调试时,先检查函数int()与否把控制权返回给了主程序。
为此,在调用函数int()语句背面加上exit()命令,也可以用注释符把对函数draw()和gameplay()调用括起来,然后重新编译并运营这个程序。
注意:
通过调试程序(debugger)也可以做到这一点,然而上述办法是一种很老式调试办法。
调试程序是一种程序,它作用是让程序员可以观测程序运营状况、程序当前运营行号、变量值,等等。
此时将看到函数int()与否将控制权返回给了主程序——如果该程序运营并退出,可以判断是程序其他某些使程序挂起。
可以用这种办法测试程序每一某些,直到发现使程序挂起那一某些,然后集中精力修改相应函数。
有时,状况会更复杂某些。
例如,使程序挂起函数自身是完全正常,问题也许出在该函数从别地方得到了某些错误数据。
这时,你就要检查该函数所接受所有值,并找出是哪些值导致了错误操作。
本次设计运营程序浮现过死循环现象,机器将无多次地执行同一段代码。
这是由于程序进行循环判断条件永远为真,或者使程序退出循环判断条件永远为假。
修改判断条件后即对的运营。
在调试游戏速度时候,曾经一运营程序画面就直接跳至“gameover”,通过带入法测试,发现是运营速度数值给过小,加大数值后逐运营正常。
技巧:
监视函数是调试程序出众功能之一。
尚有就是带入法,用于判断某某些函数逻辑对错。
第八章结论
在刚刚拿到课程设计题目时候,原本觉得贪食蛇这样一款已经进一步人心老游戏会比较容易做,但真正开始做时候才发现不是那么简朴。
在编码时候遇到了不少困难,其中有粗心导致输入错误,也有程序逻辑上浮现错误。
自己知识局限性,也给编程带来了不小阻碍。
但是,当端正了态度后来,通过认真细致分析、学习,在最后顺利完毕了课程设计。
在本次课程设计中,我从指引教师身上学到了诸多东西。
教师认真负责工作态度,严谨治学精神和深厚理论水平都使我收益匪浅。
她无论在理论上还是在实践中,都给与我很大协助,使我得到不少提高这对于我后来工作和学习均有一种巨大协助,感谢她耐心辅导。
此外,在游戏开发过程中廖远教师也给于我很大协助,协助解决了不少难点,还帮我提出了不少好建议,使得游戏能及时开发完毕,尚有所有同窗同样给与我不少协助,这里一并表达感。
参照文献
[1]黄明等。
21世纪进阶辅导C语言程序设计[M]。
大连理工大学出版社,
[2]马