大鱼吃小鱼实训指南

上传人:仙*** 文档编号:193564572 上传时间:2023-03-10 格式:DOCX 页数:10 大小:40.76KB
收藏 版权申诉 举报 下载
大鱼吃小鱼实训指南_第1页
第1页 / 共10页
大鱼吃小鱼实训指南_第2页
第2页 / 共10页
大鱼吃小鱼实训指南_第3页
第3页 / 共10页
资源描述:

《大鱼吃小鱼实训指南》由会员分享,可在线阅读,更多相关《大鱼吃小鱼实训指南(10页珍藏版)》请在装配图网上搜索。

1、大鱼吃小鱼实训指南大鱼吃小鱼实训指南 游戏规则 1. 2. 3. 4. 5. 6. 按下空格键游戏开始。 通过WSAD键控制玩家鱼上下左右移动,但不能游出边境。 克隆出多条鱼放在容器当中。 克隆出来的容器中的鱼从右向左移动,不同的鱼游动的速度不同。 当玩家鱼碰撞到了容器中的鱼,删除容器中的鱼,并增加玩家鱼的得分。 当容器中鱼没有被吃到,而是撞到了左边世界边界,则从玩家鱼的分数中减去该鱼的价值,当玩家鱼的分数被减为负值,游戏结束。 实验准备 打开FunCode,创建一个新的C+项目。注意:项目名称必须为英文和数字,且不能有空格。 点击“项目”“导入地图模板”,从对话框中选取名称为FishEatF

2、ish的模板导入。导入成功后,界面如下: 查看模板设置。模板设置中有如下几点,在项目开发时需要用到: 精灵的名称,创建精灵对象时,通过精灵名称把对象和精灵图片绑定在一起。 点击“启动VC工程”,将VC打开: 类的设计 游戏中能直接看到的精灵:玩家鱼、电脑鱼、玩家得分文本、玩家等级文本。其中,玩家得分和玩家等级只需要显示分数,可以直接使用CTextSprite类。玩家鱼、电脑鱼创建相应的类。 可以从玩家鱼和电脑鱼抽象出一个鱼类,作为父类。 鱼类继承CSprite类,通过CSprite类的方法操作精灵。 创建一个游戏类,各个类之间的通信在游戏世界类中进行。本游戏是大鱼吃小鱼,该类称为鱼游戏类。 创

3、建一个精灵工厂类,用来生成各种精灵类的对象。这就是“工厂模式”。 游戏流程 主流程 游戏分四个状态:未开始、开始、运行和结束。CGameMain类是控制游戏流程的类,游戏屏幕每刷新一次,调用一次该类的GameMainLoop方法。GameMainLoop根据m_iGameState的值分别调用该类的GameInit、GameRun和GameEnd方法。这三个方法对应初始化游戏、游戏运行和游戏结束这三个状态。GameInit只执行一次。执行后修改游戏状态。屏幕刷新后,进入状态2,开始执行GameRun方法。当玩家积分=0即玩家鱼不死的时候,GameRun一直被执行。玩家鱼死亡后,调用GameEn

4、d执行一次,清除本局游戏数据,恢复游戏未开始状态。 游戏初始化 完成游戏初始工作,界面上的工作:玩家积分和等级显示为0,创建玩家鱼并放置在指定位置,并且把玩家鱼对象加入到FishesWorld对象中。 游戏运行 游戏运行中,每刷新一次屏幕,需要根据最新数据,更新玩家得分和等级,移动玩家鱼,删除被吃掉的电脑鱼,当达到相应的时间间隔时,创建新的电脑鱼。 游戏结束 将游戏中剩余的精灵删除,包括删除精灵本身和集合中对应的对象。 重新显示游戏开始的提示图片。 生产精灵对象 本游戏中的玩家鱼、电脑鱼这两种精灵类的对象都在精灵工厂类中产生。根据参数确定生产何种精灵。右下图是玩家飞机的生产过程,主要是创建对象

5、,复制模板,并设置几个基本属性。 键盘按下事件 本游戏中,游戏状态为0时,按下空格键,游戏状态转为1。游戏状态为2时,玩家按下了WSAD键,分别设置玩家鱼的上下左右速度。 键盘弹起事件 本游戏中,游戏状态为2时,玩家松开WSAD键,设置玩家飞机对应方向上的速度为0。 精灵与精灵的碰撞 本游戏中,玩家鱼设置为发送碰撞,电脑鱼设置为接收碰撞。精灵碰撞时,如果电脑鱼等级比玩家鱼高,则玩家鱼减少积分,反之,玩家鱼增加积分。 世界边界碰撞事件 本游戏中,游戏状态为2时,玩家鱼碰到边界停止继续游动。电脑鱼碰到边界,设置该鱼的生命值hp为0。获得该鱼的价值,从玩家鱼当前的得分中减去该值。 实验任务 任务一

6、完成类的定义 根据下方表格,完成以下各个类的定义。其中,set和get方法在当前任务中实现,其他方法的实现留到后面完成。 鱼类:Fish 继承自CSprite类 属性鱼的生命值 鱼的等级 鱼的方向 鱼X轴方向移动速度 鱼Y轴方向移动速度 鱼X轴方向上的位置 鱼Y轴方向上的位置 private int iHp private int iGrade private int iDir private float fSpeedX private float fSpeedY private float fPointX private float fPointY 方法 public int getHp p

7、ublic void setHp(const int Hp) public int getGrade public void setGrade(const int grade) public float getMoveSpeedX public void setMoveSpeedX(float speedX) public float getMoveSpeedY public void setMoveSpeedY(float speedY) public void setDirection(float dir) public float getDirection public float ge

8、tPointX public void setPointX(const float fPointX) public float getPointY public void setPointY(const float fPointX) public virtual void move(int ikey)=0 获得鱼的生命值 设置鱼的生命值 获取鱼的等级 根据参数设置鱼的等级 获得鱼X轴方向上速度 设置鱼X轴方向上速度 获得鱼Y轴方向上速度 设置鱼Y轴方向上速度 根据参数设置鱼的方向 获取鱼的方向 获得鱼在X轴上的位置 设置鱼在X轴上的位置 获得鱼在Y轴上的位置 设置鱼在Y轴上的位置 鱼的移动方法

9、 玩家鱼类:PlayerFish 继承自Fish类 属性 private int iPlayerScore 玩家鱼的积分 方法 public int getPlayerScore public void setPlayerScore(int score) public virtual void move(int ikey) 得到玩家积分 设置玩家积分 玩家鱼移动方法 public void stopMove(int ikey) public void eat(Computer *pFish) public int playScoreTransferLvel 玩家鱼停止移动方法 玩家鱼吃电脑鱼的

10、方法 根据玩家鱼积分得到玩家鱼响应的等级 电脑鱼类:ComputerFish继承自Fish类 属性 private int value 电脑鱼的价值 获取电脑鱼价值 设置电脑鱼价值 电脑鱼移动 方法 public int getValue public void setValue(int value) public virtual void move 精灵工厂类:SpriteFactory 属性 静态成员变量。缺省值为0,每复制一个精private static int sId 灵时递增一次,用于作为新生成的精灵名称的后缀。例如:fish1, fish2, fish3 方法 public st

11、atic Fish *getFish(int iType) 获取生产出的精灵。iType:1玩家鱼2电脑鱼 鱼的世界类:FishWorld 属性 private PlayersFish playersFish private vector computerFishs public static const int MAX_COMPUTERFISH_NUM private float refreshRate private float deltaTimeCount private CTextSprite *textLevel private CTextSprite *textScore Priv

12、ate CTextSprite *gameStart Private float fSpeedX Private float fSpeedY 玩家鱼 电脑鱼集合 最多电脑鱼数量 电脑鱼刷新时间间隔 当前累计时间 游戏等级文本精灵 玩家积分文本精灵 开始精灵 电脑鱼在X方向上的速度 电脑鱼在Y方向上的速度 方法 public void setRefreshRate(float refreshRate) public float getRefreshRate public float getDeltaTimeCount public void setDeltaTimeCount(float del

13、taTimeCount) public CTextSprite *getTextStarGame public void setTextStarGame(CTextSprite *textStarGame) 设置电脑鱼刷新时间间隔 得到电脑鱼刷新时间间隔 得到当前累计时间 设置当前累计时间 得到开始游戏文本精灵 设置开始游戏文本精灵 public CTextSprite *getTextLevel public void setTextLevel(CTextSprite *textLevel) public CTextSprite *getTextScore public void setTe

14、xtScore(CTextSprite *textScore) public PlayersFish *getPlayersFish public void setPlayersFish(Fish *playersFish) public vector getComputerFishs public void setComputerFishs(vector *computerFishs) *fName) public Fish *addFish(int key) public int getRandomByGrade public void setComputerFishSpeadByGrad

15、e(ComputerFish *cFish) 得到玩家鱼等级文本精灵 设置玩家鱼等级文本精灵 得到玩家鱼积分文本精灵 设置玩家鱼积分文本精灵 得到玩家鱼 设置玩家鱼 得到电脑鱼集合 设置电脑鱼集合 public ComputerFish *findComputerFishByName(const char 根据名字在电脑鱼集合中查找响应的电脑鱼 添加一条电脑鱼 根据玩家鱼的当前等级返回一个随机值,用于控制在不同等级下出现鱼的种类以及比例 设置电脑鱼移动速度根据鱼的等级 在Fish类中定义一些宏,在程序中尽量使用这些常量,而不是直接用数值。这样,既有利于代码的阅读,又便于修改。 任务二 实现Sp

16、riteFactory类 参考“游戏流程”中“生产精灵对象”一节,完成SpriteFactory类的方法。对于玩家鱼,初始速度设为0,初始位置在游戏屏幕下方边界的中间位置,世界边界设置为屏幕大小。设置等级为0,玩家得分为0,。玩家鱼设置为发送碰撞。世界边界碰撞模式为停止。 电脑鱼初始速度向左,等级高的鱼速度相对较快所拥有的价值较高,等级低的鱼速度相对较慢所拥有的价值较低。初始位置应该位于屏幕右方,电脑鱼设置为接收碰撞。从相应的电脑鱼模板复制精灵,命名方式:模板名称+sId。 任务三 游戏初始化 在CGameMain类的GameInit方法中完成游戏初始化。 任务四 键盘按下事件 在CGameM

17、ain类的OnKeyDown方法中完成。键盘按下处理两个事件:一个是游戏的开始;一个是玩家鱼的上下左右移动。完成该任务后,运行程序。 任务五 键盘弹起事件 在CGameMain类的OnKeyDown方法中完成。完成任务四后按下键盘相应键鱼儿被设置了移动速度,但当松开后就应该取消设置的移动速度。 任务六 完成游戏运行 在CGameMain类的GameRun方法中完成游戏运行代码。这三个函数需要自行添加,在定义类时并没有加入。 完成FishWorld中更新文本精灵数据的方法。 完成FishWorld中更新玩家数据的方法。 完成FishWorld中更新电脑鱼的方法 完成FishWorld中删除HP为

18、0的电脑鱼的方法 完成FishWorld中添加电脑鱼的方法 运行游戏,这时候,可以看见不断有电脑鱼出现,并且当我们按下W,S,A,D键时玩家鱼也会随之移动。 任务七 精灵与精灵的碰撞 在上一个任务中,即使玩家鱼碰到电脑鱼也不会把电脑鱼吃掉,是因为我们没有处理精灵的碰撞事件。 在本任务中,我们通过精灵与精灵的碰撞事件来解决上述问题。在CGameMain类的OnSpriteColSprite方法中完成代码。该方法有两个参数,一个是szSrcName,表示发送碰撞的精灵的名称;一个是szTarName,表示接受碰撞的精灵的名称。根据这两个精灵的名称,可以判断碰撞的精灵是什么类型。 任务八 精灵与世界边界的碰撞 在创建敌机精灵和子弹精灵对象时,我们设置了它们的世界边界,以及与世界边界碰撞模式。当它们飞出各自的世界边界时,就会发生精灵与世界边界碰撞事件,对于的方法是CGameMain类中的OnSpriteColWorldLimit方法。 对于碰到世界边界的电脑鱼,我们需要删除此精灵,并从集合删除相应的节点。 本任务的效果主要是优化程序,避免产生过多无用对象,占用电脑资源。 任务九 完成游戏结束 当玩家鱼的积分0时,一局游戏结束。对应的方法是CGameMain类的GameEnd方法。然后重新显示“空格开始”图片,游戏环境又重新回到未开始状态。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!