10 C++课程设计 - 贪吃鱼 - 图文 联系客服

发布时间 : 星期三 文章10 C++课程设计 - 贪吃鱼 - 图文更新完毕开始阅读

FunCode程序设计实验教材系列

C++面向对象课程设计

实验指南

上海锐格软件有限公司

上海锐格软件有限公司

课程设计二 贪吃鱼

一、游戏介绍

贪吃鱼是玩家用WSAD键控制鱼上下左右运动,吃掉其中比自己等级小或者相等的鱼。鱼从右侧游向左侧。游戏中有两种鱼,其中一种如果被自己等级高,就被吃掉了,另一种鱼如果等级比自己高,只扣除一定的生命值。吃到越多的鱼,小鱼就会相应的长大。

二、实验目的

综合应用C++语言和面向对象的知识开发一款小游戏。

三、实验内容

在一个深海里,玩家通过键盘WSAD键控制己方小鱼移动,吃到其中比自己等级低或者等级相等的鱼。

要求如下:

1、 游戏运行时,初始界面如下图。 2、 按下空格键,游戏开始,玩家通过WSAD键控制小鱼移动;小鱼不能游出世界边界。 3、 有2种类型的鱼,普通鱼和特殊鱼。碰到普通鱼时,如果等级比自己高,小鱼就被

吃掉了。碰到特殊鱼,如果等级比自己高,小鱼只是被扣掉一定的生命值。 4、 敌方的小鱼都是从右向左一定。

5、 玩家小鱼被吃掉后,游戏停止,重新显示初始界面。

游戏初始界面

1

四、实验指南

实验准备

打开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 && 0 == GetGameState() ) { SetGameState( 1 ); }

2、 在游戏初始化函数GameInit中隐藏 \按空格开始游戏\这个提示图片。

在CGameMain中添加成员变量: CSprite * m_pBeginSprite;

在CGameMain的构造函数中进行初始化: m_pBeginSprite = new CSprite(\在GameInit中添加一下代码:

m_pBeginSprite->SetSpriteVisible( false );

3、 通过类向导创建CMyFish类。首先添加向左、向右、向上、向下4个方向的运动速

度属性。添加OnMove方法控制小鱼的游动,bKeyDown表示键盘时按下的,iKey表示相应的是哪个按键。

2

上海锐格软件有限公司

class CMyFish : public CSprite {

public: CMyFish(const char *szName); virtual ~CMyFish(); public: void OnMove(bool bKeyDown,int iKey);

private: };

float float float float

m_fVelocityLeft; m_fVelocityRight; m_fVelocityUp; m_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;

3