- 1、本文档共22页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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()方法) 分数显示: 设置一个变量表示游戏分数(
您可能关注的文档
- 新Java Web程序设计教程 教学课件 范立锋 林果园 第13章 Spring与Java EE持久化数据访问.ppt
- 新Java Web应用技术与案例教程 教学课件 杨树林 胡洁萍 第三章 设计模式与分层架构.ppt
- 新Java 程序设计 教学课件 朱喜福 林建民 唐永 第01章.ppt
- 新Java 程序设计项目教程(教育部高职高专计算机教指委规划教材) 教学课件 张兴科 季昌武 项目五.ppt
- 新JavaScript程序设计基础教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 阮文江 第七章 对象编程1.ppt
- 新JavaScript程序设计基础教程 教学课件 曾海 第9章 CSS+DIV技术.ppt
- 新JavaScript脚本程序设计 教学课件 吴以欣 陈小宁 第3章 JavaScript常用内置对象.ppt
- 新Java编程与应用教程 教学课件 张莉 java_03.ppt
- 新Java编程与应用教程 教学课件 张莉 java_11.ppt
- 新Java程序设计 第二版 普通高等教育“十一五”国家级规划教材 教学课件 朱喜福2 1_ 第7章 Java的图形与用户界面.ppt
文档评论(0)