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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//玩家坦克移动
int TPlayerTank::N=0;//给上帝赋初始值
void TPlayerTank::Move()
{
if(WGE_Input.Key()[DIK_F1])
N++;//增加上帝模式
在判断子弹与玩家坦克碰撞是否有效里加:
//增加无敌模式//
if(N%2==1)
return TRUE;
///判断是否穿墙//////、、、、直接对子弹四个方向上的边角修改,使子弹消失。
if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT))
Dead();
if(g_world.ObstacleMap(rc.right/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT))
(2)要求:修改案例中“子弹可以穿透石头墙”的错误;增加上帝模式(无敌);修改一种敌军坦克,使之威力更大(要求坦克画面采用学生自己的头像)(需要重新编译资源包;之所以“改”而不是“增”,是因为同学们无法修改地图编辑器,另一个办法是在程序运行后动态加入);回答“坦克大战”指导书.doc(或pdf)和TankWar剖析.doc(或pdf)中带有蓝色《….?》标记的问题。
:TSprite(x,y,nShield,0,CLASS_TBULLET),bullet_type(p1)
跳关模式
直接进入下一关
任务完成
进入下一关:
修改坦克图片,并使其中一种坦克威力增强。
换子弹模式:
在修改子弹穿墙错误中,我也产生过一些问题,例如:子弹是怎样来实现和改变自己发射的方向的。通过对TEnemyTank类中Move函数的观察,我有了一些认识:敌军坦克的移动和方向的改变和子弹应该是类似的。
我对TBullet类中的Move函数进行了修改很增添:
elseif(N%2==0)m_nShield-=pBullet->m_nShield ;
return TRUE;
但也出现一个问题,在按F1时有时候会发现上帝模式没有出现,有时需要多按几次。
///修改图片///这里比较简单,直接自己做一个图片,四个图层,四个方向的,用psd格式,再用PSD2EPG.EXE转换一个epg格式,放入data文件里替换某一种坦克,将图片名字改成相同的,再将工具三个全放入data里,用makeres.bat打包即可
bullet_type=1;
if(WGE_Input.Key()[DIK_F5])
bullet_type=2;
if(WGE_Input.Key()[DIK_F6])
bullet_type=3;
if(WGE_Input.Key()[DIK_F7])
bullet_type=4;
enum BULLET_TYPE p=LIGHT;
{
TLinkNode * pNode=g_world.EnemyTankLink().m_pHeader;
while(pNode)//还不到链尾
{
pNode =pNode->m_pNext;
m_nShield=-1;
if(m_nShield < 0)
{
Dead();//玩家增加经验值
g_world.Player(0)->m_nExper += 10 + m_nType * 10;
2)敌军坦克
总之有3种:双导弹、单导弹、火坦克,性能各有所长。
3)“邪恶源”
防护值很大
4)木箱
5)奖励物品
恢复、金钱、升级
6)背景地图
草地、泥地、白石头、黑石头、白石高地(地形障碍)
3、主要技术
、WGE游戏引擎的使用—坦克大战(TankWar)的实现
、C++面向对象技术
4、运行环境
.本设计采用Microsoft Visual C++6.0编译,并能够在WIN98,WIN2000,WINXP,WIN7下运行
二.应用程序的设计目的
面向对象的编程技术》课程设计是一门独立开设的实验课程,旨在进一步强化学生对类、封装、继承、多态等面向对象基本概念的理解和OOP(面向对象编程)实际动手能力,并进一步拓展到OOD(面向对象设计)原则、技巧和初步的OOA(面向对象分析)方法。
在中国,电子游戏曾一度被大家斥为“电子海洛因”。然而电子游戏在青年学生中大受欢迎却又是一个不争的事实。正如水能载舟,亦能覆舟一样,任何事物都有其两面性。与其千方百计地封堵,还不如让同学们从技术的角度来研究它,这样既可以掌握复杂系统的设计技巧,也可以破除对电子游戏的神秘感。我相信,一个人如果自己能制作游戏,如果能清楚地知道那个绚丽多彩的虚拟世界背后无非就是一些类、变量、函数的话,他就不可能再沉迷于打游戏———与一堆对象、内存变量和函数较劲。同时,从技术上讲,游戏程序的开发异常复杂,能充分体现面向对象的拟人化思想和面向对象设计技巧。通过游戏程序的制作,可以帮助学生真正掌握面向对象程序设计的精髓。
Dead();
这些代码是在TBullet类中的
//取得碰撞矩形
void TBullet::GetRect(RECT& rc)函数中添加的,在判断子弹能否穿墙与敌军坦克是否碰到障碍物有一点区别,坦克在碰到障碍物时,应该设置不能继续移动的效果,而子弹在碰到物体后得效果不应该是不能继续移动而是立刻消失,所以当有与地形障碍相碰时,全部改为Dead(),在作为判断子弹是否与障碍物碰撞的代码,这样子弹不能穿墙的效果就成功实现了。
//加点爆炸效果g_world.ExplodeLink().Add(NEW TExplode(m_nX,m_nY,EXPLODE_TANK));
}
}
}
/////增加正向跳关模式////这个比较简单,只需在障碍物文件加入代码
if(WGE_Input.Key()[DIK_F3])//跳关模式
{
g_game_status = GAME_STAGECLEAR;
上式调用函数为自己改的子弹构造函数
TBullet(int x,int y,DIRECTION dir1,int p1,int nShield=10,int nFireRange1=100);
构造函数为
TBullet::TBullet(int x,int y,DIRECTION dir1,int p1,int nShield,int nFireRange1)
坦克
玩家坦克
敌军坦克
奖励(金钱、经验、血)
邪恶源
通往下一关
TObject
TBonus
TSprite
TObstacle
TExpledo
TBullet
TEnemyTank
TPlayerTank
TLink
TLinkNode
TWrold
游戏开始
进入游戏
无敌模式
受到火坦克攻击后,上下血量不减
爆炸模式
敌军全灭。
.游戏基于Windows Game Engine(WGE游戏引擎,添翼虎科技)(你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库),该引擎需要DirectX7.0SDK支持(仅有Runtime运行库不够,必须包含开发语言需要的Header&Libs头文件和库文件)
应用程序的总体设计结构图
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))
Deaቤተ መጻሕፍቲ ባይዱ();
if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.top/OBSTACLE_HEIGHT))
Dead();
if(g_world.ObstacleMap(rc.left/OBSTACLE_WIDTH,rc.bottom/OBSTACLE_HEIGHT))
《面向对象的编程技术》课程设计实验报告
系计算机科学与技术
班级计114
姓名石险峰
学号119074122
指导教师胡增涛
计算机学院
2012年12月
一.应用程序的名称
设计:“坦克大战”
(1)参考(《PC游戏编程(窥门篇)》谭文洪著)中的“坦克大战”(TankWar工程),并对其进行完善、扩充,程序要能看出专业水平和商业化产品的效果。
修改火坦克的性能,使之威力更大,并且将该敌军坦克改为其他图像,通过更改火坦克的一些属性,使火坦克的子弹射程、威力,坦克的移动速度、硬度(血量),都有了明显的增加。
2、基本内容:坦克大战主要是玩家坦克与敌军坦克之间的斗争,在许多敌军坦克的包围下,玩家坦克通过消灭一部分坦克,打开通完邪恶源的通道,然后摧毁邪恶源获得闯关的胜利。在这个过程中,玩家可以摧毁木箱,在木箱中获得钱、经验、血量,通过这些使得玩家坦克的威力和防御更强,为最终的胜利获得条件。在玩家坦克消灭敌军坦克时,将获得经验,当经验达到一定程度时,玩家坦克的性能将会变得更强,可以从青铜坦克变为白银、黄金坦克,大致情况如下:
////增加爆炸模式,所有坦克全灭//////
本来想法是想在地图上读取坦克,然后灭了,后来觉得利用坦克链表比较简单就直接使用了。
在敌军坦克移动里增加爆炸代码,使敌军所有坦克全灭
敌军坦克移动
void TEnemyTank::Move()
{
if(WGE_Input.Key()[DIK_F2])//增加爆炸模式,所有坦克全灭
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_HEIGHT))
}
/////子弹转换////
设置F4F5F6F7分别为光弹火弹双导弹单导弹,本来我以为仅仅只需要改变调用时的函数就可以了,后来做的时候发现做这个有点难。这里简略说一下
现在玩家坦克里定义,int bullet_type;//自定义玩家子弹类型
然后对按键处理if(WGE_Input.Key()[DIK_F4])
3.应用程序简介
设计目的:C++电脑游戏开发:侧重利用面向对象的拟人化思想解决复杂问题和OOD技巧;
运行环境:
1.本设计采用Microsoft Visual C++6.0编译,并能够在WIN98,WIN2000下运行
2.游戏基于Windows Game Engine(WGE游戏引擎,添翼虎科技)(没提供源程序,不过不用担心,你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库),该引擎需要DirectX7.0SDK支持(仅有Runtime运行库不够,必须包含开发语言需要的Header&Libs头文件和库文件)
switch(bullet_type)
{
case 1:p=LIGHT;break;
case 2: p=FIRE;break;
case 3: p=DMISSILE;break;
case 4: p=SMISSILE;break;
}
g_world.BulletLink().Add(NEW TBullet(m_nX,m_nY,m_dir,bullet_type,10+m_nMoney/300,100+m_nType*25));
功能介绍:
修改案例中“子弹可以穿透石头墙”而且增加了敌军坦克子弹不能穿过箱子:无论是敌军坦克还是玩家坦克的子弹都不能穿过石头,敌军坦克子弹不能透过箱子,一旦它们相碰撞子弹会自动销毁。
增加上帝模式(无敌):玩家1通过按F1键变为上帝模式,再按一次,还原,一旦玩家进入上帝模式,敌军坦克的子弹对玩家坦克没任何损伤。
剧情:“玩家坦克”打掉“邪恶源 ”即可过关。(共3关,可循环玩)
游戏规则:
1)玩家坦克
移动:4个方向箭头,和W、S、A、D,“机动力”由升级次数决定
型号:“青铜战士”,“白银战士”,“黄金战士”
防护:由“经验值(打掉木箱,捡 )”决定“最大防护值”,捡恢复物品 可提高当前防护值
武器:左ctrl和Enter开火,只有“光弹”(匀速),“射程”由型号决定,“破坏力”由“金钱数(捡 )”决定
///增加上帝模式(无敌)。///我是通过增加按钮来改变玩家的模式:
我首先在TTank//TPlayerTank
//玩家坦克类中定义了一个私有成员private:static int N;根据N%2的值是1还是0来判断玩家是否设置为无敌状态了,我设置了F1为玩家无敌状态的快捷键,在Move里增加以下代码
相关文档
最新文档