- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13章 游戏设计案例详解 模拟钢琴游戏 太空射击游戏 点灯游戏 案例一:模拟钢琴游戏 钢琴游戏的类结构 实例化一个琴键对象 实现琴键的动画效果 给琴键添加声音效果 按下G键,发出“哆”的声音 准备声音文件“3a.wav” 在key类的act()方法中添加如下代码: 完善琴键的声音效果 如果一直按住G键,琴键对应的声音文件连续播放 现实中的钢琴演奏是按下一个琴键,钢琴奏出一个音符,这个音符的长度不受琴键被按下的时间长短所控制。 解决办法是先声明一个变量,用这个变量记录下某个琴键是否被按下的状态,然后在if条件判断时考虑这个状态变量的情况。 通常人们将这种记录某个对象的状态值的变量称为标记变量,大多数情况下,标记变量是个boolean类型的变量,它只有true或false两种状态。 编写多个琴键 每个琴键对象对应一个电脑键盘按键和一个声音文件。 钢琴有几十个键,需要在Key类的act()方法里面用几十组if语句来为每个琴键对象指定其电脑按键和声音文件,势必act()方法的代码会很长很复杂,有很多的代码重复。 能不能在实例化生成每个琴键对象时,就指定这个琴键对象的电脑按键和声音文件呢? 即编写一个通用的Key()构造器,使它能够将电脑按键和声音文件作为参数传入到构造器中,如Key(String keyName,String soundFile),这样在创建每个琴键对象时就为其指定了电脑按键和声音文件。 用循环添加多个琴键 实现了通用的琴键Key构造器,就可实现多个琴键了 用数组来完善钢琴游戏 目前为止,所有的琴键都是G键 如何生成每个都不一样的琴键呢? 即前面的循环语句中,如何向Key构造器中传入不同的键名和声音文件 Key key = new Key( “键名”, “声音文件); 最好的办法是数组 循环中需要每次循环传入不同的值,最好的办法是数组 因为把数组的下标作为循环变量,就使得数组和循环二者结合起来了 绘制黑色琴键 黑色琴键是对应白色琴键的升半调音符 设计一个黑色键名数组和一个黑色键音符文件名数组 与白色键一样,黑色键也有两张图像 在生成琴键对象的时候,就将琴键所对应的效果图片传入到其构造器中 不用担心要在Key类的act()方法中使用麻烦的if语句来区分是黑色还是白色琴键 使得Key类的act()方法更具通用性,使得程序更加易于扩展,如容易继续添加其它类型的按键 案例二:太空射击游戏 太空射击游戏中的类 太空射击游戏对象关系图 太空射击游戏类关系图 源代码比较 Ship、Enemy和Laser三个类 三者的代码重复部分 都有用setLocation(int x,int y)实现从一个位置坐标到另一个位置坐标的匀速直线运动 Ship类和Enemy类之间,以及Enemy类与Laser之间的碰撞检测 碰撞发生后有爆炸效果和战果记分的相关代码大部分是相同的,只有少许差异 由此可能带来的问题 setLocation(int x,int y)中的坐标从int型改成double型(这样就可以处理比较精确的小数了),这样的修改在三个类中都得修改 程序扩展比较困难 ,如增加一个飞碟类Saucer 飞碟Saucer类的代码与Ship类和Enemy类的基本相同 哪个类中的代码有点问题,其它所有类都得同步修改 代码重复问题解决 最好办法:继承 继承是一种解决重复问题的机制 首先,将Ship、Enemy和Laser三个类的共同部分抽取出来,单独地做成一个Sprite类 然后,分别声明Ship、Enemy和Laser是这个Sprite类的子类 最后再分别在Ship类里加上Ship自己独有的部分,在Enemy类里加上Enemy独有的部分,Laser也是如此 Ship、Enemy和Laser三个类都继承Sprite类,它们都是Sprite类的子类 三个类中共同的属性只需描述一次就够了 子类的设计变得简单了,只需考虑自己的特有部分就行了,再也不用操心如何与其它类的代码保持一致的难题 继承程序结构的类图 运用继承后的游戏类图 用抽象类来优化程序结构 程序结构的进一步分析 Ship、Enemy类的act()方法,发现两个类中都有关于碰撞检测、对象重新生成和游戏记分的功能代码 与下面的伪代码是一致的,只是实现代码不同。 如何优化? 能否将它们抽象出来,归入Sprite类呢? Ship类和Enemy类中相同功能的实现代码不一样 不能简单地将它们移植到超类中 应该在更高的层次上将二者的雷同部分抽象出来 然后归入到超类Sprite中 解决办法——抽象类 为两个类中的功能相同部分的代码设计一个名为处理碰撞的handleShotCollision()方法 但是Ship类和Enemy类对于handleSho
您可能关注的文档
- 新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
- 新Java程序设计 第二版 普通高等教育“十一五”国家级规划教材 教学课件 朱喜福2 第3章 类、类的继承和接口.ppt
最近下载
- 2024-2025学年全国中学生天文知识竞赛考试题库(含答案).pdf VIP
- 2024届福建省莆田市高三第二次教学质量检测二模生物试卷.doc VIP
- 电梯维修及维护人员的安全知识与技能培训课件.pptx VIP
- 小学新教育实验实施方案(详细).docx
- 23中英文双语单片机车辆防碰撞外文文献翻译:基于超声波与单片机嵌入式系统开发集成应用的汽车防撞系统设计.doc VIP
- 八年级数学上册《分式》教案教材分析.pdf VIP
- 大华DSS5000系列-客户端操作手册-.docx
- 2013款上汽通用别克君越_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- 人教版数学二年级下册全册教学课件(2023年新教材).pptx
- 越人歌-钢琴伴奏谱.pdf
文档评论(0)