太空战机实验报告Word文档下载推荐.docx

上传人:b****1 文档编号:3668612 上传时间:2023-05-02 格式:DOCX 页数:40 大小:633.32KB
下载 相关 举报
太空战机实验报告Word文档下载推荐.docx_第1页
第1页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第2页
第2页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第3页
第3页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第4页
第4页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第5页
第5页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第6页
第6页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第7页
第7页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第8页
第8页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第9页
第9页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第10页
第10页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第11页
第11页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第12页
第12页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第13页
第13页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第14页
第14页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第15页
第15页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第16页
第16页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第17页
第17页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第18页
第18页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第19页
第19页 / 共40页
太空战机实验报告Word文档下载推荐.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

太空战机实验报告Word文档下载推荐.docx

《太空战机实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《太空战机实验报告Word文档下载推荐.docx(40页珍藏版)》请在冰点文库上搜索。

太空战机实验报告Word文档下载推荐.docx

//表示子弹的发射间隔.

m_bCanFire;

//表示判断是否开火

2.子弹类CBullet:

m_iType;

//表示该子弹是谁发射的变量

3.敌方战机类CEnemyFighter:

m_fCreateTime;

//创建敌机的时间见隔

m_iCreatedSpriteCount;

//表示创建战机数量

m_fCanFireAfterCreated;

//判断敌机创建后能否开火

//子弹发射时间间隔

m_fFloatTime;

//战机飞行时上下浮动的时间间隔

m_bFloatUp;

//战机飞行时是上浮还是下浮

4.链表类CSpriteList:

structSpriteStruct//一个精灵结构体SpriteStruct;

{

CSprite*pSprite;

SpriteStruct*pNext;

SpriteStruct*pPrev;

};

SpriteStruct*m_pListHeader;

//一个头节点指针

intm_iListSize;

//表示链表节点数的私有成员变量

CSprite*m_pSpriteList;

//精灵指针

5.精灵父类CGameSprite:

virtual~CGameSprite();

//get方法

6.lessen.x类:

m_iGameState;

//游戏状态0:

结束或者等待开始1:

初始化2游戏进行中.

CSprite*m_pGameBegin;

//游戏开始文字精灵

CMyFighter*m_pMyFighter;

//战机类指针

floatm_iCreatedSpriteCount;

//创造精灵数量

CSpriteListm_SpriteList;

//链表类精灵

CSpriteListdiji;

//链表类敌机

CEffect*die_texiao;

//特效类精灵

5.算法描述

在外星球上,玩家通过键盘WSAD键控制己方战机,通过空格键发射子弹消灭外星球的邪恶战机。

游戏状态m_iGameState分为三种状态0,1,2,其中0表示游戏结束状态,1表示游戏初始化,2则表示游戏运行状态;

01的转换为“空格开始”,初始化函数为GameInit函数;

播放背景音乐。

12的转换自然发生,即游戏初始化函数后会自动将游戏状态从1置为2

2表示游戏运行状态,在该状态,敲击空格发射子弹消灭敌机,消灭敌机分数增加,被敌机打中自身的血量减少。

20的转换是游戏结束。

CGameMain:

:

CGameMain()构造函数

完成初始化工作

初始化状态为0

设置开始按钮

我方战机初始化为空

创造精灵数量初始化为0

GameMainLoop(floatfDeltaTime)

游戏的主循环,根据游戏的状态切换逻辑

1、当当游戏状态为0时,主循环一直循环,但不做处理,而是等待空格键按下,开始游戏。

调用背景音乐。

2、当游戏状态为1时,调用GameInit()方法初始化游戏,然后置游戏状态为2。

当游戏状态为2时,调用GameRun(fDeltaTime)方法,在CGameMain类的GameRun方法中,遍历链接中的每个节点,获得所有敌方战机的节点,让战机执行LoopTick方法,实现战机发射子弹和上下浮动。

3、游戏结束时会执行GameEnd且置状态为0。

GameInit()

完成对各种精灵的初始化

1.播放放在bin中的游戏背景音乐。

2.初始化我方战机为战机类指针”ControlSprite”.设计我方战机的世界边界限制。

3.初始化分数为0.

4.初始化血量为100.

GameRun(floatfDeltaTime)

对于游戏进行的设置

1.如果是我的战机,我方战机初始化

2.敌方战机引用函数CEnemyFighter:

ClassTick(fDeltaTime)进行引用。

3.当游戏状态为2时,调用GameRun(fDeltaTime)方法,在CGameMain类的GameRun方法中,遍历链接中的每个节点,获得所有敌方战机的节点,让战机执行LoopTick方法,实现战机发射子弹和上下浮动。

OnKeyDown(constintiKey,constboolbAltPress,constboolbShiftPress,constboolbCtrlPress)

游戏开始和控制按钮

1、如果空格按下时,游戏未开始,即游戏状态为0,则将游戏状态改为1,运行游戏初始化函数(GameInit)。

隐藏文字精灵“开始游戏”。

2、如果游戏状态是2时,设置战机移动,调用函数OnMove

3、如果空格按下时,战机为空。

则调用函数SetCanFire,按下空格键即可发送子弹。

voidCGameMain:

OnSpriteColSprite(constchar*szSrcName,constchar*szTarName)

设置碰撞的发送方与接收方

1.调用匹配函数cemcmp(szSrcName,””,strlen(“”))==0),如果对象是子弹则继续判断

2.假若是我方战机被子弹击中则血量减少0.5.显示当前血量。

3.假如是对方战机被击中,则得分增加10分,更新显示我方分数。

voidCMyFighter:

OnMove(boolbKeyDown,intiKey)

设置战机飞行速度

编写CMyFighter类OnMove方法代码。

首先判断当前按键是按下还是松开的,其次判断是哪个按键的消息,根据这两个判断,为4个方向的速度矢量赋值。

再次算出X后和Y轴上的速度,并设置战机的速度。

m_pMyFighter->

SetSpriteWorldLimit(WORLD_LIMIT_STICKY,CSystem:

GetScreenLeft()-10.f,CSystem:

GetScreenTop(),CSystem:

GetScreenRight()+200.f,)

设置战机的世界边界

其次在构造函数中将m_pMyFighter赋予NULL的初始值。

再次在GameInit方法中初始化m_pMyFighter。

因为我们用new方法创建了m_pMyFighter对象,分配了内存,所以我们在CGameMain类的析构函数中需要调用delete方法将m_pMyFighter使用的内存释放掉。

m_CurScoreText->

SetTextValue(0);

m_MaxScoreText->

/更新当前等级/HP显示

在CGameMain类的GameInit方法中显示当前积分和最高积分

LoopTick(floatfDeltaTime)

//处理子弹的发射

CMyFighter添加m_fBulletCreateTime,表示子弹的发射间隔,注意在构造函数中初始化为0.3。

然后添加LoopTick方法,处理子弹的发射。

参数为游戏的时间间隔;

CreateBullet(constfloatfPosX,constfloatfPosY)

CGameMain类中添加m_iCreatedSpriteCount属性,表示游戏中发射子弹的数目注意在构造函数中初始化为0。

然后添加CreateBullet方法,参数为子弹的X轴和Y轴坐标。

并在该方法中创建一个子弹类,并设置子弹的位置和速度。

因为模板子弹的方向是朝左,所以需要设置子弹按X轴对称旋转;

IntiPosBase=CSystem:

RandomRange((int)CSystem:

GetScreenTop()+10,(int)CSystem:

GetScreenBottom()-10);

创建战机时,只需要战机不显示在世界边界之外就可以,即Y轴坐标在比世界边界的上下边界稍微大一点的范围之间,在此我们设置比世界边界大10个世界坐标单位。

voidCEnemyFighter:

在函数中添加代码,当表示战机创建之后,隔多久才可以开始发射子弹的变量递减到小于等于0时,开始可以创建子弹,然后开始递减子弹的发射间隔变量,当递减到小于等于0时,战机发射子弹。

if(m_bFloatUp)

添加战机上下浮动的代码。

当战机浮动时,首先累计浮动的时间,当浮动时间大于1和小于0时,修改上浮还是下浮的变量值。

然后获得战机此时的Y轴坐标,我们设置上下浮动的速度为6,这样就可以计算出浮动后的Y轴坐标。

CreateBullet(intiType,constfloatfPosX,constfloatfPosY)

为CBullet添加一个表示该子弹是谁发射的变量。

if(1==iType)//如果iType值为1,则说明子弹为敌方战机反射。

SpriteStruct*CSpriteList:

AddSprite(CSprite*pSprite)

为链接类添加增加节点的方法

voidCSpriteList:

DeleteSprite(constchar*szName,boolbDeleteImage)

添加根据精灵名称删除其在链接中的节点的方法。

其中第二个参数表示是否将其在游戏中的精灵也删除。

CSprite*CSpriteList:

GetSprite(constintiIndex)

添加获得链接中某个节点的方法。

首先根据索引获得精灵。

DeleteSprite(constchar*szName,boolbDeleteImage)

根据名字删除精灵

DeleteSprite(CSprite*pSprite,boolbDeleteImage)

根据精灵对象删除精灵

 

源代码

Lessenx.h

public:

CGameMain();

//构造函数

~CGameMain();

//析构函数

//Get方法

intGetGameState(){returnm_iGameState;

}

//Set方法

voidSetGameState(constintiState){m_iGameState=iState;

//游戏主循环等

voidGameMainLoop(floatfDeltaTime);

voidGameInit();

voidGameRun(floatfDeltaTime);

voidGameEnd();

//事件函数

voidOnMouseMove(constfloatfMouseX,constfloatfMouseY);

voidOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY);

voidOnKeyDown(constintiKey,constboolbAltPress,constboolbShiftPress,constboolbCtrlPress);

voidOnKeyUp(constintiKey);

voidOnSpriteColSprite(constchar*szSrcName,constchar*szTarName);

voidOnSpriteColWorldLimit(constchar*szName,constintiColSide);

voidCreateBullet(intiType,constfloatfPosX,constfloatfPosY);

voidAddSprite(CSprite*pSprite);

CSprite*GetSprite(constchar*szName){returnm_SpriteList.GetSprite(szName);

}

voidDeleteSprite(CSprite*pSprite,boolbDeleteImage){m_SpriteList.DeleteSprite(pSprite,bDeleteImage);

/////////////////////////////////////////////////////////////////////////////////

//

externCGameMaing_GameMain;

#endif//_LESSON_X_H_

Lessenx.cpp

//

#include<

Stdio.h>

#include"

CommonClass.h"

#include"

CSpriteList.h"

LessonX.h"

CBullet.h"

CEnemyFighter.h"

string.h>

inta=100,b=0;

CTextSprite*g_CurScoreText=newCTextSprite("

CurScoreText"

);

//显示当前积分

CTextSprite*g_MaxScoreText=newCTextSprite("

MaxScoreText"

//显示最高分

//CEffect*die_texiao=newCEffect("

playerExplode"

////////////////////////////////////////////////////////////////////////////////

CGameMaing_GameMain;

//==============================================================================

//大体的程序流程为:

GameMainLoop函数为主循环函数,在引擎每帧刷新屏幕图像之后,都会被调用一次。

//构造函数

CGameMain()

m_iGameState=0;

m_pGameBegin=newCSprite("

GameBegin"

m_pMyFighter=NULL;

m_iCreatedSpriteCount=0;

//析构函数

~CGameMain()

deletem_pMyFighter;

//游戏主循环,此函数将被不停的调用,引擎每刷新一次屏幕,此函数即被调用一次

//用以处理游戏的开始、进行中、结束等各种状态.

//函数参数fDeltaTime:

上次调用本函数到此次调用本函数的时间间隔,单位:

GameMainLoop(floatfDeltaTime)

switch(GetGameState())

{

//初始化游戏,清空上一局相关数据

case1:

{

GameInit();

SetGameState

(2);

//初始化之后,将游戏状态设置为进行中

}

break;

//游戏进行中,处理各种游戏逻辑

case2:

//TODO修改此处游戏循环条件,完成正确游戏逻辑

if(true)

{

GameRun(fDeltaTime);

}

else//游戏结束。

调用游戏结算函数,并把游戏状态修改为结束状态

{

SetGameState(0);

GameEnd();

//游戏结束/等待按空格键开始

case0:

default:

};

//=============================================================================

//每局开始前进行初始化,清空上一局相关数据

{

PlaySound("

yinyue"

0,SND_FILENAME|SND_ASYNC|SND_LOOP);

if(NULL==m_pMyFighter)

m_pMyFighter=newCMyFighter("

ControlSprite"

GetScreenRight()+200.f,CSystem:

GetScreenBottom());

g_CurScoreText->

SetTextValue(100);

g_MaxScoreText->

//每局游戏进行中

GameRun(floatfDeltaTime)

if(m_pMyFighter)

m_pMyFighter->

LoopTick(fDeltaTime);

CEnemyFighter:

ClassTick(fDeltaTime);

intiListSize=m_SpriteList.GetListSize();

for(intiLoop=0;

iLoop<

iListSize;

iLoop++)

CEnemyFighter*pSprite=(CEnemyFighter*)m_SpriteList.GetSprite(iLoop);

if(NULL!

=pSprite)

pSprite->

//本局游戏结束

GameEnd()

OnMouseMove(constfloatfMouseX,constfloatfMouseY)

OnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY)

OnKeyDown(constintiKey,constboolbAltPress,constboolbShiftPress,constboolbCtrlPress)

if(KEY_SPACE==iKey&

&

0==m_iGameState)

m_iGameState=1;

m_pGameBegin->

SetSpriteVisible(0);

if(2==GetGameState())//当游戏状态为2时

OnMove(true,iKey);

if(KEY_SPACE==iKey

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2