当前位置:文档之家› 第10章 游戏关卡设计(Java游戏程序设计教程(第2版)课件)

第10章 游戏关卡设计(Java游戏程序设计教程(第2版)课件)

–地 图 元 素 选 择 面 板 ControlPanel 类 的 作 用 是 响 应鼠标点击按钮的事件。
–面板上一共有20个按钮,按照事件处理机制, 需要为这20个按钮注册按钮动作事件监听器,并
1 实现动作事件监听器接口中的按钮动作事件的响
应方法。
4 2 (运行效果参见MapEditer程序示例)
41 2
1.完善场景的滚动
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 如何让玩家走到TileMap的边界? —对玩家与砖块地图左右边界的碰撞进行
处理
1 • 如何让TileMap的上面部分内容显示出来?
—设置垂直方向的场景滚动
4 2 (参见例10_1)
4 2 (参见例10_2)
二、添加游戏菜单
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 游戏菜单的作用是提供一组常用的命令 供玩家调用,让玩家能够控制游戏的执 行以及把握游戏的节奏。
• 游戏菜单由菜单项组成,每个菜单项对
1 应一个特定的命令,例如游戏开始、游
0 0 1 1 0 0 1 0 来1 0 显1 0 得1 1 十0 1 0 分0 0 繁1 0 琐1 0 0 。1 0 1 1
• 考虑为游戏制作一个地图编辑器,用可视化的 图形界面编辑和生成游戏砖块地图,即用鼠标 拖放组件的方式直接生成场景图像,而不再采
1 用手工编辑字符文本文件的方式。
2 • 它可以将编辑好的游戏地图保存为文本格式的 地图文件,同时能够读取文本地图文件并自动 4 转换为场景图像。
第10章 游戏关卡设计1 0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
4
2
本章内容
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 完善游戏关卡
• 添加游戏菜单 • 设计关卡地图编辑器
41 2
• 设置道具效果 0 0 1 1 0 ➢0 1 0 “1 0 星1 0 1 星1 0 1 ”0 0 道0 1 0 具1 0 0 让1 0 玩1 1 家马上转为无敌状态
➢“红心”道具增加玩家的生命值 ➢“能量球”道具的作用是增加玩家的跳
跃能力
1 • 添加新关卡,消灭当前关卡中的所有NPC 后跳至下一关
–地图绘制面板DrawPanel类的作用是将从左边 拖拽过来的砖块贴到绘图面板上,此过程是 触发鼠标事件的过程。
–具体包括获取被鼠标拖拽的砖块文件编号, 并转换成文本字符记录更新到砖块地图数组
1 map中;
2 –最后遍历地图数组map,完成地图场景图像的
4 绘制
地图编辑器详细设计
0 0 •1 1 地0 0 1 图0 1 0 元1 0 素1 1 0 选1 0 0 择0 1 面0 1 0 板0 1 0 C1 o1 ntrolPanel类的设计
1 –除了添加两个面板对象之外,还要向MapEditer
2 容器添加一个滚动条JScrollPane对象,以及一
个JLabel标签对象,这个标签对象是鼠标拖拽砖
4 块图像的过程中鼠标拖动的砖块图标。
地图编辑器详细设计
0 0 1 1 0 •0 1 0 地1 0 图1 0 1 绘1 0 1 制0 0 面0 1 0 板1 0 0 D1 r0 a1 1 wPanel类的设计
4 从而将所有游戏变量恢复到保存时的值
三、设计关卡地图编辑器
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 地图编辑器是一种所见即所得的游戏地图制作工具, 用于辅助设计和输出地图数据,包括创建、编辑、存 储和管理游戏地图数据。
• 地图编辑器读取和使用游戏资源,并按照游戏程序规 则输出相应格式的地图数据,游戏程序则通过地图数 据构建游戏场景,并将其呈现给用户。
2
地图编辑器详细设计
0 0 1 •1 0 编0 1 0 辑1 0 1 器0 1 M1 0 a1 p0 E0 0 d1 i0 t1 0 e0 r1 类0 1 1 的设计
–MapEditer类是主类,是程序GUI界面的顶层容 器,可以用继承JFrame的方式来实现MapEditor 这个类
–可以将地图绘制面板DrawPanel和砖块组件选择 面板ControlPanel对象添加到MapEditer容器上。
2 来把握游戏的节奏并给予玩家一定的引导,
4 最终达到游戏预先设定的目标。
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
41 2
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 随着游戏类型的不断丰富以及游戏规模 的不断扩大,一个游戏通常不是一天半 日能完成的,因此大部分游戏都设有游 戏进度的保存与恢复功能。
1 • 加入游戏保存与恢复功能有利于玩家合
2 理地分配游戏的时间,从而更好地把握
4 游戏的节奏,增加游戏的可玩性。
问题
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
1 菜单项。
2 • 当玩家鼠标点击某个Lable时,游戏便会
4 执行该菜单项对应的命令。
2.显示游戏菜单
0 0 1 1 0 •0 1 0 设1 0 计1 0 1 弹1 0 1 出0 0 菜0 1 0 单1 0 0 时1 0 的1 1 显示效果(参见例10_3)
41 2
3.游戏保存与恢复
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 游戏保存的到底是什么,恢复的又是什么? —游戏的保存是将游戏运行到某个时间点时各 对象的状态值记录下来,例如场景的水平及垂 直偏移值、玩家的坐标及生命值、NPC的类型
1 及速度值等等。
2 —游戏恢复则是对保存后的游戏进度进行复原,
即将存放在文件中的数据重新赋值给相应的变
4 量
如何实现
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
个按钮负责地图文件的写入和读取任务。
读取地图文件,并将信息
br=new BufferedReader(new FileReader(map1.txt")); 存入地图数组map
for(int i=0;i<DrawPanel.map.length;i++){ DrawPanel.map[i]=br.readLine().toCharArray();
2 戏结束、保存进度、读取进度、按键设
4 置、音量控制等等。
1.设计游戏菜单
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 使用AWT组件来设计菜单。 • 设定一个面板组件Panel作为菜单对象,
然后生成若干标签对象Lable加入到该 Panel中,每个Lable对象便对应着一个
2.添加敌人和道具
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 添加不同类型的敌人 • 添加道具,玩家获取后增强属性
41 2
• 在砖块地图文件加入NPC标记。 • 循环地读取砖块地图文件中的所有字符, 并分别进行判断。 0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
地图编辑器总体设计
• 编辑器的界面设计
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
顶层容器 JFrame
面板上的按钮组件
地图元素选择面板 ControlPanel
游戏地图绘制面板 DrawPanel
1
4带滚动条的面板 JScrollPane
41 2
一、完善游戏关卡
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 游戏关卡设计就是设计游戏的场景和物品 以及目标和任务,提供给玩家一个活动的 舞台。
• 在这个舞台上,玩家表面上拥有一定的自
1 由,实际上是关卡设计者通过精心布置,
游戏地图的装载与保存
• 游戏地图的装载和保存是地图文本文件的读取和写入
0 0 1 1 –0 0 1 在0 地1 0 1 图0 绘1 1 0 制1 面0 0 0 板1 D0 1 r0 a0 wP1 0 a1 n1 el类中已经将地图场景图像转换成 地图文本文件
–现在砖块组件面板ControlPanel中有“Save”和“Load”两
1 }
br.close();
2 bw=new BufferedWriter(new FileWriter("map1.txt"));
for(int i=0;i<DrawPanel.map.length;i++){ bw.write(DrawPanel.map[i]); bw.newLine();
4 }
将数组map信息写 入业
0 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 1
• 添加更多的敌人和道具 • 丰富菜单项的功能 • 使用关卡地图编辑器设计更多好玩的游
41 2 戏关卡
• saveGame()方法用于保存当前游戏进度 ➢ 定义字符串变量s1来保存场景及玩家的信息 ➢ 定义字符串变量s2来保存所有NPC的信息 ➢ 通过BufferWriter将s1和s2的值写入到存档文
相关主题