1、另一方面是程序员技术入门快,对有一定Java语言基础的人来说,学习和掌握Android开发技术非常快。二是源于Android手机操作系统的市场优势:自Google在2008年9月正式发布Android 1.0系统以来,Android系统在短短的3年时间就占据全球智能机市场48%的份额,如今已经增长至84.7%,远远超过IOS,稳坐全球第一。更需要特别说明的一点:开发周期短,是一个很大的优势。熟悉手机游戏市场的人都知道,手机游戏形式更新换代的周期很短,如果一旦错过了最佳发布时间,即使开发出来的产品再好,也只能成为废品。二、开发工具的介绍开发此款游戏主要使用到的工具有四种:Eclipse,是一个开
2、放源代码的、基于Java的可扩展开发平台;ADT,是Eclipse平台下用来开发Android应用程序的插件;Android SDK,是Android专属的软件开发工具包; Fireworks,是Adobe推出的一款图形编辑软件。2.1 EclipseEclipse是著名的跨平台的自由集成开发环境(IDE)。其本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE,因此得到了众多组织定力支持。2.2 ADT这是Eclipse插件,作用是关联Android SDK,使Eclipse能够新建A
3、ndroid工程。2.3 Android SDKAndroid SDK全称为Android Software Development Kit,它提供了在Windows/Linux/Mac平台上开发Android应用的开发组件。包含了在Android平台上开发移动应用程序的各种工具集,主要是由以下5个部分组成:Andriod模拟器(AVDManager.exe):运行在计算机上的虚拟移动模拟器,可以使用模拟器来在一个实际的Android运行环境下设计,调试和测试应用程序。调试监视服务(ddms.bat):它集成在Dalvik(Android平台虚拟机)中,用于管理运行在模拟器或设备上的进程,并协
4、助进行调试。可以用它来去除进程,选择一个特定程序来调试,生成跟踪数据,查看堆和线程数据,对模拟器或设备进行屏幕快照等。Android调试(adb.exe):它用于向模拟器或手机设备安装应用程序的apk文件和从命令行访问模拟器或手机设备.也可以用于将标准的调试器连接到运行在android模拟器或手设备上的应用代码。SQLite3数据库(sqlit3(sqlite3.exe):Android应用程序可以创建和使用SQLite数据文件,开发者和使用者也可以方便的访问这些数据文件创建SD卡工具(mksdcard(mksdcard.exe)2.4 FireworksFireworks是Macromedi
5、a公司发布的一款专为网络图形设计的图形编辑软件,它大大简化了网络图形设计的工作难度,无论是专业设计家还是业余爱好者,使用Fireworks都不仅可以轻松地制作出十分动感的GIF动画,还可以轻易地完成大图切割、动态按钮、动态翻转图等。三、技术介绍 该设计主要使用了SurfaceView游戏框架,采用双缓存技术避免屏幕出现闪烁。3.1 SurfaceViewSurfaceView可以直接从存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器。它的特性是:可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到Surfac
6、eView,游戏中的背景、人物、动画等等尽量在画布Canvas中画出。3.2 双缓存窗体在刷新时,总要有一个擦除原来图象的过程,它利用背景色填充窗体绘图区,然后再调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差,造成闪烁。闪烁是图形编程的一个常见问题。需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。当数据量很大时,绘图可能需要几秒钟甚至更长的时间,闪烁现象会更加严重,为了解决这些问题,可采用双缓冲技术来绘图。3.3 Cocos2d-android游戏引擎cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创
7、建自己的多平台游戏时节省很多的时间。Cocos2D也拥有几个主要版本,包括Cocos2D-iPhone、Cocos2D-X,以及被社区普遍看好的Cocos2D-HTML5和JavaScriptbindings for Cocos2D-X。同时也拥有了非常优秀的编辑器(独立编辑器),例如SpriteSheet Editors、Particle Editors 、Font Editors 、 Tilemap Editors。另外,2012年发布的CocoStudio工具集是开源游戏引擎Cocos2d-x开发团队官方推出的游戏开发工具,目前已经进入稳定版。CocoStudio吸取了他们自己在游戏制作
8、中的经验,为移动游戏开发者和团队量身定做,旨在降低游戏开发的门槛,提高开发效率,同时也为Cocos2D-X的进一步发展打下基础。四、系统功能系统主要有以下几个功能4.1 项目概述 本项目分为五个主要部分:常规、夜晚、无尽三个模式进行游戏,和游戏设置与查看帮助。用例图如图2.1。图 2.1 系统用例图4.2 项目概述4.2.1 常规模式此部分主要实现玩家在游戏背景为白天的情况下玩游戏。该部分具体情况如表2.1。表 2.1 常规模式用例名称常规模式功能简述在常规模式下进行游戏前置条件玩家进入游戏后置条件进入常规模式开始游戏基本流1、点击主菜单页面“常规模式”按钮,进入常规模式开始游戏2、点击“返回
9、”按钮,用例终止4.2.2 夜晚模式此部分主要实现玩家在游戏背景为夜晚的情况下玩游戏。该部分具体情况如表2.2。表 2.2 夜晚模式夜晚模式在夜晚模式下进行游戏进入夜晚模式开始游戏1、 点击主菜单页面“夜晚模式”按钮,进入夜晚模式开始游戏2、 点击“菜单”按钮游戏暂停并进入主菜单3、 点击“夜晚模式”回到游戏4、 点击“返回”按钮,用例终止4.2.3 无尽模式此部分主要实现游戏玩家在常规或者夜晚模式通关的情况下玩游戏。该部分具体情况如表2.3。表 2.3 无尽模式无尽模式在无尽模式下进行游戏玩家在常规或者夜晚模式通关1、 点击主菜单页面“无尽模式”按钮,进入无尽模式开始游戏3、 点击“无尽模式
10、”回到游戏4.2.4 游戏设置此部分主要实现对游戏背景音乐、效果音的开启和关闭。该部分具体情况如表2.4。表 2.4 无尽模式游戏设置打开、关闭游戏背景音乐或者效果音想要对游戏进行设置游戏属性改变1、 点击主菜单页面“选项”按钮,进入“游戏设置”界面2、 在游戏设置界面中,根据需要进行设置3、 设置之后自动返回主菜单或者不设置点击“返回”按钮,用例终止4.2.5 关卡选择此部分主要实现玩家根据自己喜好选择在哪个游戏关卡下玩游戏。但是不能选择没有通过的关卡。4.2.6 查看帮助此部分主要实现游戏玩家查看帮助。五、概要设计5.1 游戏设计5.1.1 游戏背景人类与僵尸之间的仇恨由来已久,为了争夺生
11、存空间,僵尸一有机会就向人类发起攻击。但是人类也不会束手就擒,他们培养出了可以对僵尸造成伤害的植物,当僵尸进攻时这些植物就是人类捍卫家园的武器。5.1.2 游戏逻辑(1)僵尸是进攻方,人类通过种植培育出的各种进攻,防御型植物来抵抗僵尸的进攻。想要植物成长来攻击,防御僵尸需要相应的值。(2)不同的关卡中,供选择的植物不同,僵尸进攻的单位也不同。例如第一关只有普通僵尸进攻,第二关就会出现两种僵尸。(3)在交战区,玩家要种植进攻,防御单位是需要植物的,所以还需要种植产生的生产单位。(4)每关都有相应的敌人数量,全部消灭之后过关。如果有敌人穿过交战区域到达人类后方,则判定游戏失败。5.1.3 僵尸作战
12、单位(1)普通僵尸。移动速度1px/帧,生命值3,吃掉植物需要3s。(2)戴帽子僵尸。移动速度1px/帧,生命值4,吃掉植物需要3s。(3)戴铁桶僵尸。移动速度1px/帧,生命值5,吃掉植物需要3s。(4)运动员僵尸。移动速度2px/帧,生命值3,吃掉植物需要3s。(5)佩戴铁网僵尸。移动速度1px/帧,生命值6,吃掉植物需要3s。5.1.4 植物作战单位(1)向日葵。消耗值50,能够生产,每10s生产的值为50,没有攻击力。(2)普通豌豆射手。消耗值100,每5s发射一颗子弹,攻击力为1。(3)冰冻豌豆射手。消耗值175,每5s发射一颗子弹,攻击力为1。(4)加强型豌豆射手。消耗值200,每
13、5s发射两颗连续的子弹,每颗子弹攻击力为1。(5)土豆卫士。消耗值50,可以抵挡僵尸3s,为其他攻击植物争取时间。5.1.5 每关进攻的僵尸及可以种植的植物说明第一关,进攻的僵尸有普通僵尸,可以选择种植向日葵,普通豌豆射手。第二关,进攻的僵尸有普通僵尸,戴帽子僵尸,可以选择种植向日葵,普通豌豆射手,冰冻豌豆射手。第三关,进攻的僵尸有普通僵尸,戴帽子僵尸,戴铁桶僵尸,可以选择种植向日葵,普通豌豆射手,冰冻豌豆射手,加强型豌豆射手。第四关,进攻的僵尸有普通僵尸,戴帽子僵尸,戴铁桶僵尸,运动员僵尸,可以选择种植向日葵,普通豌豆射手,冰冻豌豆射手,加强型豌豆射手,土豆卫士。第五关,进攻的僵尸有普通僵尸
14、,戴帽子僵尸,戴铁桶僵尸,运动员僵尸,佩戴铁网僵尸,可以选择种植向日葵,普通豌豆射手,冰冻豌豆射手,加强型豌豆射手,土豆卫士。5.1.6 关卡说明总共有五条防御路线。每条防御路线最多可以放九个单位。僵尸在屏幕之外生成,随机出现在五条路线中的一条,之后缓缓向人类后方前进。每关都有相应的僵尸数量,全部消灭之后就过关。如果敌人穿过交战区域到达人类后方,则判定游戏失败。5.1.7 碰撞逻辑说明僵尸从屏幕右方向左移动,当僵尸生成之后,如果该条路线种植了攻击性植物,将开始发射子弹。子弹,植物与僵尸碰撞大小区域即为图片大小区域,当两者发生接触后即发生碰撞。子弹与僵尸碰撞之后随即消失,僵尸生命值随即相应减少。
15、子弹超过屏幕右边界后消失。5.1.8 状态播放规则所有植物素材均为8帧,僵尸素材为7帧。每100ms播放一帧,播放完毕之后自动从第一针开始重新播放,如此循环。5.2 软件架构根据前面的需求分及用户的基本要求,软件的总体结构设计包括有软件加载、主界面、主要功能选择、模式选择、开始游戏、游戏设置等。软件的总体架构如图3.1。图 3.1 软件总体架构图软件加载:用户打开游戏后进行游戏加载欢迎用户使用该软件;主界面:主要展现游戏整体的功能界面;模式选择:玩家根据自身喜好决定并选择在何种模式下进行游戏;开始游戏:实现植物大战僵尸的功能;游戏设置:实现对游戏各种属性进行设置的功能。5.3 软件功能结构图根
16、据总体设计例图,分析出程序功能主要包括:游戏加载、游戏模式选择、关卡选择、游戏设置、游戏帮助。主要根据软件基本设计模块来设计这些功能,软件总体功能结构如图3.2。图 3.2 软件功能结构图5.4 软件具体功能模块基本介绍根据游戏的具体功能模块:主要功能选择、游戏音效开关、模式选择、关卡选择、查看帮助帮助等功能模块。植物大战僵尸游戏功能模块有以下功能:5.4.1 主要模块选择功能该模块其实就相当于植物大战僵尸游戏的主菜单,在该模式下,玩家可以对游戏属性进行设置,根据自己的喜好选择如何开始游戏,以及查看游戏帮助等所有该游戏提供给玩家的功能。游戏状态为MENU时激活该模块,之后根据玩家在不同位置的触
17、屏事件调用相关的功能模块,在玩家点击设备返回按钮时退出游戏。功能选择模块流程如图3.3。5.4.2 游戏声音开关功能游戏默认关闭背景音效和效果音,玩家可以根据自己爱好选择是否开启背景音乐或者游戏效果音。在主菜单中点击“选项”按钮,玩家则进入声音设置功能,因为默认关闭背景音,这时会显示开启音乐,如果音乐开启后再次进入声音设置功能将显示关闭音乐。游戏效果音显示与背景音效相同。图 3.3 功能选择模块流程图5.4.3 模式选择功能该游戏分三种模式,常规、夜晚和无尽模式。打开游戏后因为还没有通关(总共五个关卡),所以不能选择无尽模式游戏。这时玩家可以在常规模式和夜晚模式中进行选择,在通过所有关卡之后,
18、将封锁常规和夜晚模式,玩家只能选择无尽模式。不管哪种模式,选择之后自动开始游戏。5.4.4 关卡选择功能游戏分为5个关卡,每关有不同数量的僵尸且依次递增,玩家通过种植植物道具来消灭僵尸,待本关所有僵尸均消灭之后游戏自动进入下一关,并且玩家得到的奖励将显示在屏幕中的种子栏中,显示之后玩家就可以选择它进行种植,当然前提是值大于等于该植物所需要消耗的值,可以通过种植向日葵来得到,种的越多获得值的速度越快。为了避免作弊,关卡选择只对玩家通过的关卡有效。5.4.5 查看帮助功能每款软件都具有帮助功能,该游戏也不能例外。在查看完帮助之后点击屏幕或者设备返回键将会自动转到主菜单界面。六、界面设计软件用户界面
19、是指软件用于和用户交流的外观、部件和程序等等。为了使该游戏在界面上达到吸引眼球的目的,结合了图形和版面设计的相关原理对其界面进行了美化、规化的设计。6.1 结构设计根据对软件架构的分析,知道游戏应该有以下界面:欢迎界面(游戏加载)、游戏主菜单、关卡选择界面、游戏设置界面、查看帮助界面、胜利界面、失败界面、游戏界面。打开软件之后显示到欢迎界面、点击“开始游戏”之后界面转到主菜单界面,之后用户根据需要选择各种功能后转到相应界面,不同界面之间的跳转关系如图4.1。图 4.1 界面跳转关系图6.2 交互设计该游戏为Android中文版,因此界面语言选择使用中文。每个页面都添加有onTouch()函数和
20、onKeyDown()函数以响应用户触屏和点击按键事件,其功能都是退出本页面,在欢迎、主菜单界面点击退出按钮则是退出游戏,这么设置主要是为了程序方便退出。主菜单实现了程序功能选择功能,其实它就相当于实现了程序导航功能。主菜单界面设计如图4.2。游戏界面有一个种子收集栏,点击该区域相应种子之后将其拖动到种植区域就能将植物种植,种植区分为五个横着的跑到,每行都有僵尸进攻。游戏界面设计如图4.3。6.3 视觉设计 游戏采用绿色为主色调,这是大部分植物的颜色,色彩与容符合。角色造型使用卡通设计表现形式显得滑稽、可爱。图 4.2 主菜单界面设计图 图 4.3 游戏界面设计图七、详细设计与实现植物大战僵尸
21、游戏采用面向对象的方法进行设计,在对象设计过程中将程序中各种事物都看成是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。把对象划分为对象类,为他们定义数据与方法。建立子类与父类的结构关系。将需要使用的图片准备好,需要修改的用Fireworks修改,最后使用Java代码将该游戏各个部分描述出来。5.1 搭建游戏基本骨架5.1.1 SurfaceView框架在Android系统中创建植物大战僵尸游戏的实现方法,需要使用到SurfaceView游戏框架,它主要是用来开发复杂的游戏,在要求程序执行效率很高时,例如对速度要求很高的游戏,可以使用双缓冲来显示。游戏中的背景、人物都绘制在一个画布上,
22、而Surfaceview可以直接访问一个画布。因为系统默认建立竖屏项目,所以首先在AndroidManifest.xml配置文件的里添加代码android:screenOrientation=landscape将屏幕设置为横屏显示。定义一个类“MainSurfaceView”,此类继承SurfaceView,除此之外还要实现android.view.SurfaceHolder.Callback和Runnable接口。在其中定义了一个SurfaceHolder类的实例,该类可以为提供SurfaceView的大小,格式等,并且主要用于监听SurfaceView的状态。我们是通过SurfaceHol
23、der来控制SurfaceView的,使用lockCanvas()函数来获取到SurfaceView的Canvas对象,再通过在Canvas上绘制容来修改SurfaceView中的数据。为了防止SurfaceView在绘制过程中被修改、摧毁等发生的状态改变,要用lockCanvas()函数对Canvas画布进行加锁,在绘制完成后还要使用unlockCanvasAndPostt()函数来解锁画布和提交。因此绘画函数总是在这两个函数之间进行调用。根据界面设计,在该类中定义表示游戏各种状态的整型常量:GAME_MUNU、GAME_WELCOME、GAME_INGDAY、GAEM_WIN、GAME_L
24、OST、GAME_SELECT等将他们初始化。定义画图函数myDraw(),里面使用switch()语句实现在不同游戏状态下的游戏绘图。onTouchEvent()函数同样这么处理。在游戏中,基本不会等用户每次触发了按键事件、触屏事件才去重绘画布,而是会固定一个时间去刷新画布,比如僵尸单位前进时向前迈步、植物单位的动态显示、子弹前进等并不会跟玩家交互,但是这些元素都是动态的。所以游戏开发中,要设置一个线程不停的去重绘画布,实时的更新游戏元素的状态。因此在实现run()方法时,要使用while循环在循环标志为真的情况下每隔一段时间调用绘画函数,这一段时间到底要多长呢?无疑这必须要根据人眼视觉暂留
25、的特性来确定。比如一个视频,如果帧数达到24帧,那么这个视频播放起来人眼是感觉不到卡顿的。24帧意思就是每秒播放24图片。为了让程序达到每秒绘制将近24次,让程序每次开始绘制到下一次开始绘制的时间保持在50ms之,一秒绘制20次,这已经能够满足该游戏的需求了。接下来修改MainActivity类,onCreate(Bundle savedInstanceState)函数,用setContentView(new MainSurfaceView(this)让其显示自定义的SurfaceView视图,使用requestWindowFeature(Window.FEATURE_NO_TITLE)隐去标
26、题栏,再使用getWindow().setFlags()函数隐去状态栏。定义init()函数将Config类中定义的各种位图初始化。5.1.2 Welcome类这是定义的欢迎界面的类,定义了开始游戏按钮的横纵坐标等,它的draw()函数绘制了欢迎界面背景和图片按钮。onTouchEvent()函数的功能是玩家在图片按钮区域触发ACTION_DOWN事件后,控制显示表示按钮被按下的图片。当玩家在按钮区域触发ACTION_UP事件后,按钮图片显示为未按下状态并使用MainSurfaceView.gameState = MainSurfaceView.GAME_MENU代码将游戏转到主菜单界面。5.
27、1.3 Menu类游戏主菜单,其中用boolean类型定义了所有按钮是否按下的状态,并将它们全部初始化为false。将“常规模式”、“夜晚模式”、“无尽模式”、“退出”等按钮按照主菜单界面设计中的布局绘制好。在ACTION_DOWN或者ACTION_MOVE事件中检测每个按钮的状态(是否被按下),如果是,则在draw()函数中绘制被按下状态的相应图片按钮。在ACTION_UP事件中将被释放按钮的状态修正并转到相应的游戏状态,比如点击“帮助”后调用MainSurfaceView.gameState = MainSurfaceView.GAME_HELP改变游戏状态。如果点击“退出”,调用Syst
28、em.exit(0)直接退出游戏。5.1.4 Option类实现游戏声音设置功能。绘制完背景之后再绘制未按下状态的声音开关按钮。玩家在按钮区域点击一次该按钮,onTouchEvent()函数将变量Config.isPlayMusic取反,如果该值为真则播放背景音乐,如果为假则停止播放背景音乐,并调用MainSurfaceView.backgroundMusic.prepare()函数为下一次开启背景音乐做准备。完成这些动作之后将游戏转到主菜单。5.1.5 Help类Help类是给玩家提供帮助信息,把帮助容写在一图片上,玩家需要帮助时打开该功能,该类把帮助图片绘制在屏幕上,玩家可查看帮助。看完之
29、后点击屏幕触发ACTION_UP事件,游戏转到主菜单界面。5.1.6 Select类该类为玩家提供选择关卡功能。玩家点击屏幕并在相应关卡位置触发ACTION_UP事件后,程序判断现在已通过最高关卡Config.tempLevel是否大于或者等于用户选择的关卡,如果成立,则将游戏设置为玩家选择关卡,否则弹出消息提示用户“该关卡还没解锁”。接着在MainSurfaceView类中将游戏状态gameState初始化为GAME_WELCOME,定义上述类的对象并初始化,在myDraw(),onTouchEvent()函数相应的游戏状态下分别调用这些对象的draw()和onTouchEvent()函数。到此游戏基本骨架搭建完成,类图如图5.1。图5
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1