C课程设计贪吃鱼
精品文档---下载后可任意编辑 C++面对对象课程设计 实验指南 上海锐格软件有限公司 课程设计二 贪吃鱼 一、游戏介绍 贪吃鱼是玩家用WSAD键控制鱼上下左右运动,吃掉其中比自己等级小或者相等的鱼。鱼从右侧游向左侧。游戏中有两种鱼,其中一种假如被自己等级高,就被吃掉了,另一种鱼假如等级比自己高,只扣除一定的生命值。吃到越多的鱼,小鱼就会相应的长大。 二、实验目的 综合应用C++语言和面对对象的知识开发一款小游戏。 三、实验内容 在一个深海里,玩家通过键盘WSAD键控制己方小鱼移动,吃到其中比自己等级低或者等级相等的鱼。 要求如下: 1、 游戏运行时,初始界面如下图。 2、 按下空格键,游戏开始,玩家通过WSAD键控制小鱼移动;小鱼不能游出世界边界。 3、 有2种类型的鱼,普通鱼和特别鱼。碰到普通鱼时,假如等级比自己高,小鱼就被吃掉了。碰到特别鱼,假如等级比自己高,小鱼只是被扣掉一定的生命值。 4、 敌方的小鱼都是从右向左一定。 5、 玩家小鱼被吃掉后,游戏停止,重新显示初始界面。 游戏初始界面 四、实验指南 实验准备 打开FunCode,创建一个新的C++项目。注意:项目名称必须为英文和数字,且不能有空格。 点击“项目”→“导入地图模板”,从对话框中选取名称为eatfish的模板导入。导入成功后,界面如下: 实验一游戏开始和控制玩家小鱼 【实验内容】 1、 按空格键,游戏开始,“空格开始”字样消逝。 2、 创建CMyFish类,并创建对象实例玩家控制的小鱼。 3、 小鱼的初始大小为原大小的1/4。 4、 小鱼左右运动的速度为30。上下运动的速度为15。 5、 小鱼碰到世界边界时,静止。 6、 游戏开始后,通过键盘WSAD键控制小鱼移动。 7、 在游戏中显示游戏的等级和玩家控制的鱼的HP。 【实验思路】 按空格键开始游戏,属于键盘按下事件,我们在dOnKeyDown函数中编写代码。在游戏中,我们运用面对对象的知识将小鱼看成一个对象,并为这个对象添加一个类叫CMyFish。类具有属性和方法,要控制小鱼能在各个方向上自由的游动,我们为CMyFish类添加上下左右四个方向的速度,并且我们为小鱼添加OnMove方法控制小鱼的游动状态。 【实验指导】 1、 在OnKeyDown中,当按下的按键为空格键并且此时的游戏状态为0,则设置游戏的状态为1。0表示此时游戏为等待状态,未开始。1表示游戏进行初始化,初始化后会进入2游戏运行状态。 // 按下空格键,游戏开始 if( KEY_SPACE == iKey } 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(const char *szName); virtual ~CMyFish(); public: void OnMove(bool bKeyDown,int iKey); private: floatm_fVelocityLeft;// 控制的鱼的上下左右游动速度 floatm_fVelocityRight; floatm_fVelocityUp; floatm_fVelocityDown; }; 4、 在CMyFish类的构造函数中,首先初始4个方向的速度为0,然后设置小鱼缩小到原图的1/4,最后设置和世界边界的碰撞属性为WORLD_LIMIT_STICKY,当碰到世界边界时,小鱼静止不动。而小鱼的世界边界大小,我们设置为比屏幕的大小大2个单位。 // 设置鱼的模型大小为1/4 SetSpriteScale( 0.25f ); // 世界边界限制 SetSpriteWorldLimit( WORLD_LIMIT_STICKY, CSystem::GetScreenLeft()-2.f, CSystem::GetScreenTop() - 2.f, CSystem::GetScreenRight() + 2.f, CSystem::GetScreenBottom() + 2.f ); 5、 编写CMyFish类OnMove方法代码。首先推断当前按键是按下还是松开的,其次推断是哪个按键的消息,根据这两个推断,为4个方向的速度矢量赋值。再次算出X后和Y轴上的速度,并设置小鱼的速度。最后根据X轴方向的速度值设置鱼的朝向。当速度不为0的时候,更改鱼的朝向。 void CMyFish::OnMove(bool bKeyDown,int iKey) { if(bKeyDown) { 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_fVel