C++语言课程设计一拍飞虫Word下载.docx
《C++语言课程设计一拍飞虫Word下载.docx》由会员分享,可在线阅读,更多相关《C++语言课程设计一拍飞虫Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
步骤二、导入KillFeiChong模板。
【实验思路】
按实验指导完成。
1、打开FunCode,点击“项目”菜单,选择“创建C++工程”
注意:
工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。
2、点击菜单“项目”中的“导入地图模块”,如图一。
跳出一个对话框,选中“KillFeiChong”模板,点击“导入到工程”按钮,如图二。
图一图二
3、导入成功后的,界面如下图所示:
实验二移动拍子
【实验内容】
步骤一、单击空格键开始游戏
步骤二、初始化游戏数据
步骤三、移动拍子
获取系统响应键盘按下的消息函数的数据,如果是空格键则进入游戏界面,初始化游戏数据。
同时获取鼠标的坐标,设置为拍子精灵的坐标。
【实验指导】
1、进入LessonX.h中,添加如下的成员变量声明:
CSprite*m_pPaizi;
//拍子精灵
CSprite*m_pKaishi;
//空格开始精灵
floatm_fGameTime;
//本局游戏剩余时间
CTextSprite*m_pTime;
//显示时间文字编辑精灵
CTextSprite*m_pScore;
//显示分数文件编辑精灵
floatm_fPosX;
//拍子精灵的x坐标
floatm_fPosY;
//拍子精灵的y坐标
intm_iGameScore;
//本局游戏当前积分值
2、进入LessonX.cpp中添加以上变量的初始化代码:
1)在构造函数中添加如下代码:
m_fGameTime=0.f;
m_iGameScore=0;
m_fPosX=0.f;
m_fPosY=0.f;
m_pKaishi=newCSprite("
kaishi"
);
m_pPaizi=newCSprite("
paizi"
m_pTime=newCTextSprite("
Time"
m_pScore=newCTextSprite("
Score"
2)在GameInit中获取拍子的初始位置:
m_fPosX=m_pPaizi->
GetSpritePositionX();
m_fPosY=m_pPaizi->
GetSpritePositionY();
3、要实现单击空格键进入游戏,就需要添加一个自定义函数处理系统键盘按下事件中得到的数据。
1)进入LessonX.h中添加自定义函数OnKeyDown的声明:
voidOnKeyDown(constintiKey,constintbAltPress,constintbShiftPress,constintbCtrlPress);
2)进入LessonX.cpp中添加该函数的定义代码:
voidCGameMain:
:
OnKeyDown(constintiKey,constintbAltPress,constintbShiftPress,constintbCtrlPress)
{
}
3)首先要判断得到的键盘键值是不是空格键,以及游戏的状态是不是等待开始状态,是的话则设置游戏状态为初始化,更新分数显示和游戏剩余时间,隐藏空格开始精灵和鼠标。
在上面的函数定义里面添加如下的代码:
if(KEY_SPACE==iKey&
&
0==m_iGameState)
{
m_iGameState=1;
m_iGameScore=0;
m_fGameTime=5.f;
//游戏总共的时间
//更新当前游戏积分显示(清零上一局积分显示值)
m_pScore->
SetTextValue(m_iGameScore);
//更新当前游戏剩余时间显示,由于游戏刚开始,所以直接设置为g_fMaxGameTime
m_pTime->
SetTextValue(m_fGameTime);
//隐藏"
按空格开始游戏"
这个提示图片
m_pKaishi->
SetSpriteVisible(false);
//隐藏鼠标
CSystem:
ShowCursor(false);
}
4)最后在Main.cpp中的OnKeyDown函数里面添加对我们自定义函数的调用:
g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);
4、游戏初始化之后,每次系统刷新界面的时候对游戏总共的时间m_fGameTime减去一个fDeltaTime,这样整体效果是游戏时间在不断的减少,判断游戏时间如果小于0,则游戏结束,回到空格开始界面。
如果不是,则在地图的左上角消失当前剩余的时间。
在GameRun函数里面添加如下代码:
1)游戏总时间减少:
m_fGameTime-=fDeltaTime;
2)判断游戏时间是否大于0,是的话,显示游戏剩余时间:
if(m_fGameTime>
0)
SetTextValue((int)m_fGameTime);
}
3)如果游戏时间小于等于0,则设置游戏状态为等待开始,添加如下代码:
else{
m_iGameState=0;
SetSpriteVisible(true);
m_fGameTime=0.f;
ShowCursor(true);
m_pPaizi->
SetSpritePosition(m_fPosX,m_fPosY);
5、要使拍子随鼠标移动,则要通过系统获取到鼠标的坐标位置,然后用SetSpritePosition设置拍子精灵的位置即可。
1)进入LessonX.h中添加我们的自定义函数声明:
voidOnMouseMove(constfloatfMouseX,constfloatfMouseY);
2)进入LessonX.cpp中添加该函数的定义:
OnMouseMove(constfloatfMouseX,constfloatfMouseY)
3)如果当前游戏状态是初始化或者正在进行中,则将鼠标位置赋给拍子,在上面的函数中添加如下代码:
if(m_iGameState==1||m_iGameState==2)
SetSpritePosition(fMouseX,fMouseY);
4)在Main.cpp中的OnMouseMove函数中添加对我们自定义函数的调用:
g_GameMain.OnMouseMove(fMouseX,fMouseY);
实验三拍子模拟拍打动作
步骤一、拍子模拟拍打飞虫的动作
在系统鼠标单击函数里面处理拍子拍打动作。
设置拍子角度改变,同时设置一个动作时间,在游戏过程中不断减少该时间的值,如果改值为0,则恢复拍子的角度,这样整体的效果就是拍打的动作。
1、进入LessonX.h中添加下面的成员变量声明:
floatm_fRotateTime;
//拍子拍下后距离复位还差多少时间
floatm_fOldRotation;
//拍子的初始角度
2、在LessonX.cpp的构造函数中初始化以上的成员变量:
m_fRotateTime=0.f;
m_fOldRotation=0.f;
3、获取拍子的初始角度并保存,在GameInit中添加下面一行代码:
m_fOldRotation=m_pPaizi->
GetSpriteRotation();
4、添加一个自定义函数来处理拍子角度改变的动作。
1)在LessonX.h中添加自定义函数的声明:
voidOnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY);
2)在LessonX.cpp中添加该函数的定义:
OnMouseClick(constintiMouseType,constfloatfMouseX,constfloatfMouseY)
3)判断游戏的状态是否是初始化或者进行中,是的话则改变拍子的角度,设置一个拍下的动作时间。
在上面的函数定义中添加以下代码:
SetSpriteRotation(m_fOldRotation-10);
m_fRotateTime=0.2f;
}
4)在Main.cpp中的OnMouseClick函数中添加对自定义函数的调用:
g_GameMain.OnMouseClick(iMouseType,fMouseX,fMouseY);
5、在游戏中判断拍子拍下后,动作时间是否达到了0,是的话恢复拍子的角度。
在GameRun的if(m_fGameTime>
0)判断里面添加下面的代码:
if(m_fRotateTime>
{
m_fRotateTime-=fDeltaTime;
if(m_fRotateTime<
=0)
{
m_pPaizi->
SetSpriteRotation(m_fOldRotation);
}
6、为了让游戏时间长一点,这样我们可以方便测试实验目的是否达到,我们可以将LessonX.cpp的OnKeyDown中将游戏时间设置为m_fGameTime=15.f;
至此,本实验结束。
实验四模拟拍打飞虫
步骤一、创建飞虫精灵
步骤二、判断拍子是否打中飞虫
步骤三、改变飞虫位置
创建一个飞虫精灵,使它从世界边界的一侧飞到令一侧,如果碰到世界边界,则随机改变飞虫的位置,从世界边界的另一个位置出现,循环上述动作。
飞虫飞行过程中,判断飞虫的中心点是否在拍子精灵中,如果是则中断飞行动作,随机从世界边界另一个位置出现,这样就实现了拍子拍打飞虫的效果了。
1、进入LessonX.h中添加如下的成员变量声明:
floatm_fScreenLeft;
//屏幕的4个边界值:
上下左右
floatm_fScreenRight