毕业设计(论文)-基于Android的植物大战僵尸的设计与实现.doc_第1页
毕业设计(论文)-基于Android的植物大战僵尸的设计与实现.doc_第2页
毕业设计(论文)-基于Android的植物大战僵尸的设计与实现.doc_第3页
毕业设计(论文)-基于Android的植物大战僵尸的设计与实现.doc_第4页
毕业设计(论文)-基于Android的植物大战僵尸的设计与实现.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学毕业设计 (论文)用纸 太 原 理 工 大 学 毕业设计(论文)任务书 第 1 页 毕业设计(论文)题目: 基于 Android 的植物大战僵尸的设计与实现 全套设计加扣 3012250582 毕业设计(论文)要求及原始数据(资料): 1综述植物大战僵尸游戏的技术流行现状; 2深入了解植物大战僵尸游戏的插件和相关技术; 3熟练掌握植物大战僵尸游戏的应用与分析,训练编写插件程序的能力; 4设计植物大战僵尸游戏针对植物,僵尸的实现; 5深入分析植物大战僵尸的关键技术与编写语言; 太原理工大学毕业设计 (论文)用纸 6训练检索文献资料和利用文献资料的能力; 7训练撰写技术文档与学位论文的能力。 太原理工大学毕业设计 (论文)用纸 毕业设计(论文)主要内容: 1手机游戏行业概述; 2开发工具的介绍; 3细化模式,进行需求分析的设计; 4设计游戏背景,游戏逻辑,简单的关卡说明; 5. 设计僵尸作战单位和植物作战单位; 6搭建游戏骨架,进行详细的设计与实现; 7运行,调试游戏。 学生应交出的设计文件(论文): 1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文; 2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材 料。 太原理工大学毕业设计 (论文)用纸 第 2 页 第 3 页 太原理工大学毕业设计 (论文)用纸 主要参考文献(资料): 1、李华明.Android 游戏编程之从零开始M.北京:清华大学出版社 2011 年 10 月 2、陈强.Android 实例开发完全手册M.北京:人民邮电出版社 2012 年 07 月 3、陈昱勋,陈小风和郑名杰等.Google Android SDK 开发范例大全M.北京:人民邮电 出版社 2011 年 10 月 4、林城.Android 2.3 应用开发实战J . 机械工业出版社,2011:17-321. 5、韩超.Android 经典应用程序开发J . 人力资源出版社,2011:5-18. 6、张海藩.软件工程导论(第 4 版)J. 北京:清华大学出版社,2006:34-38. 7、亢勇,陈自力,李鹏,路平. 面向对象的软件测试J. 测试技术学报, 1999,(02):15-23. 8、KEN ARNOLD,JAMES GOSLING,DAVID HOLMES: JAVA PROGRAMMING LANGUAGE M,POSTS 安装完成后,可以检查 JDK 是否安装成功。打开 cmd 窗口,输入 java-version 查看 JDK 版本信息,出现以后画面表示安装成功,如图 2-1 所示。 太原理工大学毕业设计 (论文)用纸 6 图 2-1 配置成功信息 (2)安装 Eclipse 根据以上到下面的地址下载安装,也可以选择下载绿色版,解压即可使用。 (3)安装 Android JDK 运行 SDK 的安装。exe,在可用的软件包,点击。如果你没有看到任何包可以安装, 请单击“设置”,选择其他“强制 https:/ /”,然后点击可用的软件包。选择安装 SDK 和它的文档或其他的软件包,在安装时选择安装,点击接受,接受,开始下载并 安装所选的软件包。在用户变量值的一种新的路径是:在绝对路径的 Android SDK 工 具 如图 2-2 所示。 图 2-2 配置环境 单击“确定”,重新启动计算机,进入 cmd 窗口重启后,检查 SDK 安装成功,运 行 Androidh,如果有类似下面的输出,表示安装成功,如图 2-3 所示。 太原理工大学毕业设计 (论文)用纸 7 图 2-3 jdk 安装成功 (4)安装 ADT 点击打开 Eclipse IDE,接下来进入菜单中的”help”-”Install New Software”。 点击 Add.按钮,会弹出一个对话框,要求输入 Name 和 Location:Name 自己随便取 值,Location 输入 http:/dl- 2-4 所示: 图 2-4 安装 ADT 回去之后,当然,在下拉列表中选择我们刚刚添加的工作后,ADT,我们会看到一个 开发工具,它将扩大 Android DDMS 和 Android 开发工具,检查。 如图 2-5 所示。 太原理工大学毕业设计 (论文)用纸 8 图 2-5 选择 ADT 中安装的组件 之后的步骤就是按提示一步接一步 next: i、选择 Window Preferences. ii、首先左边的面板选择 Android,接着在右侧点击 Browse.并选中 SDK 路径,本机 为: D:AndroidDevelopandroid-sdk-windows iii、点击 Apply、OK。配置完成。 2.3 Android 系统特性 Android 是一个由操作系统、中间架构、应用程序等软件构造出来的堆栈架构。 从下到上,它的核心是嵌入式作业系统,配合谷歌的安卓开发的图书馆和应用架构, 开发不同的应用。 2.3.1 Android 的功能特性 (1)在应用程序架构中的基本组件的各种不同,在开发应用程序,可以直接调用 这些组件,可以节省大量的时间和精力。 (2)Dalvik 虚拟机:在 Android 系统平台上使用的虚拟机不是 sun 公司的标准的 java 虚拟机,但谷歌开发代号为 Dalvik 虚拟机,在保证和 API 兼容的同时,对其进行 了移动电话的大幅优化,减少占用资源,具体表现为提高效率,等等。 (3)集成浏览器:集成浏览器指的是 Android 内建的浏览器,它是以 WebKit 浏 览引擎为基础开发的。它是一个开源的网页浏览器引擎,与安卓自身的功能进行合作, 太原理工大学毕业设计 (论文)用纸 9 在浏览网页时能取得更好的效果,如:网站信息的本地缩放、触控的操作效果等 (4)优化的绘图能力:Android 绘图函数包含 2 d 和 3 d,2 d 两方面,Android 提 供了一套特殊的图书馆;在 3 方面采用 opengles1.0(嵌入式系统的 OpenGL)的标准 类库。他们属于一种非常快速的图形引擎。 (5)SQLite 数据库:SQLite 是一个轻量级的数据库,内存资源是非常低的,它被 用在许多嵌入式产品。它可以支持包括主流的 Windows / Linux / Unix 操作系统,同时 可以结合多种编程语言,如 PHP,java,和 ODBC 接口,使用 MySQL,PostgreSQL 相比,其运行速度和更好的。在一个单独的磁盘文件完整的保存在数据库中,虽然它 的体积很小,但它支持其他开源数据库的 SQL 语句。同时它还支持事务功能和并发处 理等等。SQLite 是一个轻量级的数据库连接的开放式,更加适用于移动电话。 (6)支持多媒体功能:主要用于播放多媒体文件。其中包含对音频和视频的播放 支持,并支持在网络上直接播放多媒体。 (7)GSM 技术:全球移动通信系统,通常被称为“全球”,是一种起源于欧洲 的移动通信技术标准,其发展的目的是让全世界都可以使用手机网络标准,让用户拥 有一部手机就能行遍全球。GSM 技术是手机硬件方面的体现。 (8)蓝牙及 wifi:蓝牙和 wifi 是一种开放、低成本、短距离的无线连接技术,可 取代短距离的电缆,实现话音和数据的无线传输。此次的项目使用的就是 wifi 技术, 利用 Android 自带的 wifi 技术实现局域网通信。Wifi:Wi-Fi 技术,与蓝牙技术,都属 于短距离无线技术在办公室和家里使用。所使用的技术是近 2.4 兆赫频段,该频段是 在无线频谱属于未经许可。现在你可以使用的标准有两个,分别是 IEEE802.11 和 IEEE802.11b。沟通能力也属于手机硬件,也开发 Android 应用程序可以是一个突出的 特点。 (9)GPS:Global Positioning System,全球定位系统(全球定位系统),它是一个 由全球卫星覆盖的系统。该系统可以保证在任何时间,任何地点可以观察到在同一时 间 4 颗卫星,以确保卫星可以收集到测试点的经度和纬度和高度,以实现导航和定位, 时间等,这项技术可用于指导飞机,船舶,车辆和个人。这个功能也是手机硬件的体 现,也是可以开发出安卓应用时的特性之一,可以突破。 太原理工大学毕业设计 (论文)用纸 10 2.3.2 android 的应用架构 对于一个 Android 应用程序来说,是由 Activity、IntentReceiver、Service、Content Provider 四部分组成6。在应用程 序中使用时,需要在配置文件 AndroidManifest.xml 中进行配置。此配置文件是每个 安卓应用程序所必需的,用于定义应用程序的组件,组件的功能以及必要条件等。 Android 应用的构成和工作流程如图 2-6 所示。 图 2-6 Android 的构成和工作流程图 以下四个组件,通常用来构建一个完整的可运行的 Android 应用程序。 (1)活动 (2)意图接收器 (3)服务 (4)内容提供者 然而,并非所有的安卓应用程序必须有上述四个组件,可以形成一个或以上。当决定 用上面的哪些组件来构建安卓应用,需要将它们注册在 AndroidManifest.xml 文件中, 这是一个 XML 配置文件,在这个文件中可以声明应用程序组件以及它们的特性和要 求。这个配置文件十分重要,是每个 Android 应用程序所必不可少的一部分。 太原理工大学毕业设计 (论文)用纸 11 3 需求分析 3.1 项目需求 本项目分为以下部分:游戏界面,开始游戏,游戏失败, 闯关成功,背景音乐。 3.1.1 结构需求 根据对软件架构的分析,知道游戏应该有以下界面:欢迎界面(游戏加载)、 游戏主菜单、胜利界面、失败界面、游戏界面。 打开软件之后显示到欢迎界面、点击 “开始游戏”之后界面转到主菜单界面,之 后用户根据需要选择进入游戏界面。 3.1.2 交互需求 该游戏为植物大战僵尸 Android 中文版,游戏语言选择使用中文。为了响应用 户触屏和点击按键事件,每个页面都添加有 onTouch()函数和 onKeyDown()函数。 在欢迎、主菜单界面点击退出按钮 则立即退出游戏,方便了游戏的退出。 游戏设有 一个载入动画,从左到右缓慢的展现出游戏界面,为游戏开始做好准备。 游戏界面的左上方设有一个种子收集栏, 一旦收集到的阳光到达它的建造值, 点击方格内相应区域的植物之后,将其拖动到种植区域就能将植物种植, 一个区域 只能种植一种植物不能重复种植,不能 在非种植区域里种植植物。种植区分为五个 横着的跑道,僵尸随机出现在每一个跑道中。游戏界面设计 ,如图 3-1 所示。 太原理工大学毕业设计 (论文)用纸 12 图 3-1 游戏界面设计图 3.1.3 视觉需求 游戏基本采用了原版游戏的颜色基调,以绿色为主,体现植物的本色, 视觉效 果柔和,不刺激。载入动画采用蓝色,并划分出网格,明显的显示出种植区和非种 植区。对植物设置动画效果,使游戏更加的生动,增加了游戏可爱的风格。 3.2 项目概述 3.2.1 游戏界面 运行 APP 进入游戏开始界面,点击开始游戏实现页面的跳转,跳转到游戏界面。 游戏音效默认为打开模式。 3.2.2 游戏模式 此部分主要实现玩家在进入游戏界面后的游戏操作。该部分具体情况 ,如表 3- 1 所示。 太原理工大学毕业设计 (论文)用纸 13 表 3-1 游戏模式 用例名称游戏模式 功能简述在常规模式下进行游戏 前置条件玩家进入游戏 后置条件进入游戏模式开始游戏 基本流11、运行 APP,进入游戏欢迎界面,进入常规模式开始游戏 12、点击“返回”按钮,用例终止 3.3 项目框架 根据需求分析和用户的基本需求,软件设计的总体结构包括:软件负载、主界 面选择、主要功能、启动游戏等。 软件加载:运行 APP 后进入游戏加载界面,欢迎 用户使用该软件; 主界面:展现游戏的整体功能,游戏的入口端; 开始游戏:进入游戏,实现对战的功能; 本设计主要利用 SurfaceView 游戏框架,采用双缓冲技术来避免闪烁的屏幕出 现。 3.3.1 SurfaceView 一般程序的视图和用户响应都在同一个线程中处理,这就是为什么处理事件(如 访问网络)需要在另一个线程中放置(防止用户线程操作和绘图)。但是在其他线程 中却不能修改 UI 元素,例如,在一个后台线程更新自定义视图(称为自定义视图触摸 功能角度)是不允许的。如果在其他线程绘图接口的需要,需要尽快更新界面或渲染 UI 界面需要很长的时间,这种情况将使用 SurfaceView。 SurfaceView 可以直接从内存或 DMA 硬件接口获得,如图像数据,是一个非常重要 的图形容器。 它的优点是:为了避免被冰阻塞主线程绘图作业,提高了响应速度,使用 SURFACEVIEW。从而实现了在主线程之外的线程中为屏幕绘图。在游戏开发中使用 SURFACEVIEW,游戏的背景、动画、文字等在画布上画在画布上。 太原理工大学毕业设计 (论文)用纸 14 3.3.2 双缓存 在图像处理编程的过程中,双缓冲区是一种基本的技术。我们知道,如果响应复杂 图形的 wm_paint 消息的形式,所以形式时,拉伸引起的频率刷新和闪烁现象。解决这 个问题的有效方法是双缓冲技术。因为在刷新,总想有一个 OnEraseBkgnd 擦除原图 像的过程,它使用背景色填充图的形式,然后调用新的图纸绘制代码,刷写的图像颜 色对比。当 wm_paint 响应非常频繁,对比更明显。所以我们看到了闪烁现象。 为了 解决这一问题,我们采用双缓冲绘图的技术。它可以支持图形块的复制,速度很快。 我们可以先在内存中映射,然后使用此功能将最佳图复制到前台,并禁止背景刷新, 从而消除闪烁。 太原理工大学毕业设计 (论文)用纸 15 4 概要设计 4.1 游戏设计 4.1.1 游戏背景 可怕的僵尸会入侵,植物的生长是唯一的防御方式。这种集成的实时策略,塔防 御游戏和卡收集元素,如游戏内容:玩家控制工厂,抵御僵尸攻击,保护这片草坪。 植物大战僵尸对玩家的要求和智慧的大脑和小脑的反应,与正确的战略思想,要 依靠战术的战略实施。战术范围很广,植物的搭配,战斗的形成,植物是当他们遇到 僵尸战争的这都属于战术范畴。玩家将正确的战术关键在战斗中取胜。选择正确的策 略,首先需要分析的情况,然后做出决定。提高战术水平,提高分析形势的能力。 4.1.2 游戏逻辑 (1)僵尸进攻人类的家园,人类通过种植不同特性的植物,来对僵尸进行反击 , 把僵尸消灭在草坪上。 (2)植物具有不同的属性,有的用来战斗,有的用来防御,有的用来产出阳光, 不同的植物需要的阳光值不同,生命值不同,战斗力也不相同 ,过关后会解锁新的 植物。 (3)僵尸的种类也不相同,直观的外形不同,它们的行进速度不同,血量不同, 过关后会解锁新的僵尸。 (4)作战单位在草坪上,玩家需要种植产生阳光的植物,收集一定数量的阳光 才能种植防御和进攻类的植物。 (5)当你消灭一定数量上的僵尸后,进入下一关,同时解锁新的植物和僵尸。 如果僵尸到达草坪后方,则认定游戏失败,游戏结束。 4.1.3 僵尸作战单位 (1)普通的僵尸。吃掉植物需要 4s,生命值 6,移动速度 1px/帧。 太原理工大学毕业设计 (论文)用纸 16 (2)戴帽子的僵尸。吃掉植物需要 4s,生命值 7,移动速度 1px/帧。 (3)戴铁桶的僵尸。吃掉植物需要 4s,生命值 8,移动速度 1px/帧。 (4)佩戴铁网的僵尸。吃掉植物需要 4s,生命值 9,移动速度 1px/帧。 4.1.4 植物作战单位 (1)向日葵。它的作用是产生阳光值,种植一个向日葵需要 50 阳光值,每 15s 生产一阳光,阳光值为 50,没有攻击力。 (2)普通豌豆射手。作用发射豌豆,并对僵尸造成伤害,每个消耗阳光值 100,每 2s 发射一颗豌豆,每颗子弹攻击力为 1。 (3)冰冻豌豆射手。发射豌豆,对僵尸减速并造成伤害,消耗阳光值 175,每 3s 发射一颗豌豆,攻击力为 1。 (4)加强型豌豆射手。先种植普通豌豆射手,它种植 在普通豌豆射手上,消 耗阳光值 200,每 2s 发射两颗连续的豌豆,每颗子弹攻击力为 1,不能单独种植。 (5)樱桃炸弹。对大范围的僵尸造成爆炸性的伤害,消耗阳光值 150,是杀伤 性很强的武器。 4.1.5 每关僵尸及植物的说明 第一关,可选择种植的植物有:向日葵,普通豌豆射手,加强型豌豆射手 。进 攻的僵尸有普通僵尸,带帽僵尸。 第二关,进攻的僵尸有普通僵尸, 佩戴铁丝网僵尸,戴帽子僵尸。可以选择种 植的植物有:普通豌豆射手,向日葵,加强型豌豆射手,樱桃炸弹。 4.1.6 关卡说明 游戏开始前,选择你所需要的植物,进入游戏。游戏 一共分为 5 条道路,每条 路上有 9 格可以种植植物,阻挡僵尸,僵尸在 道路外生成,然后随机的出现在每一 条道路上。每个关卡有固定的僵尸数量,消灭一定的数量则判定 闯关成功,一旦有 僵尸到达路的最左边,显示僵尸入侵了你的房子,代表游戏失败。 太原理工大学毕业设计 (论文)用纸 17 4.1.7 碰撞逻辑说明 僵尸产生后,僵尸从移动到右边的屏幕向左,如果在路线上种植入侵植物,所 以将开始拍摄。子弹和僵尸,大小的植物和僵尸的碰撞面积大小的图片区,碰撞, 或两者。子弹与僵尸碰撞之后僵尸的生命值减少,同时子弹立即消失, 植物与僵尸 碰撞之后植物的生命值减少, 直到植物的生命值减少为 0,植物消失,子弹超过屏 幕右边界后消失。 4.1.8 状态播放规则 所有僵尸素材为 7 帧,植物素材为 8 帧。每 100ms 播放一帧,播放结束之后自 动从第一帧重新播放,如此往复循环。 4.2 软件工程结构图 根据总体设计例图,软件架构,分析出程序功能主要包括:加载游戏、游戏选择、 游戏设置、游戏帮助。主要根据软件基本设计模块来设计这些功能。软件工程结构包 括: 绘画初始图层(初始化),用户触摸屏幕事件(放置植物),线程(刷新屏幕), 发送时间脉冲,每个角色运行各自的脚本,遍历所有角色碰撞,移除角色,如图 4-1 所示。 太原理工大学毕业设计 (论文)用纸 18 图 4-1 软件工程结构图 4.3 软件具体功能模块基本介绍 游戏的功能模块具体为:主要功能选择,模式的选择,查看帮助等功能模块。 植物大战僵尸游戏功能模块 的具体实现功能: 4.3.1 主要模块选择功能 这一模块就是游戏的主界面,玩家可以在 这里选择自己喜欢的游戏模式。可以 对游戏进行设置,是否开启背景音乐和效果音效。此 模块为游戏的入口,运行游戏 后,显示欢迎界面之后就进入到这一模块。 首先要激活游戏模块,然后根据玩家在 不同位置的触摸屏事件,调用相关的功能模块,退出游戏,当用户点击后退按钮。 游戏默认开启背景音效和效果音。功能选择模块流程,如图 4-2 所示。 太原理工大学毕业设计 (论文)用纸 19 图 4-2 功能选择模块流程图 4.3.2 关卡选择功能 游戏分为两个关卡,从游戏开始即为第一关,这一关有普通僵尸和带帽僵尸, 可以通过种植向日葵,豌豆射手和加强型豌豆射手来抵御僵尸。 每关的僵尸数量固 定,但出现的道路随机,消灭全部僵尸视为过关, 同时解锁新的僵尸和植物道具, 进入下一关的游戏。僵尸从屏幕右边随机生成,缓慢的向屏幕左边移动 。僵尸会受 到攻击型植物的攻击,然后消失。一旦僵尸到达屏幕的最左边,则判定游戏失败。 太原理工大学毕业设计 (论文)用纸 20 5 详细设计与实现 植物大战僵尸游戏是用面向对象的方法来进行设计的,在此过程中把程序中的 各种事物都看作是对象,简单的对象以某种方式组合成 相对复杂的对象。再把对象 划分为对象类,同时定义数据与方法。继承接口,建立子类与父类的结构关系。 准 备好,需要使用的图片需要修改的烟花的变化,用 java 代码游戏最后的部分。 5.1 游戏具体实现及相关的实体类 5.1.1 太阳花种植及产生阳光实现 SeedActor_0 类为种子栏中的太阳花卡片,继承自 SeedActor。用来定义其显示 的坐标,存在的成员变量,同时还定义了一个矩形的触摸区域。 对应的成员变量及 成员方法。 SeedActor_0():SeedActor_0 类的构造函数,将所有属性初始化。 MonsterView ():绘画函数,主要实现所有 角色在各种情况下的显示情况。 在实现太阳花种植的情况下,当前阳光值小于种植太阳花所需要的阳光值 时, 将画笔 Alpha 值设置为 100,实现种植。为了不影响其他对象使用画笔 ,需要在画 完太阳花后将画笔 Alpha 的值还原为 255。 种植植物流程如图 5-1 所示。 太原理工大学毕业设计 (论文)用纸 21 图 5-1 种植植物流程图 SunActor 类说明太阳花每隔 10s 生产出一个阳光。阳光产生之后只存在 5s,如 果在这 5s 之内点击了阳光,那么阳光会移动到阳光值记录处, 同时阳光值增加 50,如果 5s 之后任然没有点击,它会自动消失。 在此设计中,有可能出现阳光在移 动时没有到达终点就消失的情况,所以要将阳光分为两种状态,一种是显示状态, 另一种是移动状态,它存在的时间只在显示状态有效。该类中 需要定义枚举类型的 阳光状态。 public static SunActor createSunActor(Context context, int type) SunActor actor = null; switch (type) case SUN_0: actor = new SunActor_0(context, 40, 40); break; return actor; 太原理工大学毕业设计 (论文)用纸 22 状态图如图 5-2 所示。 图 5-2 阳光的状态图 5.1.2 豌豆射手种植及射击实现 BulletAction_0 子弹类,继承自 BullectAction,不需要实现已定义接口。 public static BulletActor createBulletActor(Context context, int type) BulletActor actor = null; switch (type) case BULLET_0: actor = new BulletActor_0(context, 15, 15); break; return actor; 图 5-3 加强型豌豆射手 太原理工大学毕业设计 (论文)用纸 23 5.1.3 生成僵尸的实现 僵尸类 ZombActor 继承 Actor,不需要实现接口。构造函数参数需要通过生成 位置坐标,也需要通过一个整型变量,它说的是跑道,即前面所提到的分析僵尸路 线,做碰撞检测时只需检测僵尸跑道的子弹或植物,没有其他东西的跑道,也分5 条跑道的好处。 public static ZombActor createZombActor(Context context, int type) ZombActor actor = null; switch (type) /僵尸在屏幕中的大小 case ZOMB_0: actor = new ZombActor_0(context, 40, 60); break; case ZOMB_1: actor = new ZombActor_1(context, 40, 70); break; case ZOMB_2: actor = new ZombActor_2(context, 40, 75); break; case ZOMB_3: actor = new ZombActor_3(context, 70, 95); break; case ZOMB_4: actor = new ZombActor_4(context, 55, 75); break; return actor; 太原理工大学毕业设计 (论文)用纸 24 5.1.4 游戏大管家 定义 MonsterStage 类的 draw()函数,在其中绘出背景层,种子层,植物,僵尸, 太阳,子弹。 游戏是通过不断绘制图片来进行的,为了防止因为先画与后画导致的非正常的 覆盖,影响游戏视觉效果。所以规定其为第一层,之后依次 往上叠加,最后画的元 素显示在屏幕的最上层。 在拖动种植种子植物时,图片要随着手指的移动而移动,这就要求种子的图片 要显示在所有的屏幕对象的最上方,也就是说它要能覆盖其他的任意元素同时不能 被任何元素覆盖,即在绘图函数中最后画,显示为第一层。 游戏背景和种子栏直接 在函数中画出,植物种子为第二层,阳光放置在第三层,最后将子弹,植物,僵尸 放在最底层第四层。 / 背景 相框 public static final int LAYER_0 = 0; / 种子层 public static final int LAYER_1 = 1; / 植物 public static final int LAYER_2 = 2; / 僵尸 public static final int LAYER_3 = 3; / 子弹 public static final int LAYER_4 = 4; / 阳光 / 种子库 public static final int LAYER_5 = 5; /战利品与过场动画 public static final int LAYER_6 = 6; /种子层左边距 public static final int BK_Bank_PADDING_LEFT=10; /种子层上边距 public static final int BK_Bank_PADDING_UP=2; 太原理工大学毕业设计 (论文)用纸 25 /获得小太阳的边框宽度 private int getBk_SunBank_Width; /获得小太阳的边框高度 private int getBk_SunBank_Height; /种子集合 private ArrayList seedActors=new ArrayList(); 图 5-4 植物栏 5.1.5 游戏失败 判断游戏失败的唯一标准就是,僵尸超过屏幕左边界。所以在僵尸每次向左移动之 后都要进行判断,如果僵尸的 locationX 小于 0,则判定游戏失败,游戏转到失败状态, 并且显示图片提示玩家游戏失败。 public class GameOverActivity extends Activity /* Called when the activity is first created. */ private ImageView image; private Handler handler; private boolean canCheck = false; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.game_over); image = (ImageView) findViewById(R.id.game_over_image); image.setImageResource(R.drawable.end); image.setOnTouchListener(new OnTouchListener() Override 太原理工大学毕业设计 (论文)用纸 26 public boolean onTouch(View arg0, MotionEvent event) / TODO Auto-generated method stub GameOverActivity.this.finish(); System.exit(0); return false; ); 5.1.6 游戏胜利 在僵尸没有到达屏幕左边界的情况下,玩家消灭一定数量的僵尸之后,判断游戏胜 利,并进入下一关,当玩家闯过所有关卡后,游戏转到胜利状态,并显示图片提示玩 家游戏已经取得胜利。 public class YouWinActivity extends Activity /* Called when the activity is first created. */ private ImageView image; private Handler handler; private boolean canCheck = false; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.you_win); image = (ImageView) findViewById(R.id.game_win_image); image.setImageResource(R.drawable.win); image.setOnTouchListener(new OnTouchListener() Override public boolean onTouch(View arg0, MotionEvent event) / TODO Auto-generated method stub 太原理工大学毕业设计 (论文)用纸 27 YouWinActivity.this.finish(); /System.exit(0); return false; ); 5.2 游戏引擎说明 5.2.1 格式修改 因为系统默认设置竖屏项目,在这样一句话。 的 XML 配置文件中添加 代码,在 ANDROID 的 SCREENORIENTATION =“景观”设置屏幕。基本不会等 待用户在游戏中,每次触发按钮,触摸屏事件去重绘布,但将固定时间刷新画布, 如僵尸单位向前迈进,动态显示的植物单位,子弹向前将不会与玩家互动,但这些 元素是动态的。所以游戏的发展,要建立一个单线程来重绘布,实时更新游戏元素 的状态。所以在实现运行()方法时,为了在循环的情况下使用循环的方法,在一 段时间内都会调用每隔一段时间,需要多长时间? 无疑这必须要根据人眼视觉暂留 的特性来确定。比如一个视频,如果帧数达到 24 帧,那么这个视频播放起来人眼是 感觉不到卡顿的。24 帧意思就是每秒播放 24 张图片。要让程序绘制近 24 次,每次 你的程序开始画下一个开始画的时候,停留在 50 毫秒之内,要画出 20 次二次,就 已经能够满足游戏的需求了。 5.2.2 MVC 动画的原理 僵尸画在屏幕上,它所在的位置为 X 轴 50-Y 轴 100,宽 40 高 60(最底层的调用); Canvas canvas = getHolder().lockCanvas(); Bitmap src = BitmapFactory .decodeResource(context.getResources(), R.draw.zomb_0); new Drawable draw=new BitmapDrawable(src); posX=50; 太原理工大学毕业设计 (论文)用纸 28 posy=100; width=40; height=60; draw.setBounds(posX, posY, posX + width, posY + height); draw.draw(canvas); getHolder().unlockCanvasAndPost(canvas); 5.2.3 封装定义角色 Public class Actor() Int x; Int y; Int width; Int height; Drawable currentDrawable; public void draw(Canvas canvas) if (currentDrawable != null) try currentDrawable.setBounds(posX, posY, posX + width, posY + height); currentDrawable.draw(canvas); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); 太原理工大学毕业设计 (论文)用纸 29 5.2.4 静态僵尸 新建 10 个僵尸,它们 X,Y 轴的位置是随机的 Public class Main extends Activtity static List list = new List(); Canvas canvas = getHolder().lockCanvas(); for(int i=0;i10;i+) Actor actor=new ZombActor(); actor.setposX(new Random().nextInt(300); actor.setposY(new Random().nextInt(300); actor.draw(canvas); list.add(actor); getHolder().unlockCanvasAndPost(canvas); 5.2.5 封装 让 stage 管理 Actor 的 list 集合 Public void stage () ArrayList actorList=new ArrayList(); /将所有 Actor 画在某个画布上 Void draw(Canvas canvas) for(Actor actor:actorlist) actor.draw(canvas); 太原理工大学毕业设计 (论文)用纸 30 由 view 管理 canvas 绘画 于是 stage.draw()相当于遍历所有 Actor 集合,并调用所有 Actor 的 draw()方法; view.draw();相当于把一次 stage.draw(),画在一次画布上; pubic class view draw();伪代码: Canvas canvas = getHolder().lockCanvas(); stage.draw(canvas); getHolder().unlockCanvasAndPost(canvas); 5.2.6 动态僵尸 Stage stage=new Stage(); SurfaceView view=(SurfaceView)findViewByid(R.id.view); view.setStage(stage); stage.setActorlist(new ArrayList(); /增加 10 个僵尸到 stage 的 actorList for(int i=0;i10;i+) Actor actor=new Actor(); actor.currentdraw=Bitmap.uitl(”僵尸”); actor.x=new Random().nextInt(300); actor.y=new Random().nextInt(300); actor.width=40; actor.height=60; stage.getArraylist().add(new Actor) 太原理工大学毕业设计 (论文)用纸 31 5.2.7 绘画线程 new Thread( public void run() While(true ) /遍历所有 stage 中 list 的 Actor 集合画在画布上 view.draw(); for(Actor actor:view.getStage().getActorList() actor.x= actor.x-1; /同时 X 坐标都减一 sleep(100); ).start(); 5.2.8 封装优化 Public class Actor Int x; Int y; Int width; Int height; Script script; Public class Script Actor actor; /构造方法 Public Script(Actor actor)this.actor=actor; /Script 有一个脚本方法 handletime handletime(Int i) 太原理工大学毕业设计 (论文)用纸 32 actor.x=actor.x-1; 增加 stage 一个 handletime(Int i);方法 Public class stage While(true) ArrayList actorList=new ArrayList(); /将所有 Actor 画在某个画布上 Void draw(Canvas canvas); handletime(Int i) for(Actor actor:actorList) actor.getscript.handleTime(i); ; 5.2.9 整合 Stage stage=new Stage(); SurfaceView view=(SurfaceView)findViewByid(R.id.view); view.setStage(stage); stage.setActorlist(new ArrayList(); /增加 10 个僵尸放到 stage 的 actorList for(int i=0;i10;i+) Actor actor=new Actor(); 太原理工大学毕业设计 (论文)用纸 33 actor.currentdraw=Bitmap.uitl(”僵尸”); actor.x=new Random().nextInt(300); actor.y=new Random().nextInt(300); actor.width=40; actor.height=60; actor.script=new Script(); stage.getArraylist().add(new Actor) 启动一个线程来绘画 new Thread( public void run() for(int i;true;i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论