游戏程序设计教程 何青第9章 完善游戏规则 第9章 完善游戏规则新.pptVIP

游戏程序设计教程 何青第9章 完善游戏规则 第9章 完善游戏规则新.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 完善游戏规则 问题 如何增添游戏的可玩性? 如何设计复杂的交互规则? 如何编写复杂的游戏逻辑? 1. 有限状态机编程 “有限状态机”是由有限的状态组成的一个机制。一个“状态”就是一个情况。比如门,它的“状态”有“开”或“关”以及“锁”与“未锁”。 四要素: 输入状态(当前状态) 输出状态(新状态) 状态转换条件(事件) 状态转换操作 (动作) 例:地铁出口的有限状态机 switch(state){ case locked: if(pass) alarm(); else if(coin) changeState(unlocked); break; case unlocked: if(coin) thanks(); else if(pass) changeState(locked); break; } 2. 实现复杂的游戏逻辑 为前几讲的游戏示例增加以下功能: 玩家跳起踩NPC 玩家子弹射击NPC 增加玩家的生命数 显示玩家生命及游戏分数 功能一:玩家跳起踩NPC 功能描述: 当玩家跳起下落时与NPC碰撞,则判定NPC死亡,并垂直掉落到屏幕下方。 NPC的有限状态机: 具体实现 活动状态下的动作: NPC执行move( )方法 活动态转换为掉落态: 条件:玩家与NPC碰撞;玩家的dy0 动作:执行changState(isHitted)方法 掉落态下的动作: dx=0; dy+=Gravity; locY+=dy; 掉落态转为消失态: 条件:locYgamePanel.Hight 动作:changState(Dissmiss); 消失态下的动作: 执行setActive(false); 功能二:子弹射击NPC 功能描述: 当玩家按下Ctrl键时发射子弹,子弹水平方向直线运动,碰到NPC后消失 子弹的有限状态机: 具体实现 发射态下的动作: 当玩家按下Ctrl,生成新的子弹对象,并添加到Arraylist; 设置子弹的初始坐标: locX=player.x; locY=0; 移动态下的动作: dx++; 注意:如何设置dx的方向? 移动态转换为消失态: 条件:子弹碰撞到NPC(碰撞检测时子弹坐标要转换为tiles地图坐标。why?) 动作:执行changeState(Dissmiss); (还要执行NPC的changeState(Dissmiss);) 消失态下的动作: 执行setActive(false); 功能三:增加玩家生命 功能描述: 设置玩家生命,当NPC攻击玩家后,玩家生命值减1,若生命为0则死亡,游戏结束;否则进入“无敌”状态 在“无敌”状态下玩家不会受到NPC攻击,且玩家的图像会不断闪烁;经过一段时间后玩家恢复到正常状态 玩家的有限状态机 具体实现 课堂讨论: 各个状态之下的动作是什么? 各个状态之间的转换条件是什么? 难点:无敌状态的表示 问题一:无敌状态下的动作有哪些? 问题二:如何设定无敌状态的时间? 问题二:无敌状态下如何显示闪烁效果? private int count = 0; …… public void update() { case unAttack: //无敌时间设为三秒 count = (count + 1) % (gamePanel.FPS * 3); if (count == 0) { changeState(Move);} } public void draw(Graphics g) { ……//每循环五帧闪烁一次 if (state == unAttack (count % 5 == 0)) { } else if …… } 功能四:显示生命和游戏分数 生命显示: 创建life类,载入表示生命的图像文件 在gamePanel中创建life对象,对象个数等于玩家的生命值,并将其加入Arraylist 当玩家被攻击后更新life对象列表 (参见updateHeart()方法) 分数显示: 设置一个变量表示游戏分数(score) 设置积分规则,如:当玩家才死NPC时分数加100;当玩家射杀NPC时分数加50 在gamePanel中显示分数: Font font = new Font(Arial, Font.BOLD, 20); dbg.setFont(

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档