funcode C++课程设计_坦克大战

发布时间 : 星期六 文章funcode C++课程设计_坦克大战更新完毕开始阅读

m_fBulletCreateTime+=fDeltaTime; if(m_fBulletCreateTime>3.0f) {

m_fBulletCreateTime = 0.0f; float x,y;

x = GetSpritePositionX(); y = GetSpritePositionY(); switch(GetDir()) {

case 0:

y=y-GetSpriteHeight()/2-1; break; case 1:

x=x+GetSpriteWidth()/2+1; break; case 2:

y=y+GetSpriteHeight()/2+1; break; case 3:

x=x-GetSpriteWidth()/2-1; break;

}

g_GameMain.AddBullet(GetDir(),x,y,0); } }

因为用到全局对象G_GameMain,所以需要在TankEnemy.cpp中声明头文件: #include\

8、在CGameMain类中添加CTankEnemy类指针变量m_pTankEnemy。注意在LessonX.h

中声明头文件:

#include\然后在GameInit中创建并初始化。

m_pTankEnemy = new CTankEnemy(\m_pTankEnemy->Init();

9、在CGameMain类的GameRun方法中实现敌方坦克自由移动和发射子弹。

void CGameMain::GameRun( float fDeltaTime ) {

if(m_pTankEnemy) {

m_pTankEnemy->OnMove(fDeltaTime); m_pTankEnemy->OnFire(fDeltaTime); } }

10、在CGameMain类的OnSpriteColWorldLimit方法中添加敌方坦克与世界边界碰撞的

检测。

16

上海锐格软件有限公司

if(m_pTankEnemy&&strcmp(m_pTankEnemy->GetName(),szName)==0) {

m_pTankEnemy->OnMove(); }

实验五 加载地图

【实验内容】

1、加载游戏地图;

【实验运行结果】

【实验思路】

在CGameMain类中添加方法LoadMap实现地图加载。地图数据是已知的,数据中的0表示此处为空;1表示的是地图中此处为墙;2表示此处为玩家指挥部。每块墙大小为4*4。

【实验指导】

1、首先在LessonX.cpp中定义一个表示地图的二维数组来表示地图,其中0表示没有墙

块,1表示有墙块:

int g_iMap[11][13]= {

{0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,0,1,0,1,0,0,0,1,0}, {1,1,1,1,1,1,1,1,1,1,1,1,1}, {0,0,0,1,0,1,0,1,0,1,0,0,0}, {0,0,0,1,0,0,0,0,0,1,0,0,0}, {0,0,0,1,0,1,0,1,0,1,0,0,0}, {1,1,1,1,1,1,1,1,1,1,1,1,1},

17

{0,1,0,1,0,0,0,0,0,1,0,1,0}, {0,0,0,0,0,1,1,1,0,0,0,0,0}, {0,0,0,0,0,1,0,1,0,0,0,0,0} };

2、在CGameMain类中添加LoadMap方法,实现加载地图。在方法中用for循环遍历地

图二维数组,当二维数组中的某个值为1时表示该处是一堵墙。

void CGameMain::LoadMap() {

char* szName; int i,j; float x,y; for(i=0;i<11;i++) {

for(j=0;j<13;j++) {

if(g_iMap[i][j]==1) {

szName = CSystem::MakeSpriteName(\重新起名 CSprite* pWall = new CSprite(szName); //新建对象 pWall->CloneSprite(\克隆墙块

pWall->SetSpriteCollisionActive(0,1); //设置为接受碰撞 pWall->SetSpriteCollisionResponse(COL_RESPONSE_CUSTOM); x =float(-24+4*j); y =float(-20+4*i);

pWall->SetSpritePosition(x,y); } } } }

3、 在GameInit中调用加载地图的函数:

LoadMap();

实验六 创建父类-CWeapon类

【实验内容】

1、添加CWeapon类,使CBullet、CTankPlayer、CTankEnemy类继承CWeapon类。 2、将三个子类OnFire和OnMove方法中相同的功能抽取出来,在父类中创建相应方法。

子类调用父类方法进行改进。

3、创建一个容器,用来存放所有精灵。

【实验运行结果】

18

上海锐格软件有限公司

【实验思路】

1、CBullet、CTankPlayer、CTankEnemy类中有许多共同的属性和方法,或者为了方便管理,

我们添加父类CWeapon。

2、把所有创建的精灵存入到容器中,增加从容器中查找和删除精灵的函数。在此基础上,

对整个项目进行大改。

注意此步骤对于下方实验非常重要,需要理解继承的用法,根据自己的理解把该删除和更改的地方做好。此实验会创建一个包含内容为CWeapon* 的容器,把创建的我方坦克,敌方坦克,墙块,子弹,全部存入到这个容器中进行管理。

【实验指导】

1、通过类向导添加CWeapon类,其继承于CSprite类。

2、根据分析为CWeapon类添加表示方向、血量、X轴Y轴速度、四个变量。

int m_iDir; int m_iHp; float m_fSpeedX; float m_fSpeedY;

添加get和set方法;

3、仿照前面的实验添加构造函数,在构造函数中对这些数值初始化,其中m_iHp初始

化为2,其他初始化为0; 4、添加函数以及虚函数:

bool IsDead(); //判断精灵是否死亡 virtual void Init(){}; //初始化函数

virtual void OnMove(float fDeltaTime){}; //敌方坦克移动函数 virtual void OnMove(){};

virtual void OnFire(float deltaTime){}; //发射子弹函数

virtual void OnSpriteColSprite(CWeapon* pSprite){}; //精灵与精灵碰撞时处理函数

在CWeapon类中实现IsDead()函数,此函数的作用是判断精灵是否死亡,在游戏运

19

联系合同范文客服:xxxxx#qq.com(#替换为@)