网站大量收购独家精品文档,联系QQ:2885784924

新Java游戏程序设计教程 第2版 教学课件 何青 第9章 完善游戏规则.ppt

新Java游戏程序设计教程 第2版 教学课件 何青 第9章 完善游戏规则.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
作业 使用自己的游戏资源(图片、声音)替代示例中的资源 在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 第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.Height 动作:changState(Dissmiss); 消失态下的动作: 执行setActive(false); (参见例9_1) 功能二:子弹射击NPC 功能描述: 当玩家按下Ctrl键时发射子弹,子弹水平方向直线运动,碰到NPC后消失 子弹的有限状态机: 具体实现 发射态下的动作: 当玩家按下Ctrl,生成新的子弹对象,并添加到Arraylist; 设置子弹的初始坐标: locX=Player.x; locY=Player.y; 移动态下的动作: dy=0;dx++; 注意:如何设置dx的方向? 移动态转换为消失态: 条件:子弹碰撞到NPC(碰撞检测时子弹坐标要转换为tiles地图坐标。why?) 动作:执行changeState(Dissmiss); (还要执行NPCchangeState(Dissmiss);) 消失态下的动作: 执行setActive(false); (参见例9_2) 功能三:增加玩家生命 功能描述: 设置玩家生命,当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 3.当玩家被攻击后更新Life对象列表 (参见updateHeart()方法) 分数显示: 设置一个变量表示游戏分数(

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档