2024年1月5日发(作者:石浩波)
.
游戏设计
.
.
目 录
第一章 引言 ................................................................................................... 5
第二章 需求分析 .......................................................................................... 8
2.1 系统开发目标 .................................................................................. 8
2.2 系统需求分析 .................................................................................. 8
2.2.1 业务需求分析 ........................................................................ 8
2.2.2 用户需求分析 ........................................................................ 9
2.2.3 功能需求分析 ........................................................................ 9
第三章 系统概要设计 ............................................................................... 10
3.1 背景故事.......................................................................................... 10
3.2游戏程序流程设计 ........................................................................ 11
图3.2 游戏程序流程图 ............................................................... 12
第四章 系统详细设计 ............................................................................... 12
4.1画面和切换 ...................................................................................... 12
4.2 定义游戏世界 ................................................................................ 14
4.3 系统功能模块 ................................................................................ 16
4.4 储存素材.......................................................................................... 17
4.5游戏界面 ........................................................................................... 18
4.6 分数榜设定 ..................................................................................... 19
4.7游戏总控制 ...................................................................................... 21
4.8 游戏设置.......................................................................................... 22
.
第五章 软件运行与测试 .......................................................................... 22
5.1系统测试 ........................................................................................... 22
5.1.1 游戏页面显示 ...................................................................... 22
5.1.2 移动主角测试 ...................................................................... 23
5.1.3 主角碰到金币测试 ............................................................. 23
5.1.4 判定结束测试 ...................................................................... 23
5.1.5 暂停测试 ................................................................................ 23
5.1.6 恢复测试 ................................................................................ 23
5.1.7 压力测试 ................................................................................ 23
5.2 结果分析.......................................................................................... 24
第六章 结 论 ............................................................................................. 24
.
第一章 引言
安卓游戏是运行在安卓系统平台的游戏,随着移动终端设备的发展,安卓游戏不但可以运行于智能手机,也可以运行在平板电脑上。安卓游戏的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。Android开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。 开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系
.
统等建立应用软件的开发工具的集合。Android SDK 指的是Android专属的软件开发工具包。
libgdx是一个跨平台的2D/3D的游戏开发框架,它由Java/C/C++语言编写而成。ibgdx兼容大多数微机平台(标准JavaSE实现,能运行在Mac、Linux、Windows等系统,最近加入了对html5的支持)与Android平台(Android1.5以上即可使用,Android2.1以上可满功率发挥)。Libgdx以native方式自带图像解码器,通过其提供的Pixmap可以对指定图像进行像素级渲染操作,从而不依赖Android的Bitmap加载处理图像,可以支持png、jpg、bmp,最近的两个版本中加入了对gif图片的支持.Libgdx由audio、files、graphics、math、physics、scenes、utils这些主要类库所组成,它们分别对应了Libgdx中的音频操作,文件读取,2D/3D渲染,Libgdx绘图相关运算,Box2D封装,2D/3D游戏组件(3D部分目前无组件),以及Libgdx内置工具类。
Gdx是Libgdx类库运行的核心所在,不单运行Graphics、Input、Files、Audio、AndroidApplication等Libgdx关键部分,所必需的实例会在Libgdx初始化时注入Gdx中对应的graphics、input、files、audio、app等静态变量里面,就连Libgdx对OpenGL接口(或OpenGLES,视Libgdx运行平台而定,以下统称OpenGL)的GL10、GL11、GL20、GLCommon等封装类也会在Graphics实例化时分别注入到gl10、gl11、gl20、gl这四个同样位于Gdx
.
的静态变量当中。
.
第二章 需求分析
这是一款跳跃型的游戏,主人物会一直往上跳,我们只需控制左右移动让其踩在适当的跳台上即可继续的往上跳,最终加到的金币越多,同时要避开飞在空中的蜜蜂,直到到达最顶部的城堡,才进入下一关。
2.1 系统开发目标
采用基于Android的Java编程技术,以及用Libgdx框架的相关技术开发出界面简洁清新,易操作,细节精致,设置齐全的SupperJumper游戏。
2.2 系统需求分析
2.2.1 业务需求分析
总所周知,SupperJumper是一款经典不过时的游戏,它无论在电脑,小霸王,手机都有它的身影,即使现在市场上各种游戏百花齐放,各种各样,但是SupperJumper依然能够占有一席之地,其市场还是很大的.这是由于它的特殊在于它能吸引人更深入,简单上手,该游戏的优势在于它的简单易行,不论是小游戏机,还是手机,都能很快顺利的运行.
.
2.2.2 用户需求分析
游戏设计出来后,其质量还是要由用户来评判的,在游戏为用户所用时,用户也对游戏有自己的期望和要求。
(1) 简单易学
每个人的时间都是宝贵的,用户不愿意花一大堆时间去学习如何玩意个游戏,因此游戏必须很容易上手,要求界面简洁明了,否则太复杂难懂的话会让很多客户离去。
(2) 运行稳定
一个游戏如果设计出来却不能保证其稳定性,那么就可能使游戏无法正常运行。如果用户正在游戏突然软件崩溃了,无疑会让用户感到烦躁,从而把软件给卸载了,这样也会失去很多用户。
(3) 操作简便
用户之所以选择SupperJumper,就是由于其快捷简便性,所以我们要让用户玩的舒心则必然要设计出一套操作简便的系统。
2.2.3 功能需求分析
本项目是一个运行在安卓手机上的游戏,我们初步设定本游戏具有以下几个功能。
•游戏的主角不断向上跳跃,从一个平台跳到另一平台。游戏世界在垂直方向跨了多个画面。
•通过左右倾斜屏幕来控制水平移动。
.
•当游戏主角离开水平屏幕边界时,它将从屏幕相反的一边重新进入。
•平台可以静止或者水平移动。
•有些平台在主角撞上时会随机地变得粉碎。
•在向上的路上,主角可以收集物品来获得分数。
•除了钱币,在一些平台上会有弹簧,它们可以使主角跳得更高。
•邪恶的力量充满了游戏世界,它们水平移动。当碰上它们时,主角将死亡并且游戏结束。
•当主角掉落到屏幕的底部边缘时,游戏也将结束。
•在关卡的顶部会有一些目标,当主角碰上目标,新的关卡将开始。
•当游戏结束后,显示玩家在游戏中所获得的分数。
第三章 系统概要设计
3.1 背景故事
游戏的主角得了慢性跳跃症。他每次接触到地面都必须进行跳跃。更糟的是,他深爱的公主(不给她取名字了)被会飞行的松鼠杀手组成的邪恶军队绑架,关在天上的一个城堡中。在这种情况下,主角的病症反而对拯救公主有所帮助。他开始寻觅心爱的
.
人,与邪恶的松鼠军队战斗。
图3.1 初始的游戏机制实物模型,显示了主角、平台、钱币、邪恶势力和关卡顶部的目标
3.2游戏程序流程设计
本游戏程序流程图如图3.2所示。
.
图3.2 游戏程序流程图
第四章 系统详细设计
4.1画面和切换
•有一个带标识的主画面;有PLAY、HIGHSCORES和HELP菜单项;并有一个按键来控制声音的开启和关闭。
•有一个游戏画面来询问玩家是否准备好控制运行、暂停、
.
结束游戏和下一关卡的状态。比起Mr. Nom,这里只是新增了画面的下一关卡状态,它将在主角碰到城堡时触发。这时新的关卡生成,并且主角将重新从世界的底部开始并保持他的分数。
•有一个高分画面用来显示玩家最高的5个分数。
•有一个帮助画面来说明游戏机制和玩家的目标,此处省略了玩家如何进行控制的描述。
图4.1 Super Jumper的所有画面和切换
.
4.2 定义游戏世界
在世界空间中按物理规律定义了对象,其边界形状和位置的度量单位是米,速度的度量单位是米/秒。但对象的图像表示使用像素定义,因此不得不做一些映射。解决这个问题的方法是首先针对图像资源定义目标分辨率。与Mr. Nom一样,此处使用的目标分辨率是320×480像素(纵横比是1.5)。之所以使用这个目标分辨率,是因为这是最低的可行的分辨率,但是如果游戏专门针对平板电脑,则可以使用800×1 280像素这样的分辨率,或者这两种分辨率之间的一种分辨率,例如480×800像素(典型的Android手机)。不管目标分辨率如何,其原理是相同的。
接下来在像素和世界空间中的米之间建立对应关系。图3.1中的实物模型显示了不同对象使用的画面空间的大小以及它们间的相对比例。对于2D游戏,此处推荐将32像素映射为1米。那么现在在实物模型上覆盖一个网格,网格的尺寸是320×380像素,每个单元格大小是32×32像素。在世界空间中,单元格映射为1×1米的大小。图4.2显示的是实物模型和网格。
.
图4.2 覆盖网格的实物模型。每个单元格是32×32像素,对应游戏世界的1×1米
•
•
Bob是0.8×0.8米;它并不完全占用一个单元格。
平台是2×0.5米,水平占据两个单元格,垂直占据半个单元格。
•
钱币是0.8×0.5米。它几乎垂直占据一个单元格,水平占据半个单元格。
•
弹簧是0.5×0.5米,在两个方向上各占据半个单元格。实际上弹簧垂直方向比水平方向要稍长一点。它的边界形状是正方形,因此碰撞测试不是十分严格。
•
•
松鼠是1×0.8米。
城堡是0.8×0.8米。
由这些尺寸可以得到用于碰撞检测的对象的边界矩形的尺寸。它们的大小可以根据游戏对这些值的使用方式进行调整。
.
由于当主角出了屏幕底部边缘时将死亡,这样照相机也将在游戏机制中扮演角色。虽然我们使用照相机进行渲染并且当主角跳起时也向上移动它,但在世界的模拟类中并不使用它,而记录到目前为止主角的最高y坐标。如果他低于这个值与视锥体一半高度的差值,那么就认为它离开了屏幕。由于需要根据视锥的高度来决定主角的生死,因此并不能够使模型(世界模拟类)和视图之间完全独立,对此是可以容忍的。
4.3 系统功能模块
本系统一共有23个类文件,java源文件及其功能如表4-1所示:
表4-1 java源文件及其功能图
序号
1
2
3
4
5
6
文件名
SuperJumper
Settings
Assets
MainMenuScreen
OverlapTester
Animation
主要功能
启动入口
记录声音开启关闭
各种资源的读取
主菜单界面
检测各种碰撞
动画的两种状态,循环和不循环(不循环则动画播放完毕后停留在最后一张图片上)
所有的游戏物体都会在一个平面内绘制(或者说在屏幕大小内绘制),那么所有的物体都应该包含一个位置
显示游戏的帮助画面
7 GameObject
8 Helpscreen
.
9
10
11
12
13
14
15
16
17
18
19
HighscoreScreen 显示游戏的分数榜画面
GameScreen 显示游戏的不同状态的画面
World 实现控制运行等总体要求,如放置金币,主角移动速度,主角是否存活等。
WorldRenderer 用来把每个对象关联相应的图片资源,同时控制相机,实现动画。
DynamicGameO x, y 轴方向相关的运动信息
bject
Bob 主角
Castle 城堡
Coin 金币
Platform 平台
Spring 弹簧
Squirrel 空中飞行的松鼠
4.4 储存素材
在本游戏会用到一些图片和音效素材,如图4.2所示,Assets类的实际作用就是用静态变量把这些个要用到的图片,音效文件保存下来,放到内存中(从Asset文件夹中加载的资料文件).之后就可以在代码中方便的使用到这些资源文件,比如phics().drawPixmap(ound, 0, 0)。
.
图4.2 图片音效素材
……
4.5游戏界面
背景图片不仅使用在主菜单画面,也使用在所有的画面上。它与目标分辨率大小一样,都是320×480像素。主菜单项记录是300×110像素。在图5显示的背景是黑色的,这是因为白底白字是看不清的。在实际的图片中,背景使用的是透明像素。logo是274×142像素,在其4个角上使用了透明像素。
.
再接下来是帮助画面的图片。此处使用了一个320×480像素的全屏图片,而不是使用一组元素组合。这样做将减少绘制代码的数量,因此不会增加程序的大小。图2中显示了所有的帮助画面,唯一组合这些图片的是箭头按钮。
对于高分画面,将重用主菜单项中显示“HIGHSCORES”的图片部分。实际的分数将使用本章稍后将介绍的特殊技术进行渲染。画面剩下的部分再次使用背景图片和按钮组成。
图4.3游戏主界面
4.6 分数榜设定
很多游戏都有个高分榜这个设置,SupperJumper也不例外,
.
也有自己的“英雄榜”,上面按递减顺序排列了5个分数,每个玩家结束游戏后都会有得到一个分数,如果超过分数榜上最低一个,那么这个分数就可以进入分数榜,如图4.4所示。
图4.4 游戏高分榜
.........
public class HighscoreScreen extends Screen {
String lines[] = new String[5];
public HighscoreScreen(Game game) {
super(game);public HighscoreScreen(Game game) {
super(game);
for (int i = 0; i < 5; i++) {
lines[i] = "" + (i + 1) + ". " + ores[i];
.........
.
4.7游戏总控制
•
重力加速度向量是(0, -13)米/秒,它比现实中和炮示例中2使用的重力加速度要稍大。
•
Bob的初始跳跃速度向量是(0,11)米/秒。注意,跳跃速度只影响在y轴上的移动。水平移动则由加速度的当前读数定义。
•
当碰到弹簧时,Bob的跳跃速度是他正常跳跃速度的1.5倍,即(0,16.5)米/秒。同样,这个值也是纯粹通过实验得到。
•
Bob的水平移动速度是20米/秒。注意,这是一个无方向的速率,不是向量。稍后将讲解它是如何与加速计共同工作的。
•
松鼠不断地左右来回巡逻,它们的移动速度恒定为3米/秒。表示成向量则是,当松鼠向左移动时是(-3,0)米/秒,当它向右移动时是(3,0)米/秒。
由于游戏是运行在纵向模式的,因此将使用加速计在x轴方向的值。当手机没有发生倾斜时,x轴的加速度读数是0米/秒2。当完全向左倾斜至手机处于横向时,x轴的加速计读数是-10米/秒2。当完全向右倾斜时,x轴的加速计读数为10米/秒2。把加速计读数除以最大绝对速度(10)使其规范化,然后乘以Bob最大的水平速率,就得到了Bob的速度。这样当手机完全倾斜到一边时,Bob将以20米/秒从左向右运动,并且速度随手机倾斜变小而变小。当手机完全倾斜时,Bob的速度能达到两倍于平时的速
.
度。
4.8 游戏设置
这里的游戏游戏设置主要是指游戏运行的音效音乐的播放控制,同时还设置了分数榜数据的储存位置。
.........
//定义了音效的开关
public class Settings {
public static boolean soundEnabled = true;
.........
try {
//设置了音效高分榜等数据存储的位置
in = new BufferedReader(new InputStreamReader(
le(".mrnom")));
.........
至此,SupperJumper游戏各个类与功能设计完毕。
第五章 软件运行与测试
5.1系统测试
5.1.1 游戏页面显示
(1)运行程序,出现游戏界面。
.
(2)游戏界面显示是否正常,游戏边框,主角以及金币是否全部显示。
5.1.2 移动主角测试
分别按方向键左、右,主角按所指示方向移动。
5.1.3 主角碰到金币测试
(1)主角碰到金币后,金币会消失,无异常。
(2)主角碰到金币后,分数增加10分,无异常。
5.1.4 判定结束测试
(1)移动主角,分别左、右两个方向移动,直至到达城堡。此时,游戏会结束。
(2)移动主角,到一定高度后,撞击到松鼠。此时,游戏会结束。
5.1.5 暂停测试
游戏中途按暂停键,会暂停游戏。
5.1.6 恢复测试
暂停后,按恢复键,会继续游戏。
5.1.7 压力测试
(1)主角每次开始后直接向上跳,测试50次,游戏不会报任
.
何BUG。
(2)主角到达城堡,游戏不会报任何BUG。
5.2 结果分析
程序运行正常,本人完成的测试工作包括本章介绍的几个方面。具体通过了以下测试。游戏页面显示、移动主角测试,主角碰到金币测试,判定结束测试,结束后重新开始暂停测试,恢复测试,压力测试。在测试中,过程比较枯燥,但是还是认真的抱着严谨的态度地完成了测试。系统经过测试以后已经基本上排除了可能出现的错误,最初设想的功能基本上得到了实现。
第六章 结 论
SupperJumper是一款仿涂鸦跳跃的动作类游戏,其简单的画面和易操作性使玩家容易上手,适合不同年龄段的玩家娱乐。然后这款游戏也存在有不足的地方,有些功能目前还没有得到实现。该游戏算法不多,主要都是依赖框架的应用,在本游戏的编写过程中,只要javase学得比较深入,都可以比较轻松的写出该游戏,之后进行移植。通过这次的设计,提高了我在程序设计和调试方面的技巧,认识了自己的不足。同时也认识到,任何事情都需要脚踏实地的去做,一步一个脚印的完成,认真严谨,有了好的态度才能做好一件事情,经过长时间的努力和积累,经过不断地查找资料和总结,很好的完成了,这种收获的喜悦相信每个
.
人都能够体会到。这是一个毅力的磨练,是对我实际能力的一个提升,相信对我未来的学习和工作都有很大的帮助。
由于框架优良,游戏非常容易实现。纹理图集和SpriteBatcher的使用使性能得到提高。本文也讨论了如何渲染固定宽度的ASCII点阵字体。游戏机制的良好设计和世界单位与像素单位之间关系的清晰定义使得游戏开发非常容易。设想一下,如果所有的东西都是以像素为单位进行操作,这简直就是个噩梦。所有的计算都进行了分类——这并不利于低性能的Android设备。同时也把游戏逻辑和游戏展现相互独立开。总而言之,Super Jumper是非常成功的。
2024年1月5日发(作者:石浩波)
.
游戏设计
.
.
目 录
第一章 引言 ................................................................................................... 5
第二章 需求分析 .......................................................................................... 8
2.1 系统开发目标 .................................................................................. 8
2.2 系统需求分析 .................................................................................. 8
2.2.1 业务需求分析 ........................................................................ 8
2.2.2 用户需求分析 ........................................................................ 9
2.2.3 功能需求分析 ........................................................................ 9
第三章 系统概要设计 ............................................................................... 10
3.1 背景故事.......................................................................................... 10
3.2游戏程序流程设计 ........................................................................ 11
图3.2 游戏程序流程图 ............................................................... 12
第四章 系统详细设计 ............................................................................... 12
4.1画面和切换 ...................................................................................... 12
4.2 定义游戏世界 ................................................................................ 14
4.3 系统功能模块 ................................................................................ 16
4.4 储存素材.......................................................................................... 17
4.5游戏界面 ........................................................................................... 18
4.6 分数榜设定 ..................................................................................... 19
4.7游戏总控制 ...................................................................................... 21
4.8 游戏设置.......................................................................................... 22
.
第五章 软件运行与测试 .......................................................................... 22
5.1系统测试 ........................................................................................... 22
5.1.1 游戏页面显示 ...................................................................... 22
5.1.2 移动主角测试 ...................................................................... 23
5.1.3 主角碰到金币测试 ............................................................. 23
5.1.4 判定结束测试 ...................................................................... 23
5.1.5 暂停测试 ................................................................................ 23
5.1.6 恢复测试 ................................................................................ 23
5.1.7 压力测试 ................................................................................ 23
5.2 结果分析.......................................................................................... 24
第六章 结 论 ............................................................................................. 24
.
第一章 引言
安卓游戏是运行在安卓系统平台的游戏,随着移动终端设备的发展,安卓游戏不但可以运行于智能手机,也可以运行在平板电脑上。安卓游戏的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。Android开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。 开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系
.
统等建立应用软件的开发工具的集合。Android SDK 指的是Android专属的软件开发工具包。
libgdx是一个跨平台的2D/3D的游戏开发框架,它由Java/C/C++语言编写而成。ibgdx兼容大多数微机平台(标准JavaSE实现,能运行在Mac、Linux、Windows等系统,最近加入了对html5的支持)与Android平台(Android1.5以上即可使用,Android2.1以上可满功率发挥)。Libgdx以native方式自带图像解码器,通过其提供的Pixmap可以对指定图像进行像素级渲染操作,从而不依赖Android的Bitmap加载处理图像,可以支持png、jpg、bmp,最近的两个版本中加入了对gif图片的支持.Libgdx由audio、files、graphics、math、physics、scenes、utils这些主要类库所组成,它们分别对应了Libgdx中的音频操作,文件读取,2D/3D渲染,Libgdx绘图相关运算,Box2D封装,2D/3D游戏组件(3D部分目前无组件),以及Libgdx内置工具类。
Gdx是Libgdx类库运行的核心所在,不单运行Graphics、Input、Files、Audio、AndroidApplication等Libgdx关键部分,所必需的实例会在Libgdx初始化时注入Gdx中对应的graphics、input、files、audio、app等静态变量里面,就连Libgdx对OpenGL接口(或OpenGLES,视Libgdx运行平台而定,以下统称OpenGL)的GL10、GL11、GL20、GLCommon等封装类也会在Graphics实例化时分别注入到gl10、gl11、gl20、gl这四个同样位于Gdx
.
的静态变量当中。
.
第二章 需求分析
这是一款跳跃型的游戏,主人物会一直往上跳,我们只需控制左右移动让其踩在适当的跳台上即可继续的往上跳,最终加到的金币越多,同时要避开飞在空中的蜜蜂,直到到达最顶部的城堡,才进入下一关。
2.1 系统开发目标
采用基于Android的Java编程技术,以及用Libgdx框架的相关技术开发出界面简洁清新,易操作,细节精致,设置齐全的SupperJumper游戏。
2.2 系统需求分析
2.2.1 业务需求分析
总所周知,SupperJumper是一款经典不过时的游戏,它无论在电脑,小霸王,手机都有它的身影,即使现在市场上各种游戏百花齐放,各种各样,但是SupperJumper依然能够占有一席之地,其市场还是很大的.这是由于它的特殊在于它能吸引人更深入,简单上手,该游戏的优势在于它的简单易行,不论是小游戏机,还是手机,都能很快顺利的运行.
.
2.2.2 用户需求分析
游戏设计出来后,其质量还是要由用户来评判的,在游戏为用户所用时,用户也对游戏有自己的期望和要求。
(1) 简单易学
每个人的时间都是宝贵的,用户不愿意花一大堆时间去学习如何玩意个游戏,因此游戏必须很容易上手,要求界面简洁明了,否则太复杂难懂的话会让很多客户离去。
(2) 运行稳定
一个游戏如果设计出来却不能保证其稳定性,那么就可能使游戏无法正常运行。如果用户正在游戏突然软件崩溃了,无疑会让用户感到烦躁,从而把软件给卸载了,这样也会失去很多用户。
(3) 操作简便
用户之所以选择SupperJumper,就是由于其快捷简便性,所以我们要让用户玩的舒心则必然要设计出一套操作简便的系统。
2.2.3 功能需求分析
本项目是一个运行在安卓手机上的游戏,我们初步设定本游戏具有以下几个功能。
•游戏的主角不断向上跳跃,从一个平台跳到另一平台。游戏世界在垂直方向跨了多个画面。
•通过左右倾斜屏幕来控制水平移动。
.
•当游戏主角离开水平屏幕边界时,它将从屏幕相反的一边重新进入。
•平台可以静止或者水平移动。
•有些平台在主角撞上时会随机地变得粉碎。
•在向上的路上,主角可以收集物品来获得分数。
•除了钱币,在一些平台上会有弹簧,它们可以使主角跳得更高。
•邪恶的力量充满了游戏世界,它们水平移动。当碰上它们时,主角将死亡并且游戏结束。
•当主角掉落到屏幕的底部边缘时,游戏也将结束。
•在关卡的顶部会有一些目标,当主角碰上目标,新的关卡将开始。
•当游戏结束后,显示玩家在游戏中所获得的分数。
第三章 系统概要设计
3.1 背景故事
游戏的主角得了慢性跳跃症。他每次接触到地面都必须进行跳跃。更糟的是,他深爱的公主(不给她取名字了)被会飞行的松鼠杀手组成的邪恶军队绑架,关在天上的一个城堡中。在这种情况下,主角的病症反而对拯救公主有所帮助。他开始寻觅心爱的
.
人,与邪恶的松鼠军队战斗。
图3.1 初始的游戏机制实物模型,显示了主角、平台、钱币、邪恶势力和关卡顶部的目标
3.2游戏程序流程设计
本游戏程序流程图如图3.2所示。
.
图3.2 游戏程序流程图
第四章 系统详细设计
4.1画面和切换
•有一个带标识的主画面;有PLAY、HIGHSCORES和HELP菜单项;并有一个按键来控制声音的开启和关闭。
•有一个游戏画面来询问玩家是否准备好控制运行、暂停、
.
结束游戏和下一关卡的状态。比起Mr. Nom,这里只是新增了画面的下一关卡状态,它将在主角碰到城堡时触发。这时新的关卡生成,并且主角将重新从世界的底部开始并保持他的分数。
•有一个高分画面用来显示玩家最高的5个分数。
•有一个帮助画面来说明游戏机制和玩家的目标,此处省略了玩家如何进行控制的描述。
图4.1 Super Jumper的所有画面和切换
.
4.2 定义游戏世界
在世界空间中按物理规律定义了对象,其边界形状和位置的度量单位是米,速度的度量单位是米/秒。但对象的图像表示使用像素定义,因此不得不做一些映射。解决这个问题的方法是首先针对图像资源定义目标分辨率。与Mr. Nom一样,此处使用的目标分辨率是320×480像素(纵横比是1.5)。之所以使用这个目标分辨率,是因为这是最低的可行的分辨率,但是如果游戏专门针对平板电脑,则可以使用800×1 280像素这样的分辨率,或者这两种分辨率之间的一种分辨率,例如480×800像素(典型的Android手机)。不管目标分辨率如何,其原理是相同的。
接下来在像素和世界空间中的米之间建立对应关系。图3.1中的实物模型显示了不同对象使用的画面空间的大小以及它们间的相对比例。对于2D游戏,此处推荐将32像素映射为1米。那么现在在实物模型上覆盖一个网格,网格的尺寸是320×380像素,每个单元格大小是32×32像素。在世界空间中,单元格映射为1×1米的大小。图4.2显示的是实物模型和网格。
.
图4.2 覆盖网格的实物模型。每个单元格是32×32像素,对应游戏世界的1×1米
•
•
Bob是0.8×0.8米;它并不完全占用一个单元格。
平台是2×0.5米,水平占据两个单元格,垂直占据半个单元格。
•
钱币是0.8×0.5米。它几乎垂直占据一个单元格,水平占据半个单元格。
•
弹簧是0.5×0.5米,在两个方向上各占据半个单元格。实际上弹簧垂直方向比水平方向要稍长一点。它的边界形状是正方形,因此碰撞测试不是十分严格。
•
•
松鼠是1×0.8米。
城堡是0.8×0.8米。
由这些尺寸可以得到用于碰撞检测的对象的边界矩形的尺寸。它们的大小可以根据游戏对这些值的使用方式进行调整。
.
由于当主角出了屏幕底部边缘时将死亡,这样照相机也将在游戏机制中扮演角色。虽然我们使用照相机进行渲染并且当主角跳起时也向上移动它,但在世界的模拟类中并不使用它,而记录到目前为止主角的最高y坐标。如果他低于这个值与视锥体一半高度的差值,那么就认为它离开了屏幕。由于需要根据视锥的高度来决定主角的生死,因此并不能够使模型(世界模拟类)和视图之间完全独立,对此是可以容忍的。
4.3 系统功能模块
本系统一共有23个类文件,java源文件及其功能如表4-1所示:
表4-1 java源文件及其功能图
序号
1
2
3
4
5
6
文件名
SuperJumper
Settings
Assets
MainMenuScreen
OverlapTester
Animation
主要功能
启动入口
记录声音开启关闭
各种资源的读取
主菜单界面
检测各种碰撞
动画的两种状态,循环和不循环(不循环则动画播放完毕后停留在最后一张图片上)
所有的游戏物体都会在一个平面内绘制(或者说在屏幕大小内绘制),那么所有的物体都应该包含一个位置
显示游戏的帮助画面
7 GameObject
8 Helpscreen
.
9
10
11
12
13
14
15
16
17
18
19
HighscoreScreen 显示游戏的分数榜画面
GameScreen 显示游戏的不同状态的画面
World 实现控制运行等总体要求,如放置金币,主角移动速度,主角是否存活等。
WorldRenderer 用来把每个对象关联相应的图片资源,同时控制相机,实现动画。
DynamicGameO x, y 轴方向相关的运动信息
bject
Bob 主角
Castle 城堡
Coin 金币
Platform 平台
Spring 弹簧
Squirrel 空中飞行的松鼠
4.4 储存素材
在本游戏会用到一些图片和音效素材,如图4.2所示,Assets类的实际作用就是用静态变量把这些个要用到的图片,音效文件保存下来,放到内存中(从Asset文件夹中加载的资料文件).之后就可以在代码中方便的使用到这些资源文件,比如phics().drawPixmap(ound, 0, 0)。
.
图4.2 图片音效素材
……
4.5游戏界面
背景图片不仅使用在主菜单画面,也使用在所有的画面上。它与目标分辨率大小一样,都是320×480像素。主菜单项记录是300×110像素。在图5显示的背景是黑色的,这是因为白底白字是看不清的。在实际的图片中,背景使用的是透明像素。logo是274×142像素,在其4个角上使用了透明像素。
.
再接下来是帮助画面的图片。此处使用了一个320×480像素的全屏图片,而不是使用一组元素组合。这样做将减少绘制代码的数量,因此不会增加程序的大小。图2中显示了所有的帮助画面,唯一组合这些图片的是箭头按钮。
对于高分画面,将重用主菜单项中显示“HIGHSCORES”的图片部分。实际的分数将使用本章稍后将介绍的特殊技术进行渲染。画面剩下的部分再次使用背景图片和按钮组成。
图4.3游戏主界面
4.6 分数榜设定
很多游戏都有个高分榜这个设置,SupperJumper也不例外,
.
也有自己的“英雄榜”,上面按递减顺序排列了5个分数,每个玩家结束游戏后都会有得到一个分数,如果超过分数榜上最低一个,那么这个分数就可以进入分数榜,如图4.4所示。
图4.4 游戏高分榜
.........
public class HighscoreScreen extends Screen {
String lines[] = new String[5];
public HighscoreScreen(Game game) {
super(game);public HighscoreScreen(Game game) {
super(game);
for (int i = 0; i < 5; i++) {
lines[i] = "" + (i + 1) + ". " + ores[i];
.........
.
4.7游戏总控制
•
重力加速度向量是(0, -13)米/秒,它比现实中和炮示例中2使用的重力加速度要稍大。
•
Bob的初始跳跃速度向量是(0,11)米/秒。注意,跳跃速度只影响在y轴上的移动。水平移动则由加速度的当前读数定义。
•
当碰到弹簧时,Bob的跳跃速度是他正常跳跃速度的1.5倍,即(0,16.5)米/秒。同样,这个值也是纯粹通过实验得到。
•
Bob的水平移动速度是20米/秒。注意,这是一个无方向的速率,不是向量。稍后将讲解它是如何与加速计共同工作的。
•
松鼠不断地左右来回巡逻,它们的移动速度恒定为3米/秒。表示成向量则是,当松鼠向左移动时是(-3,0)米/秒,当它向右移动时是(3,0)米/秒。
由于游戏是运行在纵向模式的,因此将使用加速计在x轴方向的值。当手机没有发生倾斜时,x轴的加速度读数是0米/秒2。当完全向左倾斜至手机处于横向时,x轴的加速计读数是-10米/秒2。当完全向右倾斜时,x轴的加速计读数为10米/秒2。把加速计读数除以最大绝对速度(10)使其规范化,然后乘以Bob最大的水平速率,就得到了Bob的速度。这样当手机完全倾斜到一边时,Bob将以20米/秒从左向右运动,并且速度随手机倾斜变小而变小。当手机完全倾斜时,Bob的速度能达到两倍于平时的速
.
度。
4.8 游戏设置
这里的游戏游戏设置主要是指游戏运行的音效音乐的播放控制,同时还设置了分数榜数据的储存位置。
.........
//定义了音效的开关
public class Settings {
public static boolean soundEnabled = true;
.........
try {
//设置了音效高分榜等数据存储的位置
in = new BufferedReader(new InputStreamReader(
le(".mrnom")));
.........
至此,SupperJumper游戏各个类与功能设计完毕。
第五章 软件运行与测试
5.1系统测试
5.1.1 游戏页面显示
(1)运行程序,出现游戏界面。
.
(2)游戏界面显示是否正常,游戏边框,主角以及金币是否全部显示。
5.1.2 移动主角测试
分别按方向键左、右,主角按所指示方向移动。
5.1.3 主角碰到金币测试
(1)主角碰到金币后,金币会消失,无异常。
(2)主角碰到金币后,分数增加10分,无异常。
5.1.4 判定结束测试
(1)移动主角,分别左、右两个方向移动,直至到达城堡。此时,游戏会结束。
(2)移动主角,到一定高度后,撞击到松鼠。此时,游戏会结束。
5.1.5 暂停测试
游戏中途按暂停键,会暂停游戏。
5.1.6 恢复测试
暂停后,按恢复键,会继续游戏。
5.1.7 压力测试
(1)主角每次开始后直接向上跳,测试50次,游戏不会报任
.
何BUG。
(2)主角到达城堡,游戏不会报任何BUG。
5.2 结果分析
程序运行正常,本人完成的测试工作包括本章介绍的几个方面。具体通过了以下测试。游戏页面显示、移动主角测试,主角碰到金币测试,判定结束测试,结束后重新开始暂停测试,恢复测试,压力测试。在测试中,过程比较枯燥,但是还是认真的抱着严谨的态度地完成了测试。系统经过测试以后已经基本上排除了可能出现的错误,最初设想的功能基本上得到了实现。
第六章 结 论
SupperJumper是一款仿涂鸦跳跃的动作类游戏,其简单的画面和易操作性使玩家容易上手,适合不同年龄段的玩家娱乐。然后这款游戏也存在有不足的地方,有些功能目前还没有得到实现。该游戏算法不多,主要都是依赖框架的应用,在本游戏的编写过程中,只要javase学得比较深入,都可以比较轻松的写出该游戏,之后进行移植。通过这次的设计,提高了我在程序设计和调试方面的技巧,认识了自己的不足。同时也认识到,任何事情都需要脚踏实地的去做,一步一个脚印的完成,认真严谨,有了好的态度才能做好一件事情,经过长时间的努力和积累,经过不断地查找资料和总结,很好的完成了,这种收获的喜悦相信每个
.
人都能够体会到。这是一个毅力的磨练,是对我实际能力的一个提升,相信对我未来的学习和工作都有很大的帮助。
由于框架优良,游戏非常容易实现。纹理图集和SpriteBatcher的使用使性能得到提高。本文也讨论了如何渲染固定宽度的ASCII点阵字体。游戏机制的良好设计和世界单位与像素单位之间关系的清晰定义使得游戏开发非常容易。设想一下,如果所有的东西都是以像素为单位进行操作,这简直就是个噩梦。所有的计算都进行了分类——这并不利于低性能的Android设备。同时也把游戏逻辑和游戏展现相互独立开。总而言之,Super Jumper是非常成功的。