《面向对象编程技术》课程设计实验报告

上传人:第*** 文档编号:61574955 上传时间:2018-12-04 格式:DOC 页数:22 大小:2.14MB
返回 下载 相关 举报
《面向对象编程技术》课程设计实验报告_第1页
第1页 / 共22页
《面向对象编程技术》课程设计实验报告_第2页
第2页 / 共22页
《面向对象编程技术》课程设计实验报告_第3页
第3页 / 共22页
《面向对象编程技术》课程设计实验报告_第4页
第4页 / 共22页
《面向对象编程技术》课程设计实验报告_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《《面向对象编程技术》课程设计实验报告》由会员分享,可在线阅读,更多相关《《面向对象编程技术》课程设计实验报告(22页珍藏版)》请在金锄头文库上搜索。

1、面向对象的编程技术课程设计实验报告 系计算机科学与技术 班级计114 姓名石险峰 学号119074122 指导教师胡增涛计算机学院2012年12月一应用程序的名称设计:“坦克大战” (1) 参考(PC游戏编程(窥门篇)谭文洪著)中的“坦克大战”(TankWar工程),并对其进行完善、扩充,程序要能看出专业水平和商业化产品的效果。(2) 要求:修改案例中“子弹可以穿透石头墙”的错误;增加上帝模式(无敌);修改一种敌军坦克,使之威力更大(要求坦克画面采用学生自己的头像)(需要重新编译资源包;之所以“改”而不是“增”,是因为同学们无法修改地图编辑器,另一个办法是在程序运行后动态加入);回答 “坦克大

2、战”指导书.doc(或pdf) 和 TankWar剖析.doc(或pdf)中带有蓝色.?标记的问题。二.应用程序的设计目的面向对象的编程技术课程设计是一门独立开设的实验课程,旨在进一步强化学生对类、封装、继承、多态等面向对象基本概念的理解和OOP(面向对象编程)实际动手能力,并进一步拓展到OOD(面向对象设计)原则、技巧和初步的OOA(面向对象分析)方法。在中国,电子游戏曾一度被大家斥为“电子海洛因”。然而电子游戏在青年学生中大受欢迎却又是一个不争的事实。正如水能载舟,亦能覆舟一样,任何事物都有其两面性。与其千方百计地封堵,还不如让同学们从技术的角度来研究它,这样既可以掌握复杂系统的设计技巧,

3、也可以破除对电子游戏的神秘感。我相信,一个人如果自己能制作游戏,如果能清楚地知道那个绚丽多彩的虚拟世界背后无非就是一些类、变量、函数的话,他就不可能再沉迷于打游戏与一堆对象、内存变量和函数较劲。同时,从技术上讲,游戏程序的开发异常复杂,能充分体现面向对象的拟人化思想和面向对象设计技巧。通过游戏程序的制作,可以帮助学生真正掌握面向对象程序设计的精髓。 3 应用程序简介设计目的:C+电脑游戏开发:侧重利用面向对象的拟人化思想解决复杂问题和OOD技巧;运行环境:1本设计采用Microsoft Visual C+6.0编译,并能够在WIN98,WIN2000下运行2游戏基于Windows Game E

4、ngine(WGE游戏引擎,添翼虎科技)(没提供源程序,不过不用担心,你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库) ,该引擎需要DirectX7.0 SDK支持(仅有Runtime运行库不够,必须包含开发语言需要的Header&Libs 头文件和库文件)功能介绍:修改案例中“子弹可以穿透石头墙”而且增加了敌军坦克子弹不能穿过箱子:无论是敌军坦克还是玩家坦克的子弹都不能穿过石头,敌军坦克子弹不能透过箱子,一旦它们相碰撞子弹会自动销毁。增加上帝模式(无敌):玩家1通过按F1键变为上帝模式,再按一次,还原,一旦玩家进入上帝模式,敌军坦克的子弹对玩家坦克没任何损伤。修改火坦克的性

5、能,使之威力更大,并且将该敌军坦克改为其他图像,通过更改火坦克的一些属性,使火坦克的子弹射程、威力,坦克的移动速度、硬度(血量),都有了明显的增加。 2、基本内容:坦克大战主要是玩家坦克与敌军坦克之间的斗争,在许多敌军坦克的包围下,玩家坦克通过消灭一部分坦克,打开通完邪恶源的通道,然后摧毁邪恶源获得闯关的胜利。在这个过程中,玩家可以摧毁木箱,在木箱中获得钱、经验、血量,通过这些使得玩家坦克的威力和防御更强,为最终的胜利获得条件。在玩家坦克消灭敌军坦克时,将获得经验,当经验达到一定程度时,玩家坦克的性能将会变得更强,可以从青铜坦克变为白银、黄金坦克,大致情况如下:剧情:“玩家坦克”打掉“邪恶源”

6、即可过关。(共3关,可循环玩)游戏规则:1) 玩家坦克移动:4个方向箭头,和W、S、A、D,“机动力”由升级次数决定型号:“青铜战士”,“白银战士”,“黄金战士”防护:由“经验值(打掉木箱,捡)”决定“最大防护值”,捡恢复物品可提高当前防护值武器:左ctrl和Enter开火,只有“光弹”(匀速),“射程”由型号决定,“破坏力”由“金钱数(捡)”决定2) 敌军坦克总之有3种:双导弹、单导弹、火坦克,性能各有所长。3)“邪恶源” 防护值很大4) 木箱5) 奖励物品恢复、金钱、升级6) 背景地图草地、泥地、白石头、黑石头、白石高地(地形障碍)3、主要技术、WGE游戏引擎的使用坦克大战(TankWar

7、)的实现、C+面向对象技术4、运行环境本设计采用Microsoft Visual C+6.0编译,并能够在WIN98,WIN2000,WINXP,WIN7下运行游戏基于Windows Game Engine(WGE游戏引擎,添翼虎科技)(你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库) ,该引擎需要DirectX7.0 SDK支持(仅有Runtime运行库不够,必须包含开发语言需要的Header&Libs 头文件和库文件)应用程序的总体设计结构图坦克玩家坦克敌军坦克 奖励(金钱、经验、血) 邪恶源 通往下一关TObjectTBonus TSpriteTObstacleTExp

8、ledo TBulletTEnemyTankTPlayerTankTLinkTLinkNodeTWrold游戏开始进入游戏无敌模式受到火坦克攻击后,上下血量不减爆炸模式敌军全灭。跳关模式直接进入下一关任务完成进入下一关:修改坦克图片,并使其中一种坦克威力增强。换子弹模式:在修改子弹穿墙错误中,我也产生过一些问题,例如:子弹是怎样来实现和改变自己发射的方向的。通过对TEnemyTank类中Move函数的观察,我有了一些认识:敌军坦克的移动和方向的改变和子弹应该是类似的。我对TBullet类中的Move函数进行了修改很增添:/判断是否穿墙/ 、直接对子弹四个方向上的边角修改,使子弹消失。if(g_

9、world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT)Dead(); if(g_world.ObstacleMap(rc.right/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT)Dead();if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.bottom/OBSTACLE_HEIGHT)Dead(); if(g_world.ObstacleMap(rc.right/OBSTACLE_WIDTH,rc.bottom/OBSTACLE_HEIGH

10、T)Dead();if(g_world.ObstacleMap(rc.right/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT)Dead(); if(g_world.ObstacleMap(rc.right/OBSTACLE_WIDTH,rc.bottom/OBSTACLE_HEIGHT)Dead();if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT)Dead(); if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.bottom/

11、OBSTACLE_HEIGHT)Dead();这些代码是在TBullet类中的/取得碰撞矩形void TBullet:GetRect(RECT& rc)函数中添加的,在判断子弹能否穿墙与敌军坦克是否碰到障碍物有一点区别,坦克在碰到障碍物时,应该设置不能继续移动的效果,而子弹在碰到物体后得效果不应该是不能继续移动而是立刻消失,所以当有与地形障碍相碰时,全部改为Dead(),在作为判断子弹是否与障碍物碰撞的代码,这样子弹不能穿墙的效果就成功实现了。/增加上帝模式(无敌)。/我是通过增加按钮来改变玩家的模式:我首先在TTank/TPlayerTank/玩家坦克类中定义了一个私有成员private:

12、static int N;根据N%2的值是1还是0来判断玩家是否设置为无敌状态了,我设置了F1为玩家无敌状态的快捷键,在Move里增加以下代码/玩家坦克移动int TPlayerTank:N=0;/给上帝赋初始值void TPlayerTank:Move()if(WGE_Input.Key()DIK_F1) N+;/增加上帝模式在判断子弹与玩家坦克碰撞是否有效里加:/增加无敌模式/if(N%2=1) return TRUE;else if(N%2=0)m_nShield-=pBullet-m_nShield ;return TRUE;但也出现一个问题,在按F1时有时候会发现上帝模式没有出现,有

13、时需要多按几次。/修改图片/这里比较简单,直接自己做一个图片,四个图层,四个方向的,用psd格式,再用PSD2EPG.EXE转换一个epg格式,放入data文件里替换某一种坦克,将图片名字改成相同的,再将工具三个全放入data里,用makeres.bat打包即可/增加爆炸模式,所有坦克全灭/本来想法是想在地图上读取坦克,然后灭了,后来觉得利用坦克链表比较简单就直接使用了。在敌军坦克移动里增加爆炸代码,使敌军所有坦克全灭敌军坦克移动void TEnemyTank:Move() if(WGE_Input.Key()DIK_F2)/增加爆炸模式,所有坦克全灭TLinkNode * pNode=g_world.EnemyTankLink().m_pHeader;while(pNode)/还不到链尾pNode =pNode-m_pNext;m_nShield=-1;if(m_nShield m_nExper += 10 + m_nType * 10;/加点爆炸效果g_world.ExplodeLink().Add(NEW TExplode(m_nX,m_nY,EXPLODE_TANK);/增加正向跳关模式/这个比较简单,只需在障碍物文件加入代码if(WGE_Input.Key()DIK_F3)/跳关模式

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号