发布时间 : 星期五 文章07 C++程序设计 - 打飞碟 - 图文更新完毕开始阅读b880008e18e8b8f67c1cfad6195f312b3169eb3d
C++语言课程设计一打飞碟
一、实验内容
玩家通过鼠标控制大炮发射炮弹,击中飞碟获得相应的分数。 要求如下:
1、 游戏的初始界面如图,单击空格键开始游戏。左上方有两个文字编辑精灵用于记录
游戏的剩余时间和分数。下方有五个文字精灵用于记录分数最高的前五个。
2、 单击空格键之后,通过鼠标控制大炮的炮口朝向和发射,准心精灵随鼠标的移动而
移动。三种不同大小的飞碟从右上角飞下,当把准心移动到飞碟身上,单击鼠标左键,则大炮发射炮弹。
3、 大炮发射炮弹的时候炮口有真实场景中开火的效果,炮弹击中飞碟后有爆炸的效
果。
4、 三种飞碟大小不一样,下落速度不同,同时被击中后所能获取的分数也不同。如果
飞碟没有被击中,则飞碟从右下方飞出,删除该飞碟实体。
二、实验指南
实验一开始实验
【实验任务】
步骤一、打开FunCode,创建一个的C++语言项目; 步骤二、导入UFO模板。
【实验思路】 按实验指导完成。
【实验指导】
1、 打开FunCode,点击“项目”菜单,选择“创建C++工程”
注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。 2、 点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“UFO”
模板,点击“导入到工程”按钮,如图二。
图 一 图 二
3、 导入成功后的,界面如下图所示:
地图不仅包括界面设计,还包括该游戏可能要用到的其他精灵。添加到“场景”中的精灵,都已经取好名称,并根据程序要求设置好中心点、链接点等,学生只需要直接编程就可以。
实验二 改变大炮炮口朝向
【实验内容】
步骤一、准心随鼠标移动 步骤二、剩余时间显示 步骤三、改变大炮炮口朝向
【实验思路】
将鼠标的坐标赋给准心,同时隐藏掉鼠标。同时计算大炮炮口和鼠标之间连续与x方向的夹角,以此来设置炮口朝向,具体可以参加实验指导。
【实验指导】
1、 进入LessonX.h中添加如下的成员变量:
int m_iGameScore ;
float 游戏结束
float
m_fDapaoRotation ;
CSprite* m_pDapao;
// 本局游戏积分
m_fGameTime;// 本局游戏当前已经进行的时间,大于设定的时间之后,
//大炮精灵
//时间文字显示精灵 //分数文字显示精灵 //空格开始精灵 //准心精灵
CTextSprite* m_pTime; CTextSprite* m_pScore; CSprite* m_pKaishi;
CSprite* m_pZhunxing;
2、 在LessonX.h中的头文件声明处添加下面代码,目的是为了下面使用atan2函数,该函数的介绍在文档前面部分:
#include
#define PI 3.141592653589793f
3、 进入LessonX.cpp中的构造函数里面添加以上变量的初始化代码:
m_iGameState m_iGameScore
=0; =0;
m_pDapao m_pTime m_pKaishi
m_pScore
=new CSprite(\=new CTextSprite(\=new CSprite(\
=new CSprite(\
=new CTextSprite(\
m_pZhunxing
4、 在GameInit函数里面将大炮的初始角度保存下来,添加如下一行代码:
m_fDapaoRotation=m_pDapao->GetSpriteRotation();
5、 首先要让游戏启动的时候单击空格键进入游戏,就要响应键盘按下的消息,判断系统获得的键值是否是空格键的键值。这里需要添加一个自定义函数OnKeyDown函数。
1) 进入LessonX.h中添加该函数的声明:
void
OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress,
const int iCtrlPress );
2) 进入LessonX.cpp中添加该函数的定义:
void CGameMain::OnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) { }
3) 判断是否按下空格键,如果是的话则设置游戏的剩余时间,同时隐藏掉空格开
始精灵和鼠标。在上面的函数定义里面添加如下代码:
// 游戏还未开始,按下空格键,游戏开始。
if( KEY_SPACE == iKey && 0 == m_iGameState ) { }
m_iGameState = m_iGameScore = m_fGameTime
1; // 游戏开始 0; =
30.f;//游戏剩余时间
// 每局游戏开始,初始得分为0 m_pScore->SetTextValue( m_iGameScore ); // 每局游戏开始,初始时间为30
m_pTime->SetTextValue((int)m_fGameTime); // 隐藏 \空格开始\提示图片 m_pKaishi->SetSpriteVisible( false ); // 隐藏鼠标
CSystem::ShowCursor( false );
4) 在Main.cpp中的OnKeyDown函数里面添加这个自定义函数的调用:
g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);
6、 进入游戏,使准心随鼠标移动,则需要获取到鼠标的坐标,同时赋给准心精灵,需
要添加一个自定义函数OnMouseMove。 1) 进入LessonX.h中添加该函数的声明:
void OnMouseMove( const float fMouseX, const float fMouseY );
2) 进入LessonX.cpp中添加该函数的定义:
void CGameMain::OnMouseMove( const float fMouseX, const float fMouseY ) {