茶社的英文译语怎么说-南广教务网


2023年4月19日发(作者:美国撤销签证新规)c语⾔课程设计坦克⼤战,funcodec++课程设计_坦克⼤战
《funcodec++课程设计_坦克⼤战》由会员分享,可在线阅读,更多相关《funcodec++课程设计_坦克⼤战(24页珍藏版)》请在⼈⼈⽂库
⽹上搜索。
1、课程设计⼀ 坦克⼤战⼀、游戏介绍相信⼤部分同学都玩过或看过“坦克⼤战”这款经典游戏。现在, 就由我们⾃⼰动⼿来开发它。只
要⼤家具备了 C+语⾔和⾯向对象的基础知识,然后按照实验指南的指导⼀步⼀ 步进⾏下去,相信我们每个同学都能把这款经典游戏做出
来。、实验⽬标综合运⽤C+及其⾯向对象的知识开发⼀款⼩游戏。三、实验内容在⼀个战场上, 玩家控制坦克, 消灭敌⽅坦克,并防⽌敌
⽅坦克摧毁我⽅基地。游戏的 具体要求如下:1、游戏有⼀个初始页⾯,如下图。2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,
碰到墙时,不能通过。3、敌⽅坦克⾃由移动,每隔 2 秒改变⼀个⽅向,每隔 3 秒发射⼀发⼦弹。4、敌⽅坦克。
2、每隔 5 秒出现⼀辆,从屏幕上⽅的左、中、右三个位置依次出现。5、 当玩家被消灭或者我⽅基地被摧毁或者游戏时间⼤于30 秒的时
候,游戏结束。游戏开始前进⼊游戏四、游戏的整体框架五、实验指南实验准备打开Fun Code,创建⼀个新的 C+项⽬。注意:项⽬名称必
须为英⽂和数字,且不能有 空格。点击“项⽬”7“导⼊地图模板”,从对话框中选取名称为Ta nkWar的模板导⼊。导⼊成功后,界⾯如
下:实验⼀游戏开始【实验内容】1、设置游戏标题2、按空格键,提⽰图⽚消失,游戏进⼊开始状态【实验运⾏结果】游戏开始前按下空
格键后【实验思路】按下空格键是键盘按下事件,可在CSystem:OnKeyDown函数中编。
3、写响应代码。 为了保证程序结构的清晰、⼀致,更好的办法是在CGameMair类中添加⼀个相应的键盘按下事件处理 函数,然后在
CSystem:O nM ouseClick函数中进⾏调⽤。g_GameMain是CGameMair类的对象,它是全局变量,在程序运⾏时最先被创建。【实验
指导】1、 C+程序的执⾏⼊⼝是主函数。FunCode的主函数名称叫WinMain,写在⽂件中。CSystem:SetWi ndowTitle是设置程序运⾏梅花 王安石 窗
⼝标题的函数,修改如下:CSystem:SetWindowTitle(坦克⼤战”);2、参考 CSystem:OnKeyDown 函数,为 CGameMain类创。
4、建⼀个 OnKeyDown函数。CGameMain类的头⽂件是⽂件,实现代码写在⽂件中。因此,先在⽂件对函数进⾏ 声明。函数的返回值和
参数列表都与CSystem:OnKeyDown函数保持⼀致。访问权限应该是public。代码如下:void On KeyDow n( const int iKey, const
bool bAltPress, const bool bShiftPress, const bool bCtrlPress );3、接着,在⽂件中对该函数进⾏定义:void CGameMa in :0
nKeyDow n( const int iKey, const bool bAltP。
5、ress, const bool bShiftPress, const bool bCtrlPress )4、 在 CSystem:OnKeyDown函数(⽂件中)调⽤
CGameMain:OnKeyDown函数,并将⾃⼰的参数传递给该函数。g_GameMain是是CGameMair类的对象,它是全局变量,在 程序运⾏
时最先被创建。因此,我们可以⽤g_GameMain调⽤⾃⼰的成员函数OnKeyDown(iKey, bAltPress, bShiftPress, bCtrlPress);5、Fu
nCode程序运⾏时,当发⽣键盘按下事件,程序⾸先调⽤并执⾏CSystem:OnKeyDown 函数。
6、,然后由 CSystem:OnKeyDown 函数调⽤ 并执⾏ CGameMain:OnKeyDown函数。因此,键盘按下事件的响应代码我们在
CGameMai n:O nKeyDown函数中编写即可。6、 我们要处理的两个精灵如下图,它们的名称分别是splash和start。我们需要创建两个
CSprite类对象与这两个精灵绑定。7、在CGameMair类中声明两个 CSprite*类型,根据⾯向对象的封装性原理,成员变量的访问权限应
该是 private。代码应该写在哪个⽂件,请参看前⾯的实验步骤。CSprite* m_pSplash;CSprite* m_pStart;在CGameMair类。
7、的构造函数中,对上⾯两个指针变量进⾏初始化。通过调⽤CSprite 的构造函数,将精灵和精⼒对象绑定在⼀起。m_pSplash= new
CSprite(splash);m_pStart= new CSprite(start);8、最后,我们在 CGameMai n: :O nKeyDown函数中处理空格键按下事件。if( 0
=GetGameState()if(iKey =KEY_SPACE)mi_iGameState = 1;KEY_SPAC是枚举变量 KeyCodes的成员,表⽰空格键。 KeyCodes定
义在⽂件中。 该枚举变量定义了全部的键盘值。注意:必须将 m_iGameState。
8、的值改为1。当GameMainLoop函数再次执⾏时,根据mGameState的值调⽤并执⾏Gamelnit函数, 游戏进⼊开始状态。进⼊游戏开
始状态时,调⽤CSprite类的SetSpriteVisible 函数将精灵图⽚设置为不可见。在Gamelnit函数中添加代码:m_pSplash-
SetSpriteVisible(false); m_pStart-SetSpriteVisible(false);9、程序执⾏完 CGameMain:Gamelnit 函数后,执⾏ CGameMain:
SetGameState(2),将mGameState的值改为2,游戏进⼊运⾏状态。10、 在CGam。
9、eMain类的析构函数中delete本实验创建的指针对象,以释放分配的内存。CGameMain:CGameMain()delete m_pSplash;delete
m_pStart;11、编译并运⾏程序,然后按下空格键,看看运⾏效果。实验⼆ 坦克运动【实验内容】1、创建坦克类 CTankPlayer ;2、游
戏开始时,将坦克放置于 (0,0) 的坐标上;3、通过按键WSAD控制坦克上下左右运动;4、坦克运⾏到⿊⾊区域边界时不能继续前进。实
验运⾏结果】在区域内运动运动到区域边界【实验思路】 坦克也是精灵, 但是它具备⼀些⾃⼰独特的功能, ⽐如通过键盘控制运动、 开炮
等。因 此我们可以创建⼀个新。
10、的类 CTankPlayer 类,并让它继承 CSprite 类。通过WASD键,控制坦克做相应的的上左下右运动。按下某个键,给坦克设江南春译文 置相应
⽅向 的运动速度;松开时,将该⽅向的速度设为0,表⽰停⽌运动。屏幕上最内部的⿊⾊区域为玩家坦克的活动区域,左上⾓坐标为(-26,-
22) ,右下⾓坐标为 (26,22) 。当坦克运动到该区域边界时,坦克不能继续前进。【实验指导】1、通过类向导创建 CTankPlayer 类,其
继承于 CSprite 类。以 VC+ 为例: 第⼀步、点击菜单“插⼊” - “新建类”。第⼆步、在“ New Class ”对话框中输⼊类名和⽗类名。
第三步、点击Change”按钮。

11、,在新对话框中修改 CTankPlayer类的头⽂件和 cpp ⽂件的路径。将头⽂件保存到项⽬⽂件夹的 SourceCodeHeader ⽂件夹中,
将 cpp ⽂件保 存到项⽬⽂件夹下的 SourceCodeSrc ⽂件夹中。这⾥需要特别注意的是创建⽂件路径的问题,所有的 .h 头⽂件应该在项
⽬⽂件夹 SourceCodeHeader 中 , 所 有 的 .cpp 源 ⽂ 件 应 该 放 在 项 ⽬ ⽂ 件 夹 下 的 SourceCodeSrc ⽂件夹中。2、为
CTankPlayer 类添加 m_iDir,m_fSpeedX,m_fSpeedY , m_iHp 四个成员变量(成员 变量。⽤。
12、来表⽰坦克在 X轴和Y轴⽅向上的速度以及运⾏的⽅向,并且在构造函数中 初始化为 0。这⾥规定, m_iDir 的值为 0、 1、 2、 3,
分别表⽰上、右、下、左。成员函数的声明和定义如何添加,访问权限是什么,可参考实验⼀,下⽂不再继续 提⽰),分别表⽰运动⽅向、
X轴、Y轴速度以及⾎量值。本⽂档的命名采⽤匈⽛利 命名法,m_表⽰类成员变量,i表⽰整型,f表⽰float型,sz表⽰字符指针,g_ 表⽰
全局变量等。同时需要在public权限下定义获取和设置这些变量的Get和Set⽅法:/set⽅法void SetHp(i nt hp)mHp = hp;void SetDir(i
nt dir)m_。
13、iDir = dir;void SetSpeedX(float speedX) m_fSpeedX = speedX;void SetSpeedY(float speedY) m_fSpeedY = speedY;/get
⽅法int GetHp()return mHp;int GetDir()return m_iDir;float GetSpeedX()return m_fSpeedX;float GetSpeedY()return
m_fSpeedY;3、 CTa nkPlayer的⽗类是CSprite类(具体声明查看),构造函数为CSprite( con st char *szName )。
14、。4、 所以通过上边⽅法⾃动⽣成的类,如果系统⾃动⽣成构造函数CTa nkPlayer(void),删除掉它以及在中⾃动⽣成的对构造函数
实现的代码:CTa nkPlayer:CTa nkPlayer(void) 再为 CTankPlayer 类添加新的构造函数:CTankPlayer(const char* szName) 。CTa
nkPlayer:CTa nkPlayer(c on st char* szName):CSprite(szName) /对构造函数进⾏实现
mDir=0;m_fSpeedX=;m_fSpeedY=;mHp=2;|⼦类对象创建时,要先调⽤⽗类的构造函数完成⽗类部分的。
15、构造。如果⽗类没有默 认构造函数,⼦类的构造函数必须显⽰调⽤⽗类的构造函数。CTankPlayer构造函数调⽤CSprite类构造函
数,并将参数szName的值传递给它,从⽽将名称为szName 的精灵图⽚与CTankPlayer对象绑定起来。5、为CTa nkPlayer类添加In it函
数,该函数主要⽤来完成该类的初始化⼯作。这⾥,先调⽤setHp⽅法设置⾎量。然后调⽤⽗类的SetSpritePosition 函数将坦克精灵设置
在屏幕中央(0,0)处。接下来给坦克精灵设置时间边界的⼤⼩,与世界边界的碰撞模式为WORLD_LIMIT_NULL表⽰精灵与世界边界碰撞的
响应由代码完成,同时设置坦。
16、克碰撞模式为发送碰撞和接收碰撞。void CTa nkPlayer:l ni t()SetHp(2);SetSpritePositio
n,;SetSpriteWorldLimit(WORLD_LIMIT_NULL, -26, -22, 26, 22);SetSpriteCollisio nActive(1,1);设置为可以接受和发⽣碰撞
SetSpriteVisible(true);6、在CGameMain类中增加⼀个私有成员变量m_pTankplayer,类型为 CTankPlayer* 。注意在添加头⽂件:#i
nclude7、按下空格键后,程序会调⽤键盘按下事件响应函数,将mGameSt。
17、ate的值改为1,游戏进⼊开始状态(见实验⼀)。程序再次执⾏ CGameMai n:GameMai nLoop函数时, 根据mGameState的值调⽤并
执⾏ CGameMain:Gamelnit函数。因此,可以在该 函数中创建我⽅坦克,并调⽤CTankPlayer:Init函数来完成该类对象的初始化⼯作。
m_pTa nkPlayer =new CTan kPlayer(myplayer);新建⼀个名字是myPlayer的我⽅坦克对象m_pTa nkPlayer-Clo neSprite(player);我
⽅坦克克隆在 fun code模板中存在的名字为player的坦克,表⽰新建的坦克对象有。
18、现在精灵的所有属性m_pTa nkPlayer-l nit();8、 接下来,我们为CTankPlayer类添加On Move函数,参数iKey、bPress分别表⽰
按下的是哪个按键和按键是否按下。⾸先声明该函数,访问权限为public :void OnMove(int iKey, bool bPress);9、接着,完成 OnMove
⽅法。void CTa nkPlayer:O nMove(i nt iKey, bool bPress)if(bPress)switch (iKey)case
KEY_WSetDir(O);SetSpeedX(O);SetSpeedY(-8);break;cas。
19、e KEY_D:SetDir(1);SetSpeedX(8);SetSpeedY(0);break;case KEY_S:SetDir(2);SetSpeedX(O);SetSpeedY(8); break; | case
KEY_A:SetDir(3);SetSpeedX(-8);SetSpeedY(O); break;转度数SetSpriteLi nearVelocity(GetSpeedX(),GetSpeedY();else |if(iKey =
KEY_W | iKey = KEY_D | iKey = KEY_S | iKey = KEY_A)SetSpeedX(O);SetSpe。
20、edY(O);SetSpriteLi nearVelocity(GetSpeedX(),GetSpeedY();|⽤参数bPress来判断键盘是按下还是弹起。如果bPress为false ,
表⽰键盘弹阴丽华 起,且弹起的键是 WAS键时,设置坦克的X轴和Y轴移动速度都为0。如果bPress为true,表⽰键盘按下山中留客古诗朗诵 ,根据按下的键,为
mDir,m_fSpeedX,m_fSpeedY 赋予相应的值。SetSpriteRotation 和SetSpriteLinearVelocity函数⽤来设置精灵的⾓度和线性速度,具
体含义参考⽂件。10、 在CGameMair类的OnKeyDown函数中,通过调⽤ CTan。
21、kPlayer类的OnMove⽅法, 根据按下的键,控制坦克朝指定⽅向运动。只有游戏进⼊开始状态,按键才有效。注意:On Move参数
bPress的值为true。在On KeyDown数中添加代码如下: if(mGameState = 2)m pTankPlayer-OnMove(iKey, true);11、 编译并运⾏
程序。按空格键开始,按WASDt,坦克会向规定的⽅向运动。但是松 开按键后,坦克继续前进,不会停⽌下来。12、 参考
CSystem:OnKeyUp函数,给 CGameMair类声明并定义⼀个OnKeyUp函数,⽤来处理按键弹起事件,然后在CSystem:OnKeyUp函数
中调。

22、⽤它。关于这个函数如何声明、定义以及调⽤参考实验⼀。13、在 CGameMain:OnKeyUp函数中调⽤ CTankPlayer 的 OnMove⽅
法,参数 bPress 的 值为false 。void CGameMain:OnKeyUp(const int iKey)if(m iGameState = 2)m pTankPlayer-OnMove(iKey,
false);14、 编译并运⾏程序,按下WASDt,坦克运⾏;松开按键,坦克停⽌。接下来,我们 来实现坦克运⾏到⿊⾊区域边界停⽌运动的
效果。15、 参考 CSystem:OnSpriteColWorldLimit函数,给 CGame。
23、Main类声明并定义⼀个On SpriteColWorldLimit函数,⽤来处理精灵与世界边界的碰撞事件,然后在CSystem: O
nSpriteColWorldLimit函数中调⽤它。关于这个函数如何声明、定义以及调⽤参考实验⼀。16、当坦克精灵碰到边界时,将精灵的速度都
设为0,精灵停⽌运动。⽤字符串处理函数 strstr() 来判断碰到世界边界的精灵是否为我⽅坦克。当碰到世界边界的精灵名字中含有”
player ”的时候,strstr 会返回⼀个⾮空值。因此代码 如下:void CGameMai n:O nSpriteColWorldLimit(const char *szName, 。
24、con st int iColSide )if(strstr(szName,player)!= NULL) /判断碰到世界边界的坦克是否为我⽅坦克|m_pTa nkPlayer-SetSpriteLi
nearVelocity(0,0);|实验三坦克开炮【实验内容】1、创建⼦弹类CBullet ;2、通过按键J控制坦克开炮;【实验运⾏结果】【实验思路】
创建⼦弹类,该类应具备⼦弹的运动⽅向、起始位置、X轴速度、Y轴速度等属性,其中运动⽅向和起始位置由坦克的⽅向和位置决定。通
过按键控制坦克发射⼦弹,因此在CGameMair类的OnKeyDowr⽅法中实现该需求。此 时我们为CTan kPlayer。
25、类添加发射⼦弹的⽅法On Fire。当按下J键后,坦克发射⼦弹,在OnFire⽅法中,我们需要告诉⼦弹的⽅向和初始位置。⽽创建⼦弹
我们由CGameMain类来完成。这样减少了类之间的耦合。【实验指导】1、 通过类向导创建 CBullet类,其继承于 CSprite类,具体做法
参考实验⼀;2、 为 CBullet 类添加 mDir,m_fSpeedX,m_fSpeedY,mHp ,m_iOwner 五个成员,分别 表⽰⽅向、X轴、Y轴速度、⼦
弹⾎量以及发射⼦弹归属坦克,0表⽰地⽅坦克,1表⽰我⽅坦克,并参考实验⼆添加变量的get和set⽅法。3、为CTankPlayer类添加构
造函数和析构函数。。
26、参照实验⼆,把构造函数中将所有变量进⾏初始化。4、为CBullet类添加On Move⽅法,参数为iDir表⽰⼦弹的运动⽅向。5、 完成
OnMove⽅法。根据⽅向 mDir,⾸先设置 m_fSpeedX,m_fSpeedY的值,然后设置根据⽅向设置旋转⾓度,最后设置⼦弹的运动速度。
void CBullet:OnMove(int iDir) SetDir(iDir);switch(GetDir()case 0:SetSpeedX(0);SetSpeedY(-10);break;case
1:SetSpeedX(10);SetSpeedY(0);break;case 2:SetSpeedX(0);。
27、SetSpeedY(IO); break;case 3:SetSpeedX(-IO); SetSpeedY(O);break;SetSpriteRotatio n( 90*GetDir();SetSpriteLi
nearVelocity(GetSpeedX(),GetSpeedY();6、在CGameMair类中添加表⽰⼦弹数⽬的成员变量mBulletNum(注意初始化为0)。然后添
加 AddBullet⽅法。⽅法中有iDir、fPosX、fPos中秋诗句经典古诗小学 Y、iOwner四个参数分别 表⽰⼦弹⽅向、⼦弹初始位置的X轴Y轴坐标以及⼦弹所属坦
克。由于地图上只有⼀个⼦弹模板,所以我们需要先复制这个模板,然。
28、后设置该精灵的世界边界。void CGameMain:AddBullet( int iDir,float fPosX,float fPosY ,int iOwner)char* szName =
CSystem:MakeSpriteName(bullet,mBulletNum);/创建坦克名字CBullet* pBullet = new CBullet(szName);pBullet-Clo
neSprite(bullet);pBullet-SetSpriteWorldLimit(WORLD_LIMIT_NULL,-26, -22, 26, 22); /设置世界边界pBullet-SetSpr。
29、itePositio n( fPosX,fPosY);pBullet-SetSpriteCollisio nSe nd(true); /设置接收碰撞pBullet- OnM ove(iDir);mBulletNum+; /⼦
弹个数加1if(iOw ner = 1)pBullet-SetOw ner(1);/1表⽰我⽅坦克发射的⼦弹 else |pBullet-SetOw ner(0); 0表⽰地⽅坦克发射的⼦弹
7、为CTankPlayer类增加OnFire⽅法,实现发射⼦弹的功能。在根据坦克的运动状态, 得到⼦弹的相关属性后,通过AddBullet⽅法在游
戏中增加⼀发⼦弹。void CTa n。
30、kPlayer:O nF ire()float x,y;x = GetSpritePositio nX();y = GetSpritePositio nY();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;(GetDir(),x,y,1);因为⽤到g_GameMain这个全局对象,所以需要在中声明头⽂件:。
31、#include ”8、按 J 键发射⼦弹。在 CGameMair类的 OnKeyDown函数 if(m_iGameState = 2) 下添 加if(iKey = KEY_J)判断按
下键是够为J键m_pTa nkPlayer-OnFire();实验四敌⽅坦克【实验内容】1、创建 CTankEnemy类;2、创建⼀个敌⽅坦克实例,实现坦克
从上⽅左中右三个位置随机出现。3、实现坦克隔2秒,随机改变⼀个⽅向。4、实现坦克隔5秒发射⼀发⼦弹;5、当坦克与世界边界碰撞
时,改变⽅向;【实验运⾏结果】【实验思路】同我⽅坦克⼀样,敌⽅坦克运动,也需要有运动⽅向、X轴Y轴速度三个基本属性。为了实
现坦克能⾃由运。
32、动,即坦克运动⼀段时间后改变⽅向, 需增加⼀个改变⽅向的时间间隔。 同时为了实现坦克⾃动发射⼦弹,需增加⼀个发射⼦弹的时
间间隔。然后为敌⽅坦克增加移动和发射⼦弹的⽅法。最后我们在CGameMain类的GameRur⽅法中调⽤敌⽅坦克移动和发射⼦弹的⽅
法。【实验指导】1、通过类向导创建 CTa nkEn emy类;2、 为类 CTankEnemy添加 mDir,m_fSpeedX,m_fSpeedY,mHp 四个成员,
分别表⽰⽅向、X轴、Y轴速度和⾎量;3、参照前⾯的实验,为 CTa nkE nemy类添加构造函数和析构函数。4、 为类CTa nkEn emy添
加In it⽅法初始化敌⽅坦克。设。

33、置⾎量为2,位置坐标为上⽅ 左中右的随机位置,然后函数中给坦克精灵设置时间边界的⼤⼩,与世界边界的碰撞模式为
WORLD_LIMIT_NULL表⽰精灵与世界边界碰撞的响应由代码完成。最后设置⽅向和速度代码如下:int iPos = CSystem:Ra ndomRa
nge(0,2);float fPosX;SetDir(2);SetHp(2);switch (iPos)case 0:SetSpritePositio n( fPosX,;SetSpriteL in
earVelocity,;SetSpriteCollisi on Active(1,1); II设置可以接受和发送碰撞SetSpri。
34、teRotatio n(float(90*GetDir();SetSpriteWorldLimit(WORLD_LIMIT_NULL,-26, -22, 26, 22);5、为类CTankEnemy添加
OnMove⽅法,实现坦克顺时针旋转90度运动。然后根据⽅向设置⼦弹的运动速度m_fSpeedX,m_fSpeedY的值。与CTankPlayer类的
OnMove⽅法类似。设置速度⽅向与原来⽅向旋转90度的代码如下:int iDir=0;if(GetDir()=0 | GetDir()=1 | GetDir()=2)iDir =
GetDir()+1;Else /如果⽅向值等于3,设为0通过⽅向。
35、设置速度参考前边实验。6、为类CTankEnemy添加带参的 OnMove⽅法,参数fDeltaTime,为游戏的时间差,实现隔⼀段时间随机
改变⽅向。在CTa nkEn emy类中添加成员变量m_fCha ngeDirTime在构造函数中初始化为0,并添加get和set⽅法。void CTa nkEn
emy:O nM ove(float fDeltaTime)m_fCha ngeDirTime+=fDeltaTime;if(m_fCha ngeDirTime _OnM ove(); m_fCha ngeDirTime =;
⼀|7、 为类CTa nkEn emy添加On Fire⽅法,参数也。
36、为fDeltaTime,实现隔⼀段时间⾃动发 射⼦弹。在CTankEnemy类中添加成员 m_fBulletCreateTime变量并在构造函数中 初始化
为0。void CTa nkE nemy:O nFire(float fDeltaTime)m fBulletCreateTime+=fDeltaTime;if(m_fBulletCreateTimem
fBulletCreateTime =;float x,y;x = GetSpritePositio nX(); y = GetSpritePositio nY(); switch(GetDir()case 0:y=y-GetSpriteHe。
37、ight()/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;(GetDir(),x,y,O);因为⽤到全局对象 G_GameMain所以需要在中声明头⽂件:#i nclude8、 在
CGameMair类中添加 CTankEnemy类指针变量 m_pTankEnemy注意在中声明头⽂件:#i nclude然后在Game In it中创建并初始化。m
pTa nkEn emy = new CT。
38、a nkEn emy(e nemy);m_pTa nkEn emy-I nit();9、在CGameMair类的GameRun⽅法中实现敌⽅坦克⾃由移动和发射⼦弹。void
CGameMai n:GameRu n( float fDeltaTime )if(m_pTa nkEn emy)m pTa nkEn emy- OnMo ve(fDeltaTime);m_pTa nkEn emy- On
Fire(fDeltaTime);10、 在CGameMair类的OnSpriteColWorldLimit⽅法中添加敌⽅坦克与世界边界碰撞的 检测。if(m_pTa
nkEnemy&strcmp(m_。
39、pTa nkEn emy-GetName(),szName)=0)m_pTa nkEn emy-OnMove();实验五加载地图【实验内容】1、加载游戏地图;【实验运⾏
结果】【实验思路】在CGameMain类中添加⽅法 LoadMap实现地图加载。地图数据是已知的,数据中的0表⽰此处为空;1表⽰的是地图
中此处为墙;2表⽰此处为玩家指挥部。每块墙⼤⼩为 4*4。【实验指导】0表⽰没有墙块,1表⽰1、⾸先在中定义⼀个表⽰地图的⼆维数
组来表⽰地图,其中有墙块:in t g_i Map1113=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,。
40、
0,0,0,0,0,1,0,1,0,0,0,0,0;2、在CGameMair类中添加LoadMap⽅法,实现加载地图。在⽅法中⽤ for循环遍历地图⼆维数组,当⼆维数
组中的某个值为1时表。
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,
41、⽰该处是⼀堵墙。void CGameMai n:LoadMap()char* szName;int i,j;float x,y;for(i=0;iClo neSprite(wall); /克隆墙块pWall-
SetSpriteCollisionActive(0,1); /设置为接受碰撞pWall-SetSpriteCollisio nRespo nse(COL_RESPONSE_CUSTOM);x =float(-
24+4*j);y =float(-20+4*i); pWall-SetSpritePositio n(x,y);|3、在Gamelnit中调⽤加载地图的函数:LoadMap();实。
42、验六创建⽗类-CWeapon类【实验内容】1、添加 CWeapor类,使 CBullet、CTankPlayer、CTankEnemy如花美眷似水流年 类继承 CWeapor类。
2、 将三个⼦类OnFire和On Move⽅法中相同的功能抽取出来,在⽗类中创建相应⽅法。⼦类调⽤⽗类⽅法进⾏改进。3、创建⼀个容
器,⽤来存放所有精灵。【实验运⾏结果】【实验思路】1、CBullet、CTankPlayer、CTankEnemy类中有许多共同的属性和⽅法,或者
为了⽅便管 理,我们添加⽗类 CWeapon2、把所有创建的精灵存⼊到容器中,增加从容器中查找和删除精灵的函数。在此基础上,对整个
项⽬进⾏⼤改。注意此步骤对于下⽅。
43、实验⾮常重要,需要理解继承的⽤法,根据⾃⼰的理解把该删除和更改的地⽅做好。此实验会创建⼀个包含内容为CWeap on*的容
器,把创建的我⽅坦克,敌⽅坦克,墙块,⼦弹,全部存⼊到这个容器中进⾏管理。【实验指导】1、通过类向导添加 CWeapor类,其继
承于 CSprite类。2、 根据分析为CWeapon类添加表⽰⽅向、⾎量、X轴Y轴速度、四个变量。int mDir;int mHp;float
m_fSpeedX;float m_fSpeedY;添加get和set⽅法;3、 仿照前⾯的实验添加构造函数,在构造函数中对这些数值初始化,其中mHp初始
化为2,其他初始化为0;4、添加函数以及虚函数:b。

44、ool IsDead(); /判断精灵是否死亡_|virtual void In it(); /初始化函数virtual void OnM ove(float fDeltaTime); /敌⽅坦克移动函数
virtual void On Move();virtual void OnF ire(float deltaTime); /发射⼦弹函数virtual void On SpriteColSprite(CWeapo n* pSprite);
/精灵与精灵碰撞时处理函数在CWeapon类中实现lsDead()函数,此函数的作⽤是判断精灵是否死亡,在游戏 运⾏时,会根据这个函数的
返回值来确定是否此。
45、精灵:boolCWeapo n:lsDead()if(mHp = 0)return true;return false;5、 将 CBullet、CTankPlayer、CTankEnemy类的⽗类改
为 CWeapon例如在中把 class CTankPlayer :public CSprite 改为 class CTankPlayer :public CWeapon注意需要、包含头⽂件:#i
nclude6、 注意同时修改构造函数。把继承类的名称由 CSprite改为Cweapon删除与CWeapon定义重复的变量声明,原来的get和set⽅
法,以及在构造函数中对这些变量赋初值的代码。特别主。
46、要要设置Hp=27、 在CGameMair类中添加⼀个成员变量m_vWeapon⽤来存储所有精灵:vectorvCWeap on* m_vWeap on;注意
⽤到容器,添加头⽂件声明和命名空间:#in cludeusing n amespace std;8、然后声明和定义查找和删除容器成员的两个函数Fin
dWeapo nByName和DeleteWeapo nByNameCWeapo n* CGameMa in:Fi ndWeapo nByName(c on st char* szName)/根据名字查
找到对象for(int i=0; iGetName() = 0)retur n m_vWe。
47、ap on i;|void CGameMa in:DeleteWeapo nByName(c onst char* szName)/根据名字把精灵从容器中删除for(vector:iterator
it=();it!=();)CWeap on* cw =*it; if(strcmp(szName,cw-GetName() = 0)I(it);cw-DeleteSprite();delete cw;break;elseit+;9、在前边创
建⼦弹、我⽅坦克、以及地图的地⽅⽤()函数把精灵添加到容器中。1) 我⽅精灵添加容器中⽅法为,在Gamel ni t()函数中创建我⽅坦克的
代码:m_pTa n。
48、kPlayer =new CTan kPlayer(myplayer);m_pTa nkPlayer-Clo neSprite(player);m_pTa nkPlayer-In it();下边添加如下代码:
(m_pTa nkPlayer);2) ⼦弹添加到容器,在 AddBullet函数最后添加⼀⾏代码:(pBullet);3) 地图添加容器,在LoadMap()函数中,把
CSprite* pWall = new CSprite(szName); 改为:CWeapo n* pWall = new CWeap on (szName);然后在 pWall-SetSpritePositio
n(。
49、x,y);下添加:(pWall);实验七游戏整体正常运⾏【实验内容】1、 创建敌⽅坦克每隔5秒出现⼀辆,从屏幕上⽅的左、中、右三个位置
随机出现。2、当⼦弹与游戏中的任何东西碰撞时,双⽅都消失;3、当我⽅坦克与敌⽅坦克碰撞时,我⽅坦克静⽌不动,敌⽅坦克改变⽅
向;4、当我⽅坦克被消灭或者我⽅军营被击中时,游戏结束。【实验运⾏结果】【实验思路】3、创建⼀个函数⽣成坦克的函数产⽣坦
克。4、 在 OnSpriteColSprite⽅法中添加碰撞检测。5、 更改在OnSpriteColWorldLimit中与世界边界的碰撞检测。【实验指导】1、
注释掉实验四中,在 CGameMai类中添加的声明和创建⼀个敌。
50、⽅坦克对象的代码。 中:/CTankEn emy* m_pTa nkEn emy; 在⽂件Gamelnit函数:m_pTa nkEn emy = new CTankEn emy(e
nemy);m_pTankEn emy-l nit();同时注释在 GameRuni数中添加的使敌⽅坦克运动的代码。/*if(m_pTa nkEn emy)m_pTa nkEn emy-
OnMo ve(fDeltaTime); m_pTa nkEn emy- On Fire(fDeltaTime);*/2、在CGameMai中创建⼀个不断产⽣地⽅坦克的函数
AddTankEnemy先在 CGameMai中添加⼀个成。
51、员变量 m_fTankEnemyTime和 m_iTankEnemyNumber分别代表创建坦克时间,以及坦克数量(注意将两数进⾏初始化)。当时间
m_fTankEnemyTime ⼤于5时,创建敌⽅坦克,设置属性,并进⾏调⽤初始化函数in it来设置敌⽅坦克的初始位置以及碰撞模式等内容。
voidCGameMai n:AddTa nkE nemy(float fDeltaTime)m fTa nkEn emyTime += fDeltaTime;if(m_fTa nkEn emyTime 5) char*
szName = CSystem:MakeSpriteName(e nemy,m_iTa 。
52、nkEn emyNumber);CTankEn emy* m_pTa nkEn emy = new CTa nkEn emy(szName);m pTa nkEn emy-Clo neSprite(e
nemy);m_pTa nkEn emy-I nit(); m_iTa nkEn emyNumber+;(m pTa nkEn emy); /把创建的敌⽅坦克插⼊到容器中m fTa nkEn
emyTime=;在CGameMain类的GameRun函数中调⽤增加敌⽅坦克的函数:AddTa nkE nemy(fDeltaTime);此时运⾏游戏可以看到,每
五秒有⼀辆敌⽅坦克从下⽅随机⽣成并向下运动。
53、。3、在GameRun中添加代码遍历容器,调⽤精灵移动以及发射函数(⼦弹和墙没有对这两个 函数进⾏实现,因此不会产⽣效果),把
已死亡的精灵进⾏删除,使游戏运⾏正常。for(int i=0;ilsDead()m vWeapo ni- OnM ove(fDeltaTime); m_vWeapo ni-O nF
ire(fDeltaTime);elseDeleteWeapo nByName(m vWeapo ni-GetName();4、更改精灵世界边界碰撞时间函数中的代码,更改判断敌⽅坦
克与世界边界碰撞和⼦弹与 世界边界碰撞的代码:else if(strstr(szName,e nemy) != 。
54、NULL) CWeap on* pEn emy = Fi ndWeap初一《春》课文 on ByName(szName); pEn emy-SetSpriteLi nearVelocity,;pEn emy- OnM
ove();else if(strstr(szName,bullet) 名人名言大全经典励志 != NULL)CWeapo n* pBullet = Fin dWeapo nByName(szName); pBullet-SetHp(O);5、在
CGameMain中添加对 CWeapon *类型对象 m_pAim_nor表⽰我⽅军营在GameInit中创建我⽅军营精灵,把军营精灵插⼊到容器中,设
置接收碰撞以及坐标。。

55、m_pAim_nor = new CWeap on (myaim _n or);m_pAim_n or-Clo neSprite(aim _n or);(m_pAim _no r);m pAim n or-
SetSpriteCollisi on Receive(true);m_pAim_n or-SetSpritePositi on,;6、在CTankPlayer类中添加我⽅坦克与其他精灵碰撞的处理函
数,使我⽅坦克碰到⼦弹后,⾎量设为0,碰到墙后,设置速度为0:void CTa nkPlayer:O nSpriteColSprite(CWeapo n*
pSprite)if(pSprite =。
56、 NULL)return;else if(strstr(pSprite-GetName(),bullet) != NULL)SetHp(0);else if(strstr(pSprite-GetName(),wall) !=
NULL)SetSpeedX(O);SetSpeedY(O);7、在SetSpriteLi nearVelocity(GetSpeedX(),GetSpeedY();CBullet类中添加⼦弹与其他精灵碰
撞后的判断代码,判断⼦弹与其他精灵碰撞发⽣的反应,当我⽅⼦弹与军营发⽣碰撞,地⽅坦克发射的⼦弹与敌⽅坦克发送碰撞时,只 设
置⼦弹⾎量为0,其他不做处理。其他情况,设置被碰。
57、撞精灵⾎量为0:void CBullet:OnSpriteColSprite(CWeapon* pSprite)if(pSprite = NULL)return;SetHp(O);if(GetOw ner() = 1
& strstr(pSprite-GetName(),aim _n or) != NULL) /我⽅坦克⼦弹与军营发⽣碰撞return;if(GetOw ner() = 0 & strstr(pSprite-
GetName(),e nemy) != NULL) /敌⽅坦克⼦弹打中地⽅坦克return;pSprite-SetHp(0);8、 在CTankEnemy类中添加地⽅坦克与。
58、其他精灵碰撞的处理函数,设置速度为0,并设置转换⽅向的时间 m_fChangeDirTime为,在 CGameMair类GameRur函数中,当
m_fChangeDirTime2时,敌⽅坦克转向。所以在秒之后,这个坦克会⾃动转向。void CTa nkE nemy:O nSpriteColSprite(CWeapo n*
pSprite)if(pSprite = NULL)return;SetSpriteLi nearVelocity,;m_fCha ngeDirTime =;9、 在CGameMain中添加事件函数
OnSpriteColSprite,表⽰精岁暮归南山的作者 灵与精灵碰撞事件。然后OnSpriteColSprite中添加碰撞检测。进⾏的检测顺序是,⾸先判断发送碰撞⽅为
谁,然后调⽤发送碰撞对象的碰撞处理函数,代码如下:voidCGameMai n:O nSpriteColSprite(c on st char *szSrcName, const char
*szTarName)CWeapo n* tarSprite = Fin dWeap on ByName(szTarName); if(strstr(szSrcName,bullet) != NULL)。

害虫;幼虫;昆虫种类的英文翻译么说-初中毕业典礼演讲稿


更多推荐

speedy是什么意思edy在线翻译读音例句