西安科技大学软件工程课程设计方案之增强版坦克大战.docx
- 文档编号:18658809
- 上传时间:2023-08-24
- 格式:DOCX
- 页数:32
- 大小:1.18MB
西安科技大学软件工程课程设计方案之增强版坦克大战.docx
《西安科技大学软件工程课程设计方案之增强版坦克大战.docx》由会员分享,可在线阅读,更多相关《西安科技大学软件工程课程设计方案之增强版坦克大战.docx(32页珍藏版)》请在冰点文库上搜索。
西安科技大学软件工程课程设计方案之增强版坦克大战
西安科技大学
软件工程课程设计报告
题目:
增强版坦克大战
班级:
0904
学号:
0908030416
姓名:
2012年7月
目录
1绪论4矚慫润厲钐瘗睞枥庑赖。
1.1选题目的及意义4聞創沟燴鐺險爱氇谴净。
1.2系统概述4残骛楼諍锩瀨濟溆塹籟。
2可行性研究报告5酽锕极額閉镇桧猪訣锥。
2.1系统分析5彈贸摄尔霁毙攬砖卤庑。
2.1.1系统流程图5謀荞抟箧飆鐸怼类蒋薔。
2.1.2数据流图5厦礴恳蹒骈時盡继價骚。
2.1.3数据字典8茕桢广鳓鯡选块网羈泪。
2.2经济可行性8鹅娅尽損鹌惨歷茏鴛賴。
2.3技术可行性8籟丛妈羥为贍偾蛏练淨。
2.4操作可行性9預頌圣鉉儐歲龈讶骅籴。
3需求规格说明书9渗釤呛俨匀谔鱉调硯錦。
3.1功能需求9铙誅卧泻噦圣骋贶頂廡。
3.2性能需求9擁締凤袜备訊顎轮烂蔷。
3.3可靠性和可用性需求9贓熱俣阃歲匱阊邺镓騷。
3.4出错处理需求9坛摶乡囂忏蒌鍥铃氈淚。
3.5接口需求10蜡變黲癟報伥铉锚鈰赘。
3.5.1用户接口需求10買鲷鴯譖昙膚遙闫撷凄。
3.5.2软件接口需求10綾镝鯛駕櫬鹕踪韦辚糴。
3.6约束10驅踬髏彦浃绥譎饴憂锦。
3.7逆向需求11猫虿驢绘燈鮒诛髅貺庑。
3.8将来可能提出的需求11锹籁饗迳琐筆襖鸥娅薔。
4总体设计说明书11構氽頑黉碩饨荠龈话骛。
4.1系统说明11輒峄陽檉簖疖網儂號泶。
4.1.1系统流程图11尧侧閆繭絳闕绚勵蜆贅。
4.1.2成本/效益分析12识饒鎂錕缢灩筧嚌俨淒。
4.1.3实现系统的进度计划12凍鈹鋨劳臘锴痫婦胫籴。
4.1.4软件结构图13恥諤銪灭萦欢煬鞏鹜錦。
4.1.5IPO表14鯊腎鑰诎褳鉀沩懼統庫。
4.2用户手册16硕癘鄴颃诌攆檸攜驤蔹。
4.3测试计划16阌擻輳嬪諫迁择楨秘騖。
4.4实现计划16氬嚕躑竄贸恳彈瀘颔澩。
5详细设计说明书16釷鹆資贏車贖孙滅獅赘。
5.1界面设计16怂阐譜鯪迳導嘯畫長凉。
5.2出错信息处理17谚辞調担鈧谄动禪泻類。
5.3程序流程图17嘰觐詿缧铴嗫偽純铪锩。
5.4程序复杂度18熒绐譏钲鏌觶鷹緇機库。
6系统实现18鶼渍螻偉阅劍鲰腎邏蘞。
6.1开发环境18纣忧蔣氳頑莶驅藥悯骛。
6.2关键技术18颖刍莖蛺饽亿顿裊赔泷。
6.2.1图像透明显示18濫驂膽閉驟羥闈詔寢賻。
6.2.2碰撞检测18銚銻縵哜鳗鸿锓謎諏涼。
6.2.3实现子画面动画18挤貼綬电麥结鈺贖哓类。
6.2.4物理运动19赔荊紳谘侖驟辽輩袜錈。
6.2.5爆炸效果19塤礙籟馐决穩賽釙冊庫。
6.2.6简单的AI20裊樣祕廬廂颤谚鍘羋蔺。
6.2.7子画面创建子画面21仓嫗盤紲嘱珑詁鍬齊驁。
6.2.8滚动背景21绽萬璉轆娛閬蛏鬮绾瀧。
6.3运行结果22骁顾燁鶚巯瀆蕪領鲡赙。
7测试分析报告23瑣钋濺暧惲锟缟馭篩凉。
参考文献27鎦诗涇艳损楼紲鯗餳類。
1绪论
1.1选题目的及意义
当下的学生们都比较喜欢玩游戏,随着玩游戏时间的增加,部分学生们便产生了自己编写游戏的念头。
所谓万丈高楼平地起,所以开发游戏要从基本技术开始练习,由于2D游戏开发较易学习和掌握,本学期,我阅读了一些关于2D游戏编程方面的书籍。
学习了一些游戏编程的基本技术,为了对所学内容进行实际练习,增强游戏编程的能力与问题分析的能力。
于是我决定开发一款2D游戏软件。
由于本人对当年非常火热的红白机上的经典游戏比较着迷,比如坦克大战,沙罗曼蛇,采金子,1945等。
所以我产生了重写这些经典游戏的想法。
这些游戏都属于2D游戏,而且涉及的基本游戏编程技术大都相同。
比如游戏子画面的管理,背景的滚动,游戏事件处理,分层图像绘制,简单的人工智能使用等。
而我这次开发的目的是练习相关技术,所以选择了重写坦克大战这款经典的红白机游戏,并对原版经典游戏在界面上和操作上进行了一定的改进从而达到练习以上技术的目的。
栉缏歐锄棗鈕种鵑瑶锬。
1.2系统概述
本系统属于游戏娱乐类型。
游戏中玩家控制一辆黄色坦克,通过方向键控制自己的坦克移动,其中玩家坦克可以进行屏幕环绕。
玩家通过空格键发射子弹。
游戏过程中会在随机位置生成敌方坦克,为了增加游戏难度我将敌方坦克发射的子弹设置为随机模式,即在随机的位置上产生子弹。
当玩家的被敌方坦克发生的子弹击中,或者与敌方坦克相撞则玩家死亡游戏结束。
当玩家坦克发射的子弹击中敌军坦克则敌军坦克爆破。
当敌军坦克相撞时则为二者交换速度。
其中为了增加趣味性还增加了一些音乐效果,比如爆炸声音,发生子弹的声音等。
辔烨棟剛殓攬瑤丽阄应。
2可行性研究报告
2.1系统分析
2.1.1系统流程图
2.1.2数据流图
峴扬斕滾澗辐滠兴渙藺。
詩叁撻訥烬忧毀厉鋨骜。
则鯤愜韋瘓賈晖园栋泷。
胀鏝彈奥秘孫戶孪钇賻。
2.1.3数据字典
名字:
子画面信息
别名:
SpriteInformation
描述:
与子画面有关的相关参数集合
定义:
子画面信息=位置+边界矩形+碰撞矩形+子画面速度+Z轴顺序
位置=X坐标+Y坐标
边界矩形=子画面的左上X坐标Y坐标
+子画面的右下上X坐标Y坐标
碰撞矩形=边界矩形
X坐标=整型数值
Y坐标=整型数值
子画面速度=在X轴和Y轴上单位时间移动的距离
Z轴顺序=绘制子画面的先后顺序,以无符号整型数值表示
位置:
子画面管理
名字:
按键信息
别名:
虚拟键码
描述:
标识所按下的键盘按键
定义:
虚拟键码=VK+下划线+英文单词
位置:
按键处理
鳃躋峽祷紉诵帮废掃減。
名字:
控制信息
别名:
Controlinformation
描述:
布尔型数据,用来标识状态
定义:
布尔型数据=[true|false]
位置:
游戏循环控制
稟虛嬪赈维哜妝扩踴粜。
2.2经济可行性
本系统设计的代码量大约为2000行左右,由于开发本系统主要由我本人独立完成,不涉及雇佣其它人员所需花费。
而且该系统主要是面向课程设计,开发周期短,其中的开发消耗主要是本人日常起居所需的花费。
因此据我的估计单行代码的开发编写费用为0.05元。
(计算方法为开发阶段在校园内的开销除以代码总行数)。
因此总的开发费用不会超过50元。
由于校园中衣食住行等开销相对较低加之本人平日以来勤俭节约所以经济上完全可行。
陽簍埡鲑罷規呜旧岿錟。
2.3技术可行性
开发本系统所基于的平台为WindowsXP,所使用的开发语言为C++,通过系统调用(Win32API),实现主要的游戏功能。
开发该系统涉及到的主要技术C++基础语法知识,Win32API的使用,键盘控制,游戏子画面处理,碰撞检测,音效播放,游戏背景处理,简单的游戏AI,游戏流程控制等技术。
由于本人在前期的自学中已经熟练掌握这些基本技术,而且经过了一定的练习。
所以从技术角度来讲没有任何问题。
沩氣嘮戇苌鑿鑿槠谔應。
2.4操作可行性
本系统在使用过程中完全通过键盘操作。
由于当前很多2D游戏都是以此种模式进行控制,所以万家对此模式十分熟悉不存在适应上的问题。
加之本系统设计的键盘按键很少,所以记忆难度大大降低,极为容易上手。
综合以上因素得出此种操作模式完全行得通。
因此操作可行。
钡嵐縣緱虜荣产涛團蔺。
3需求规格说明书
3.1功能需求
坦克大战是一款经典的游戏,游戏的过程是玩家可以通过键盘控制坦克的移动,并能够发射子弹消灭屏幕上出现在随机位置上的坦克,当玩家的坦克与敌人的坦克或者是敌人坦克发出的子弹相撞则玩家输掉游戏,游戏结束。
反之当玩家消灭了所有敌人的坦克后则玩家获胜。
同时要求游戏中能对各个对象的碰撞做出正常的处理。
还有使得游戏画面较为流畅。
懨俠劑鈍触乐鹇烬觶騮。
3.2性能需求
最低磁盘容量:
1G
CPU最低主频:
64MHZ
最低主存容量:
128M
3.3可靠性和可用性需求
游戏能够正常地运行,并且正常的对画面进行处理。
能够正确地响应键盘消息。
并且对于屏幕中的画面过多时可以流畅的显示,并保证有一定的错误处理功能。
謾饱兗争詣繚鮐癞别瀘。
3.4出错处理需求
当程序因为平台原因初始化失败以及相关API在其它的Windows平台下无法使用导致程序无法正常运行时,应给予玩家相关的提示,告知失败的其原因是因为与游戏运行的平台有关。
呙铉們欤谦鸪饺竞荡赚。
3.5接口需求
3.5.1用户接口需求
响应用户的方向键按键,应将方向键按键转换为坦克在对应方向上的行进速度。
响应用户的回车按键,以便正常开始游戏。
3.5.2软件接口需求
图形加载应将位图正常加载并保存位图句柄
Create(LPTSTRszFileName)
szFileName为位图文件名
图形绘制模块应根据传送的图形信息将图形绘制在屏幕上,格式为:
Draw(HDChDC,intx,inty,BOOLtrans,COLORREFcrTransColor)莹谐龌蕲賞组靄绉嚴减。
hDC设备环境句柄,x,y为图像横坐标和纵坐标,trans是否绘制透明图形
crTransColor指定透明颜色
子画面添加应将子画面正确添加到子画面列表中
AddSprite(Sprite*pSprite)
pSprite为子画面对象指针
碰撞检测应对当前的子画面与子画面列表中的子画面逐个进行碰撞检测
CheckSpriteCollision(Sprite*pTestSprite)
Sprite*pTestSprite要检测的子画面指针
子画面信息控制应根据子画面类中的子画面信息正确的改变子画面的位置等信息。
3.6约束
程序需要在windows平台下才可正常运行。
3.7逆向需求
该程序属于纯键盘操控,因此游戏无需对非键盘事件做出响应。
3.8将来可能提出的需求
1.敌军坦克具有更高的智能。
2.炫目的游戏效果。
3.游戏杆控制接口。
4.网络联机游戏功能。
5.多人游戏玩家交互功能。
4总体设计说明书
4.1系统说明
在前期分析过程中所得到的结果为较合理方案,因此得出如下结果。
4.1.1系统流程图
4.1.2成本/效益分析
由代码行技术估算。
因为经我的分析单行代码的开发编写费用为0.05元。
代码总行数大约为2000行,因此总的开发费用不会超过50元。
麸肃鹏镟轿騍镣缚縟糶。
本项目面向课程设计,不涉及任何经济收益问题。
4.1.3实现系统的进度计划
第一工作日:
可行性研究,并编写相关文档。
第二工作日:
总体设计,并编写相关文档。
第三工作日:
详细设计。
第四工作日:
系统实现
第五工作日:
系统实现。
第六工作日:
系统测试。
第七工作日:
系统测试。
4.1.4软件结构图
4.1.5IPO表
納畴鳗吶鄖禎銣腻鰲锬。
風撵鲔貓铁频钙蓟纠庙。
灭嗳骇諗鋅猎輛觏馊藹。
铹鸝饷飾镡閌赀诨癱骝。
4.2用户手册
方向键控制坦克的移动
上:
向上移动
下:
向下移动
左:
向左移动
右:
向右移动
ESC:
推出游戏
Enter:
游戏开始
Space(空格键):
发射子弹
4.3测试计划
对系统进行白盒测试与黑盒测试。
并进行模块测试与系统测试。
4.4实现计划
第一工作日:
可行性研究,并编写相关文档。
第二工作日:
总体设计,并编写相关文档。
第三工作日:
详细设计。
第四工作日:
系统实现
第五工作日:
系统实现。
第六工作日:
系统测试。
第七工作日:
系统测试。
5详细设计说明书
5.1界面设计
本游戏分为三个界面:
游戏开始界面,游戏进行界面、游戏结束界面;
在界面更新上为每秒25贞从而达到较为流畅的效果。
5.2出错信息处理
玩家错误,在开始界面时不满足输入规则发生错误,按Enter键开始游戏,其它无效;运行时错误,游戏界面交互时,由于本游戏较稳定,基本不会崩溃,而且有各种游戏提示。
攙閿频嵘陣澇諗谴隴泸。
5.3程序流程图
5.4程序复杂度
复杂度=E-N+2=17-11+2=8
6系统实现
6.1开发环境
WindowsXPsp3
CPUIntelB9402.00GHZ
VC++6.0SP6
图像编辑器,MSPAINT
6.2关键技术
6.2.1图像透明显示
使位图可以透明显示主要使用的是TransparentBlt函数,通过设置函数中的参数“透明色”来实现透明效果。
趕輾雏纨颗锊讨跃满賺。
6.2.2碰撞检测
对子画面设置一个矩形区域,通过判断矩形区域是否重叠来判断子画面是否发生碰撞。
6.2.3实现子画面动画
动画子画面需要包括
1.总贞数
2.当前贞
3.贞延迟
4.贞触发器
实现动画效果即制作一张联系图片然后逐个显示每个图片,这样在一定的速度下就产生了动画效果。
6.2.4物理运动
匀速运动:
物体运动时候对于2D上的物体而言,其速度为X轴分量与Y轴分量的和速度。
匀速运动各分量时刻不变,2D上的匀速运动在每次更新画面时,利用物体速度分量Vx,Vy的值来计算下次物体出现的位置,产生移动效果。
计算公式如下:
夹覡闾辁駁档驀迁锬減。
下一刻X位置=现在X位置+X轴速度分量
下一刻Y位置=现在Y位置+Y轴速度分量
加速运动:
表达式V=Vo+At
Vx1=Vxo+Ax(x方向加速度)
Vy1=Vyo+Ay(y方向加速度)
在求出物体下一刻的移动速度后,便可依此再去推算出加入加速度后,物体下一刻所在位置的公式为:
Sx1=Sxo+Vx1
Sy1=Syo+Vy1
6.2.5爆炸效果
爆炸子画面必须循环显示其动画贞,然后立即消失。
需要解决的问题是:
可以在游戏代码中删除一个子画面,即所需要实现的内容是允许子画面在一个周期中实现动画,然后消失。
通过增加新变量BOOLm_bDying;BOOLm_bOneCyle;。
来进行判断是否该删除图像。
视絀镘鸸鲚鐘脑钧欖粝。
m_bDying成员变量确定一个子画面是否被标记为将要删除。
换句话说,普通子画面的m_bDying设置为false,将要删除的设置为true.使用该变量的优点是它允许只需要将这个变量设置为true即可随时删除一个字画面。
偽澀锟攢鴛擋緬铹鈞錠。
6.2.6简单的AI
漫游AI是指模拟游戏对象的移动,即游戏对象作出在虚拟的世界中如何漫游的决定。
例如游戏中敌军追逐玩家。
实现漫游AI很容易,它通常需要根据一个对象的位置来改变另一个对象的速度或位置。
对象漫游移动还会受到随机模式或预定模式的影响。
緦徑铫膾龋轿级镗挢廟。
存在三种基本的漫游AI:
追逐逃避和有模式漫游AI
1追逐AI:
一个对象跟踪并追逐另一个或多个游戏对象。
例:
If(iXAlian>iXShip)
iXAlien--;
elseif(iXAlien iXAlien++; if(iYAlien>iYShip) iYAlien--; elseif(iYAlien iYAlien++; 缺点: 致使敌军过于强大可以轻易追上玩家所以添加一些随机因素这些随即因素可以自行更改 If((rand()%3)==0) If(iXAlian>iXShip) iXAlien--; elseif(iXAlien iXAlien++; if(iYAlien>iYShip) iYAlien--; elseif(iYAlien iYAlien++; 2逃避 算法与追逐思路一致 3有模式移动 通过一组预定义的移动的漫游AI 模式通常为一个预定义的行为 如intiZigZag[2][2]={{3,2},{-3,2}}; iXAlien+=iZigZag[iPatternStep][0]; iYAlien+=iZigZag[iPatternStep][1]; 对象以之字形移动. 行为AI: 预先设定一组行为当产生某种行为时执行相应的动作。 intiBehavior=abs(rand()%100); if(iBehavior<50) //追逐 elseif(iBehavior<90) //以某种模式移动 else //随机移动 6.2.7子画面创建子画面 坦克子画面发射导弹就属于此问题。 子画面动作用来通知游戏引擎必须对一个子画采取某种特定的动作SA_ADDSPRITE动作只是导致在应用动作的Sprite对象上调用一个特殊方法。 这个方法名为AddSprite()VirtualSprite*AddSprite();调用该方法向游戏引擎添加一个新的子画面。 该方法返回新创建的子画面的指针。 新子画面的具体情况完全取决于各个不同的游戏。 此方法是给给电脑子画面添加子画面用的。 而玩家子画面要创建子画面在按键盘时就可以创建了。 騅憑钶銘侥张礫阵轸蔼。 基类的该方法只是返回一个NULL子画面指针。 意思说更多功能由派生留给派生的类去完成。 因此需要派生类来完成该方法并重写。 SA_ADDSPRITE动作和AddSprite()方法在游戏引擎UpdateSprite()方法中输入图片,UpdateSprite()必须检查SA_ADDSPRITE子画面动作是否存在.若设置了此动作则在子画面上调用AddSprite()方法。 并将返回值传给游戏引擎的AddSprite()方法,然后将子画面插入子画面列表中。 因此开篇所需要的功能就可以实现了。 疠骐錾农剎貯狱颢幗騮。 6.2.8滚动背景 滚动背景的工作原理: 横向和纵向的滚动其实就是图像的环绕。 所以图像的两侧必须进行良好的设计,以便完美结合在一起。 视口的理解: 好像望远镜提供了一个太空的视图,视口也提供了背景图像的一个视图。 所以滚动背景可以理解为移动视口。 镞锊过润启婭澗骆讕瀘。 背景可以任意大,视口提供了查看大背景的一个特定的部分的方法。 6.3运行结果 7测试分析报告 功能描述 测试坦克的移动 用例目的 功能是否相应实现 前提条件 游戏已开始 输入/动作 期望输出/相应 实际情况 按方向键"→"键 向右移动 与期望结果一致 按方向键"←"键 向左移动 与期望结果一致 按方向键"↑"键 向上移动 与期望结果一致 按方向键"↓"键 向下移动 与期望结果一致 除了空格键、Enter键和Esc键外的数字键和字母键 屏幕无反应 与期望结果一致 黑盒测试 白盒测试: 键盘控制相关代码 if(GetAsyncKeyState(VK_LEFT)<0) {……….. } elseif(GetAsyncKeyState(VK_RIGHT)<0) {……….. } elseif(GetAsyncKeyState(VK_UP)<0) {……….. } elseif(GetAsyncKeyState(VK_DOWN)<0) {………… } else { ………….. } 采用语句覆盖测试 测试用例为 方向按键: 上下左右 位置更新模块相关代码 if(m_baBoundsAction==1)//环绕动作,即从上到下,从左到右环绕 { if((ptNewPosition.x+ptSpriteSize.x) {……………. } elseif(ptNewPosition.x>m_rcBounds.right) {…………….. } if((ptNewPosition.y+ptSpriteSize.y) {…………….. } elseif(ptNewPosition.y>m_rcBounds.bottom) {…………….. } } elseif(m_baBoundsAction==2)//反弹动作 { if(ptNewPosition.x { }//子画面的最右边已经超出了右边界+ptSpriteSize.x elseif((ptNewPosition.x+ptSpriteSize.x)>m_rcBounds.right)嵝硖贪塒廩袞悯倉華糲。 { }//上边界 if(ptNewPosition.y { }//下边界+ptSpriteSize.y elseif((ptNewPosition.y+ptSpriteSize.y)>m_rcBounds.bottom)该栎谖碼戆沖巋鳧薩锭。 { } if(bBounce) { } } elseif(m_baBoundsAction==3)//碰到边界需要撤销该子画面 { if((ptNewPosition.x) ptNewPosition.x+ptSpriteSize.x>m_rcBounds.right||劇妆诨貰攖苹埘呂仑庙。 (ptNewPosition.y) ptNewPosition.y+ptSpriteSize.y>m_rcBounds.bottom)臠龍讹驄桠业變墊罗蘄。 {//ptNewPosition.y+ptSpriteSize.y return0x0001L; } } 测试用例 m_baBoundsAction=1ptNewPosition.x+ptSpriteSize.x m_baBoundsAction=1ptNewPosition.x>m_rcBounds.right穑釓虚绺滟鳗絲懷紓泺。 m_baBoundsAction=1ptNewPosition.x+ptSpriteSize.x>m_rcBounds.left隶誆荧鉴獫纲鴣攣駘賽。 m_baBoundsAction=1ptNewPosition.x m_baBoundsAction==2 ptNewPosition.x ptNewPosition
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 科技大学 软件工程 课程设计 方案 增强 坦克 大战