Java游戏程序设计教程第13章-游戏设计案例详课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java游戏程序设计教程第13章-游戏设计案例详课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 游戏 程序设计 教程 13 设计 案例 课件
- 资源描述:
-
1、4251 10011 0010 1010 1101 0001 0100 1011第13章 游戏设计案例详解4251 10011 0010 1010 1101 0001 0100 1011模拟钢琴游戏太空射击游戏点灯游戏4251 10011 0010 1010 1101 0001 0100 1011案例一:模拟钢琴游戏4251 10011 0010 1010 1101 0001 0100 1011钢琴游戏的类结构 接下来要做的是:在木纹图像上画出一个个的琴键; 然后给每个琴键编写一个演奏的play()方法。4251 10011 0010 1010 1101 0001 0100 1011实例化一个
2、琴键对象 在Piano类的构造方法Piano()中添加: Key key_g=new Key(); addObject(key_g ,300,180);为什么?4251 10011 0010 1010 1101 0001 0100 1011实现琴键的动画效果实现琴键的动画效果 打开Key类的act()方法,在其中添加相应的琴键动画效果代码。4251 10011 0010 1010 1101 0001 0100 1011给琴键添加声音效果 按下G键,发出“哆”的声音准备声音文件“3a.wav”在key类的act()方法中添加如下代码:public void act() if( Greenfoot
3、.isKeyDown(g)/如果按下g键 Greenfoot.playSound(3a.wav); /演奏声音文件“3a.wav” setImage(white-key-down.png);/显示键被按下的效果图片 else setImage(white-key.png);/显示键被松开的效果图片 4251 10011 0010 1010 1101 0001 0100 1011完善琴键的声音效果 如果一直按住G键,琴键对应的声音文件连续播放现实中的钢琴演奏是按下一个琴键,钢琴奏出一个音符,这个音符的长度不受琴键被按下的时间长短所控制。解决办法是先声明一个变量,用这个变量记录下某个琴键是否被按下
4、的状态,然后在if条件判断时考虑这个状态变量的情况。 通常人们将这种记录某个对象的状态值的变量称为标记变量,大多数情况下,标记变量是个boolean类型的变量,它只有true或false两种状态。4251 10011 0010 1010 1101 0001 0100 1011编写多个琴键 每个琴键对象对应一个电脑键盘按键和一个声音文件。钢琴有几十个键,需要在Key类的act()方法里面用几十组if语句来为每个琴键对象指定其电脑按键和声音文件,势必act()方法的代码会很长很复杂,有很多的代码重复。 能不能在实例化生成每个琴键对象时,就指定这个琴键对象的电脑按键电脑按键和声音文件呢?即编写一个通
5、用的Key()构造器,使它能够将电脑按键和声音文件作为参数传入到构造器中,如Key(String keyName,String soundFile),这样在创建每个琴键对象时就为其指定了电脑按键和声音文件。4251 10011 0010 1010 1101 0001 0100 1011用循环添加多个琴键 实现了通用的琴键Key构造器,就可实现多个琴键了int i = 0;while (i 12) Key key = new Key( “g”, “3a.wav); addObject(key, 54 + (i*63), 140); /每隔63个像素绘制一个琴键 i = i + 1;4251 10
6、011 0010 1010 1101 0001 0100 1011用数组来完善钢琴游戏 目前为止,所有的琴键都是目前为止,所有的琴键都是G G键键 如何生成每个都不一样的琴键呢?如何生成每个都不一样的琴键呢?即前面的循环语句中,如何向Key构造器中传入不同的键名和声音文件 Key key = new Key( “键名”, “声音文件); 最好的办法是数组循环中需要每次循环传入不同的值,最好的办法是数组因为把数组的下标作为循环变量,就使得数组和循环二者结合起来了4251 10011 0010 1010 1101 0001 0100 1011绘制黑色琴键 黑色琴键是对应白色琴键的升半调音符设计一个
7、黑色键名数组和一个黑色键音符文件名数组 与白色键一样,黑色键也有两张图像在生成琴键对象的时候,就将琴键所对应的效果图片传入到其构造器中不用担心要在Key类的act()方法中使用麻烦的if语句来区分是黑色还是白色琴键 使得Key类的act()方法更具通用性,使得程序更加易于扩展,如容易继续添加其它类型的按键 4251 10011 0010 1010 1101 0001 0100 1011案例二:太空射击游戏4251 10011 0010 1010 1101 0001 0100 1011太空射击游戏中的类4251 10011 0010 1010 1101 0001 0100 1011太空射击游戏对
8、象关系图 4251 10011 0010 1010 1101 0001 0100 1011太空射击游戏类关系图 4251 10011 0010 1010 1101 0001 0100 1011源代码比较Ship、Enemy和Laser三个类三者的代码重复部分 都有用setLocation(int x,int y)实现从一个位置坐标到另一个位置坐标的匀速直线运动 Ship类和Enemy类之间,以及Enemy类与Laser之间的碰撞检测 碰撞发生后有爆炸效果和战果记分的相关代码大部分是相同的,只有少许差异 由此可能带来的问题setLocation(int x,int y)中的坐标从int型改成do
9、uble型(这样就可以处理比较精确的小数了),这样的修改在三个类中都得修改 程序扩展比较困难 ,如增加一个飞碟类Saucer 飞碟Saucer类的代码与Ship类和Enemy类的基本相同 哪个类中的代码有点问题,其它所有类都得同步修改 4251 10011 0010 1010 1101 0001 0100 1011代码重复问题解决最好办法:继承继承 继承是一种解决重复问题的机制首先,将Ship、Enemy和Laser三个类的共同部分抽取出来,单独地做成一个Sprite类 然后,分别声明Ship、Enemy和Laser是这个Sprite类的子类最后再分别在Ship类里加上Ship自己独有的部分,
10、在Enemy类里加上Enemy独有的部分,Laser也是如此 Ship、Enemy和Laser三个类都继承Sprite类,它们都是Sprite类的子类 三个类中共同的属性只需描述一次就够了 子类的设计变得简单了,只需考虑自己的特有部分就行了,再也不用操心如何与其它类的代码保持一致的难题4251 10011 0010 1010 1101 0001 0100 1011继承程序结构的类图 4251 10011 0010 1010 1101 0001 0100 1011运用继承后的游戏类图 4251 10011 0010 1010 1101 0001 0100 1011用抽象类来优化程序结构 程序结构
展开阅读全文