ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:633.39KB ,
资源ID:17976064      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17976064.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(太空战机实验报告Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

太空战机实验报告Word格式.docx

1、 /表示子弹的发射间隔. m_bCanFire; /表示判断是否开火2.子弹类CBullet: m_iType; /表示该子弹是谁发射的变量3.敌方战机类CEnemyFighter: m_fCreateTime; / 创建敌机的时间见隔 m_iCreatedSpriteCount;/表示创建战机数量 m_fCanFireAfterCreated; /判断敌机创建后能否开火 /子弹发射时间间隔 m_fFloatTime; /战机飞行时上下浮动的时间间隔 m_bFloatUp; /战机飞行时是上浮还是下浮4.链表类CSpriteList:struct SpriteStruct /一个精灵结构体Sp

2、riteStruct;CSprite *pSprite;SpriteStruct *pNext;SpriteStruct *pPrev;SpriteStruct *m_pListHeader; /一个头节点指针 int m_iListSize; /表示链表节点数的私有成员变量 CSprite*m_pSpriteList; /精灵指针5.精灵父类CGameSprite:virtualCGameSprite(); /get方法6.lessen.x类: m_iGameState; / 游戏状态0:结束或者等待开始1:初始化2游戏进行中. CSprite* m_pGameBegin; /游戏开始文字精

3、灵 CMyFighter* m_pMyFighter; /战机类指针 float m_iCreatedSpriteCount; /创造精灵数量 CSpriteList m_SpriteList; /链表类精灵 CSpriteList diji; /链表类敌机 CEffect* die_texiao; /特效类精灵5.算法描述在外星球上,玩家通过键盘WSAD键控制己方战机,通过空格键发射子弹消灭外星球的邪恶战机。游戏状态m_iGameState分为三种状态0,1,2 ,其中0表示游戏结束状态,1表示游戏初始化,2则表示游戏运行状态;0 1的转换为“空格开始”,初始化函数为GameInit函数;播

4、放背景音乐。1 2的转换自然发生,即游戏初始化函数后会自动将游戏状态从1置为22 表示游戏运行状态,在该状态,敲击空格发射子弹消灭敌机,消灭敌机分数增加,被敌机打中自身的血量减少。2 0的转换是游戏结束。CGameMain:CGameMain()构造函数 完成初始化工作初始化状态为0设置开始按钮我方战机初始化为空创造精灵数量初始化为0GameMainLoop(float fDeltaTime )游戏的主循环,根据游戏的状态切换逻辑1、 当当游戏状态为0时,主循环一直循环,但不做处理,而是等待空格键按下,开始游戏。调用背景音乐。2、 当游戏状态为1时,调用GameInit()方法初始化游戏,然后

5、置游戏状态为2。当游戏状态为2时,调用GameRun(fDeltaTime)方法,在CGameMain类的GameRun方法中,遍历链接中的每个节点,获得所有敌方战机的节点,让战机执行LoopTick方法,实现战机发射子弹和上下浮动。3、 游戏结束时会执行GameEnd且置状态为0。GameInit()完成对各种精灵的初始化1.播放放在bin中的游戏背景音乐。2.初始化我方战机为战机类指针”ControlSprite”.设计我方战机的世界边界限制。3.初始化分数为0.4.初始化血量为100.GameRun(floatfDeltaTime )对于游戏进行的设置1.如果是我的战机,我方战机初始化2

6、.敌方战机引用函数CEnemyFighter:ClassTick( fDeltaTime )进行引用。3.当游戏状态为2时,调用GameRun(fDeltaTime)方法,在CGameMain类的GameRun方法中,遍历链接中的每个节点,获得所有敌方战机的节点,让战机执行LoopTick方法,实现战机发射子弹和上下浮动。OnKeyDown(constintiKey,constboolbAltPress, constboolbShiftPress, constboolbCtrlPress )游戏开始和控制按钮1、如果空格按下时,游戏未开始,即游戏状态为0,则将游戏状态改为1,运行游戏初始化函数

7、(GameInit)。隐藏文字精灵“开始游戏”。2、如果游戏状态是2时,设置战机移动,调用函数OnMove3、如果空格按下时,战机为空。则调用函数SetCanFire,按下空格键即可发送子弹。void CGameMain:OnSpriteColSprite( const char *szSrcName, const char *szTarName )设置碰撞的发送方与接收方1.调用匹配函数cemcmp(szSrcName,”,strlen(“”)=0),如果对象是子弹则继续判断2.假若是我方战机被子弹击中则血量减少0.5.显示当前血量。3.假如是对方战机被击中,则得分增加10分,更新显示我方分

8、数。void CMyFighter:OnMove(bool bKeyDown, int iKey)设置战机飞行速度编写CMyFighter类OnMove方法代码。首先判断当前按键是按下还是松开的,其次判断是哪个按键的消息,根据这两个判断,为4个方向的速度矢量赋值。再次算出X后和Y轴上的速度,并设置战机的速度。m_pMyFighter-SetSpriteWorldLimit(WORLD_LIMIT_STICKY,CSystem:GetScreenLeft()-10.f,CSystem:GetScreenTop(),CSystem:GetScreenRight() + 200.f, )设置战机的世

9、界边界 其次在构造函数中将m_pMyFighter赋予NULL的初始值。再次在GameInit方法中初始化m_pMyFighter。因为我们用new方法创建了m_pMyFighter对象,分配了内存,所以我们在CGameMain类的析构函数中需要调用delete方法将 m_pMyFighter使用的内存释放掉。 m_CurScoreText-SetTextValue(0); m_MaxScoreText-/更新当前等级/HP显示在CGameMain类的GameInit方法中显示当前积分和最高积分 LoopTick( float fDeltaTime )/ 处理子弹的发射CMyFighter添加

10、m_fBulletCreateTime,表示子弹的发射间隔,注意在构造函数中初始化为0.3。然后添加LoopTick方法,处理子弹的发射。参数为游戏的时间间隔;CreateBullet( const float fPosX, const float fPosY )CGameMain类中添加m_iCreatedSpriteCount属性,表示游戏中发射子弹的数目注意在构造函数中初始化为0。然后添加CreateBullet方法,参数为子弹的X轴和Y轴坐标。并在该方法中创建一个子弹类,并设置子弹的位置和速度。因为模板子弹的方向是朝左,所以需要设置子弹按X轴对称旋转;IntiPosBase=CSyst

11、em:RandomRange(int)CSystem:GetScreenTop()+10,(int)CSystem:GetScreenBottom() - 10);创建战机时,只需要战机不显示在世界边界之外就可以,即Y轴坐标在比世界边界的上下边界稍微大一点的范围之间,在此我们设置比世界边界大10个世界坐标单位。void CEnemyFighter:在函数中添加代码,当表示战机创建之后,隔多久才可以开始发射子弹的变量递减到小于等于0时,开始可以创建子弹,然后开始递减子弹的发射间隔变量,当递减到小于等于0时,战机发射子弹。if( m_bFloatUp )添加战机上下浮动的代码。当战机浮动时,首先累

12、计浮动的时间,当浮动时间大于1和小于0时,修改上浮还是下浮的变量值。然后获得战机此时的Y轴坐标,我们设置上下浮动的速度为6,这样就可以计算出浮动后的Y轴坐标。CreateBullet( int iType, const float fPosX, const float fPosY )为CBullet添加一个表示该子弹是谁发射的变量。 if( 1 = iType ) /如果iType值为1,则说明子弹为敌方战机反射。SpriteStruct *CSpriteList:AddSprite( CSprite *pSprite )为链接类添加增加节点的方法void CSpriteList:Delete

13、Sprite( const char *szName, bool bDeleteImage ) 添加根据精灵名称删除其在链接中的节点的方法。其中第二个参数表示是否将其在游戏中的精灵也删除。CSprite *CSpriteList:GetSprite( const int iIndex )添加获得链接中某个节点的方法。首先根据索引获得精灵。DeleteSprite( const char *szName, bool bDeleteImage )根据名字删除精灵DeleteSprite( CSprite *pSprite, bool bDeleteImage )根据精灵对象删除精灵源代码Lesse

14、nx.hpublic: CGameMain(); /构造函数 CGameMain(); /析构函数 / Get方法 int GetGameState() return m_iGameState; / Set方法 void SetGameState( const int iState ) m_iGameState = iState; / 游戏主循环等 void GameMainLoop( float fDeltaTime ); void GameInit(); void GameRun( float fDeltaTime ); void GameEnd(); / 事件函数 void OnMous

15、eMove( const float fMouseX, const float fMouseY ); void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ); void OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress ); void OnKeyUp( const int iKey ); void OnSpriteColSprite( const

16、 char *szSrcName, const char *szTarName ); void OnSpriteColWorldLimit( const char *szName, const int iColSide ); void CreateBullet( int iType, const float fPosX, const float fPosY ); void AddSprite( CSprite *pSprite ); CSprite* GetSprite(const char *szName)return m_SpriteList.GetSprite(szName); void

17、 DeleteSprite( CSprite *pSprite, bool bDeleteImage )m_SpriteList.DeleteSprite(pSprite,bDeleteImage);/ extern CGameMain g_GameMain;#endif / _LESSON_X_H_Lessenx.cpp/#include #include CommonClass.h#includeCSpriteList.hLessonX.hCBullet.hCEnemyFighter.hstring.hint a=100,b=0;CTextSprite* g_CurScoreText=ne

18、w CTextSprite(CurScoreText); /显示当前积分CTextSprite* g_MaxScoreText=new CTextSprite(MaxScoreText/ 显示最高分/CEffect* die_texiao=new CEffect(playerExplode/CGameMain g_GameMain;/=/ 大体的程序流程为:GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。/ 构造函数CGameMain() m_iGameState = 0; m_pGameBegin = new CSprite(GameBegin m_pM

19、yFighter=NULL; m_iCreatedSpriteCount=0;/ 析构函数CGameMain() delete m_pMyFighter;/ 游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次/ 用以处理游戏的开始、进行中、结束等各种状态. / 函数参数fDeltaTime : 上次调用本函数到此次调用本函数的时间间隔,单位:秒GameMainLoop( float fDeltaTime ) switch( GetGameState() ) / 初始化游戏,清空上一局相关数据 case 1: GameInit(); SetGameState(2); / 初

20、始化之后,将游戏状态设置为进行中 break; / 游戏进行中,处理各种游戏逻辑 case 2: / TODO 修改此处游戏循环条件,完成正确游戏逻辑 if( true ) GameRun( fDeltaTime ); else / 游戏结束。调用游戏结算函数,并把游戏状态修改为结束状态 SetGameState(0); GameEnd(); / 游戏结束/等待按空格键开始 case 0: default: ;/=/ 每局开始前进行初始化,清空上一局相关数据 PlaySound(yinyue,0,SND_FILENAME|SND_ASYNC|SND_LOOP); if( NULL = m_pM

21、yFighter ) m_pMyFighter = new CMyFighter(ControlSpriteGetScreenRight() + 200.f, CSystem:GetScreenBottom(); g_CurScoreText-SetTextValue(100); g_MaxScoreText-/ 每局游戏进行中GameRun( float fDeltaTime ) if( m_pMyFighter ) m_pMyFighter-LoopTick( fDeltaTime ); CEnemyFighter:ClassTick( fDeltaTime ); int iListSiz

22、e = m_SpriteList.GetListSize(); for( int iLoop = 0; iLoop / 本局游戏结束GameEnd()OnMouseMove( const float fMouseX, const float fMouseY )OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress ) if( KEY_SPACE = iKey & 0 = m_iGameState ) m_iGameState = 1; m_pGameBegin-SetSpriteVisible(0); if( 2 = GetGameState() ) /当游戏状态为2时OnMove(true,iKey); if( KEY_SPACE = iK

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1