1、步骤二、导入KillFeiChong模板。【实验思路】按实验指导完成。1、打开FunCode,点击“项目”菜单,选择“创建C+工程”注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。2、点击菜单“项目”中的“导入地图模块”,如图一。跳出一个对话框,选中“KillFeiChong”模板,点击“导入到工程”按钮,如图二。 图 一 图 二3、导入成功后的,界面如下图所示:实验二移动拍子【实验内容】步骤一、单击空格键开始游戏步骤二、初始化游戏数据步骤三、移动拍子 获取系统响应键盘按下的消息函数的数据,如果是空格键则进入游戏界面,初始化游戏数据。同时获取鼠标的坐标,设置为拍子精灵的
2、坐标。【实验指导】1、进入LessonX.h中,添加如下的成员变量声明: CSprite* m_pPaizi; /拍子精灵 CSprite* m_pKaishi; /空格开始精灵 float m_fGameTime ; / 本局游戏剩余时间 CTextSprite* m_pTime; /显示时间文字编辑精灵 CTextSprite* m_pScore; /显示分数文件编辑精灵 float m_fPosX; /拍子精灵的x坐标 float m_fPosY; /拍子精灵的y坐标 int m_iGameScore ; / 本局游戏当前积分值2、进入LessonX.cpp中添加以上变量的初始化代码:1
3、)在构造函数中添加如下代码:m_fGameTime =0.f;m_iGameScore = 0;m_fPosX =0.f;m_fPosY =0.f;m_pKaishi =new CSprite(kaishi);m_pPaizi =new CSprite(paizim_pTime =new CTextSprite(Timem_pScore =new CTextSprite(Score2)在GameInit中获取拍子的初始位置: m_fPosX=m_pPaizi-GetSpritePositionX(); m_fPosY=m_pPaizi-GetSpritePositionY();3、要实现单击空
4、格键进入游戏,就需要添加一个自定义函数处理系统键盘按下事件中得到的数据。1)进入LessonX.h中添加自定义函数OnKeyDown的声明: void OnKeyDown( const int iKey, const int bAltPress, const int bShiftPress, const int bCtrlPress );2)进入LessonX.cpp中添加该函数的定义代码:void CGameMain:OnKeyDown( const int iKey, const int bAltPress, const int bShiftPress, const int bCtrlPr
5、ess )3)首先要判断得到的键盘键值是不是空格键,以及游戏的状态是不是等待开始状态,是的话则设置游戏状态为初始化,更新分数显示和游戏剩余时间,隐藏空格开始精灵和鼠标。在上面的函数定义里面添加如下的代码: if( KEY_SPACE = iKey & 0 = m_iGameState ) m_iGameState = 1; m_iGameScore = 0; m_fGameTime = 5.f; /游戏总共的时间 / 更新当前游戏积分显示(清零上一局积分显示值) m_pScore-SetTextValue(m_iGameScore); / 更新当前游戏剩余时间显示, 由于游戏刚开始,所以直接设
6、置为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,这
7、样整体效果是游戏时间在不断的减少,判断游戏时间如果小于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;Show
8、Cursor(true); m_pPaizi-SetSpritePosition(m_fPosX,m_fPosY);5、要使拍子随鼠标移动,则要通过系统获取到鼠标的坐标位置,然后用SetSpritePosition设置拍子精灵的位置即可。1)进入LessonX.h中添加我们的自定义函数声明: void OnMouseMove( const float fMouseX, const float fMouseY );2)进入LessonX.cpp中添加该函数的定义:OnMouseMove( const float fMouseX, const float fMouseY )3)如果当前游戏状态是初
9、始化或者正在进行中,则将鼠标位置赋给拍子,在上面的函数中添加如下代码: if(m_iGameState=1|m_iGameState=2)SetSpritePosition(fMouseX, fMouseY);4)在Main.cpp中的OnMouseMove函数中添加对我们自定义函数的调用: g_GameMain.OnMouseMove(fMouseX,fMouseY);实验三拍子模拟拍打动作步骤一、拍子模拟拍打飞虫的动作 在系统鼠标单击函数里面处理拍子拍打动作。设置拍子角度改变,同时设置一个动作时间,在游戏过程中不断减少该时间的值,如果改值为0,则恢复拍子的角度,这样整体的效果就是拍打的动作
10、。1、进入LessonX.h中添加下面的成员变量声明:float m_fRotateTime ; / 拍子拍下后距离复位还差多少时间 float m_fOldRotation ; / 拍子的初始角度2、在LessonX.cpp的构造函数中初始化以上的成员变量: m_fRotateTime =0.f; m_fOldRotation =0.f;3、获取拍子的初始角度并保存,在GameInit中添加下面一行代码: m_fOldRotation=m_pPaizi-GetSpriteRotation();4、添加一个自定义函数来处理拍子角度改变的动作。1)在LessonX.h中添加自定义函数的声明: v
11、oid OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY );2)在LessonX.cpp中添加该函数的定义:OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )3)判断游戏的状态是否是初始化或者进行中,是的话则改变拍子的角度,设置一个拍下的动作时间。在上面的函数定义中添加以下代码:SetSpriteRotation(m_fOldRotation - 10); m_fRotateTime
12、= 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 SetSpriteRotation(m_fOldRotation); 6、为了让游戏时间长一点,这样我们可以方便测试实验目
13、的是否达到,我们可以将LessonX.cpp的OnKeyDown中将游戏时间设置为m_fGameTime = 15.f;至此,本实验结束。实验四模拟拍打飞虫步骤一、创建飞虫精灵步骤二、判断拍子是否打中飞虫步骤三、改变飞虫位置 创建一个飞虫精灵,使它从世界边界的一侧飞到令一侧,如果碰到世界边界,则随机改变飞虫的位置,从世界边界的另一个位置出现,循环上述动作。飞虫飞行过程中,判断飞虫的中心点是否在拍子精灵中,如果是则中断飞行动作,随机从世界边界另一个位置出现,这样就实现了拍子拍打飞虫的效果了。1、进入LessonX.h中添加如下的成员变量声明: float m_fScreenLeft ;/ 屏幕的4个边界值:上下左右 float m_fScreenRight
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1