好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

10C课程设计贪吃鱼汇总.doc

17页
  • 卖家[上传人]:工****
  • 文档编号:465768204
  • 上传时间:2022-12-14
  • 文档格式:DOC
  • 文档大小:178KB
  • / 17 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Fun Code程序设计实验教材系列C++面向对象课程设计实验指南上海锐格软件有限公司课程设计二贪吃鱼一、游戏介绍贪吃鱼是玩家用 WSAD键控制鱼上下左右运动,吃掉其中比自己等级小或者相等的鱼 鱼从右侧游向左侧 游戏中有两种鱼,其中一种如果被自己等级高,就被吃掉了, 另一种鱼如果等级比自己高,只扣除一定的生命值吃到越多的鱼,小鱼就会相应的长大二、实验目的综合应用C++语言和面向对象的知识开发一款小游戏三、实验内容在一个深海里,玩家通过键盘 WSAD键控制己方小鱼移动, 吃到其中比自己等级低或者 等级相等的鱼要求如下:1、 游戏运行时,初始界面如下图2、 按下空格键,游戏开始,玩家通过WSAD键控制小鱼移动;小鱼不能游出世界边界3、 有2种类型的鱼,普通鱼和特殊鱼碰到普通鱼时,如果等级比自己高,小鱼就被 吃掉了碰到特殊鱼,如果等级比自己高,小鱼只是被扣掉一定的生命值4、 敌方的小鱼都是从右向左一定5、 玩家小鱼被吃掉后,游戏停止,重新显示初始界面游戏初始界面四、实验指南实验准备打开Fun Code,创建一个新的 C++项目注意:项目名称必须为英文和数字,且不能有 空格点击“项目”7“导入地图模板”,从对话框中选取名称为 eatfish的模板导入。

      导入 成功后,界面如下:实验一 游戏开始和控制玩家小鱼【实验内容】1、 按空格键,游戏开始, “空格开始 ”字样消失2、 创建CMyFish类,并创建对象实例玩家控制的小鱼3、 小鱼的初始大小为原大小的 1/44、 小鱼左右运动的速度为 30上下运动的速度为 155、 小鱼碰到世界边界时,静止6、 游戏开始后,通过键盘 WSAD键控制小鱼移动7、 在游戏中显示游戏的等级和玩家控制的鱼的 HP实验思路】按空格键开始游戏, 属于键盘按下事件, 我们在 dOnKeyDown 函数中编写代码 在游戏 中,我们运用面向对象的知识将小鱼看成一个对象,并为这个对象添加一个类叫 CMyFish类具有属性和方法,要控制小鱼能在各个方向上自由的游动, 我们为CMyFish类添加上下左 右四个方向的速度,并且我们为小鱼添加 OnMove 方法控制小鱼的游动状态实验指导】1、 在 OnKeyDown 中,当按下的按键为空格键并且此时的游戏状态为 0,则设置游戏的 状态为 1 0 表示此时游戏为等待状态,未开始 1 表示游戏进行初始化,初始化后 会进入 2 游戏运行状态// 按下空格键,游戏开始if( KEY_SPACE == iKey && 0 == GetGameState() ){SetGameState( 1 );}2、 在游戏初始化函数 GameInit 中隐藏 "按空格开始游戏 " 这个提示图片。

      在 CGameMain 中添加成员变量:CSprite * m_pBeginSprite;在 CGameMain 的构造函数中进行初始化:m_pBeginSprite = new CSprite("kaishi");在 GameInit 中添加一下代码:m_pBeginSprite->SetSpriteVisible( false );3、 通过类向导创建 CMyFish 类首先添加向左、向右、向上、向下 4 个方向的运动速 度属性添加 OnMove 方法控制小鱼的游动, bKeyDown 表示键盘时按下的, iKey 表示相应的是哪个按键class CMyFish : public CSprite{public:CMyFish(co nst char *szName);virtual ~CMyFish();public:void OnM ove(bool bKeyDow n,i nt iKey);private:floatm_fVelocityLeft;floatm_fVelocityRight;floatm_fVelocityUp;float m_fVelocityDow n;//控制的鱼的上下左右游动速度};4、在CMyFish类的构造函数中,首先初始 4个方向的速度为0,然后设置小鱼缩小到原图的1/4,最后设置和世界边界的碰撞属性为 WORLD_LIMIT_STICKY当碰到世界边界时,小鱼静止不动。

      而小鱼的世界边界大小,我们设置为比屏幕的大小大 2个单位//设置鱼的模型大小为 1/4SetSpriteScale( 0.25f );//世界边界限制SetSpriteWorldLimit( WORLD_LIMIT_STICK YCSystem::GetScree nLeft()-2.f,CSystem::GetScreenTop() - 2.f, CSystem::GetScree nRight() + 2.f, CSystem::GetScree nBottom() + 2.f );5、编写CMyFish类On Move方法代码首先判断当前按键是按下还是松开的,其次判 断是哪个按键的消息,根据这两个判断,为 4个方向的速度矢量赋值再次算出 X后和Y轴上的速度,并设置小鱼的速度最后根据X轴方向的速度值设置鱼的朝向 当速度不为0的时候,更改鱼的朝向void CMyFish:: OnMo ve(bool bKeyDow n,in t iKey) {if(bKeyDow n){switch(iKey){case KEY_A: // 左m_fVelocityLeft = 30.f;break;case KEY_D: // 右 m_fVelocityRight = 30.f; break;case KEY_W: // 上m_fVelocityUp = 15.f;break;case KEY_S: // 下 m_fVelocityDown = 15.f; break;}}else{switch(iKey){case KEY_A: // 左 m_fVelocityLeft = 0.f; break;case KEY_D: // 右 m_fVelocityRight = 0.f; break;case KEY_W: // 上 m_fVelocityUp = 0.f; break;case KEY_S: // 下 m_fVelocityDown = 0.f; break;}}float fVelX = m_fVelocityRight - m_fVelocityLeft;float fVelY = m_fVelocityDown - m_fVelocityUp;SetSpriteLinearVelocity( fVelX,fVelY );// 当速度不为 0 的时候,更改鱼的朝向if( fVelX < -0.0001f || fVelX > 0.0001f ){if( fVelX > 0.0001f )SetSpriteFlipX( false );elseSetSpriteFlipX( true );}}6、 在 CGameMain 类中,首先添加一个小鱼对象的指针 m_pMyFish 。

      其次在构造函数中将 m_pMyFish赋予NULL的初始值再次在 Gamelnit方法中初始化 m_pMyFish 因为我们用 new 方法创建了 m_pMyFish 对象, 分配了内存 ,所以我们在 CGameMain 类的析构函数中需要调用 delete 方法将 m_pMyFish 使用的内存释放掉if( NULL == m_pMyFish ){//创建对象实例m_pMyFish = new CMyFish("ko ngzhiyu");}7、 在On KeyDow n和On keyUp中响应小鱼 On Move方法,它们的区别只是第一个参数 的值不同下面是 OnKeyDown方法中的调用if( 2 == GetGameState()){m_pMyFish-> OnM ove(true,iKey);}8、 在CGameMain类的GameInit方法中显示当前等级和分数 m_pLevelText和 m_pHpText需要在CGameMain类中声明,并在其构造函数中定义,其类类型为 CTextSprite//更新当前等级/HP显示m_pLevelText->SetTextValue( 1 ); // 等级设置为 1 m_pHpText->SetTextValue( 0 ); // 分数设置为 0实验二为游戏添加各种小鱼【实验内容】1、 创建普通鱼 CNormalFish类;2、 新添的小鱼一共有 4种,从鱼类模板中随机生成;3、 间隔1到2秒生成一只小鱼;4、 小鱼以随机速度从右向左移动;5、 小鱼碰到世界边界后消失;【实验思路】我们将在游戏中出现的敌方小鱼看成对象, 这些对象具有共同的属性和方法, 因此我们创建一个CNormalFish类。

      并且给这些鱼一定的速度, 让他们从产生就开始运动, 游过屏幕, 然后到达世界边界的另一端就被删除实验指导】1、 根据类向导创建 CNormalFish类//普通类型的鱼,有等级属性我们控制的鱼如果等级大于等于此鱼,则可以吃 //掉其,如果小于,则被吃掉class CNormalFish : public CSprite{public:CNormalFish( const char *szName);~CNormalFish() {}};2、 在CNormalFish类的构造函数中首先生成一个 1到100的随机数,根据随机数的大小,我们选择不同的小鱼模板当随机数小于 15时我们选择yu_muban4的小鱼做为模板,当随机数在[15,35]区间时,我们选择yu_muban3做为模板,当随机数在 [35,60]区间时,我们选择 yu_muban2做为模板,当随机数在[60,100]区间,我们选 择yu_muban1做为模板int iRan dom = CSystem::Ra ndomRa nge( 1, 100 );if( iRan dom < 15 ){CloneSprite( "yu_muban4");}else if( iRandom < 35 ){CloneSprite( "yu_muban3");}else if( iRandom < 60 ){CloneSprite( "yu_muban2");}else{CloneSprite( "yu_muban1");}3、 接着为小鱼设置 X轴坐标和一个随机的 Y轴坐标。

      因为小鱼从右向左游,因此 X坐标在世界边界的右边一些 而Y轴坐标的区间在世界边界的 Top和Bottom值之间同时因为小鱼向右游,我们需要将鱼的朝向改为朝向 X轴的负方向iRa ndom=CSystem::Ra ndomRa nge((i nt)CSystem::GetScree nTop(),(in t)CSystem::GetScree nBottom());SetSpritePosition(CSystem::GetScreenRight() + 1O.f, (float)iRandom );SetSpriteFlipX( true );。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.