基于Android植物大战僵尸


    摘
    手机游戏顾名思义指手机运行游戏软件目前编写手机程序 Java 语言着科技发展手机硬件更新速度越越快功越越强现手机游戏具强娱乐性交互性复杂形态
    安卓版游戏三优势第:技术优势方面稳定性现已公认稳定版操作系统——Gingerbread方面程序员技术入门快特定java语言基础说第二:Android手机操作系统市场优势:Android系统诞生短短3年时间占全球智机市场48份额跃居全球第流手机操作系统第三:开发周期短优势
    游戏采面象方法进行设计象设计程中程序中种事物成象复杂象较简单象某种方式组合成象划分象类定义数方法建立子类父类结构关系
    创建游戏实现方法需SurfaceView游戏框架开发复杂游戏求程序执行效率高时例速度求高双缓显示

    关键词:手机 安卓 Java语言 面象
























    Abstract
    Nowadays Java language is prevalent in writing cell phone programs With the booming of science and technology the hardware updated speed of cell phone is becoming faster and faster meanwhile the function of it is becoming stronger and stronger Today mobile game has extreme complex forms which mix entertainment with interaction
    The Android version has three advantages firstly for its technical advantage For one thing it is stable it is widely acknowledged that Gingerbread is the most stable operating system For another programmer can operate easily especially for those who have some basic knowledge of Java language Secondly for its market superiority It has accounted for 48 in the global smart phones market shares just in three years since its birth ranking No1 in the world it is still the leading mobile operating system Thirdly for its short development cycle it is the biggest strength
    Mobile game employs the way of objectorientation to design It regards everything in procedure as objects during the design process Complex objects can be assembled by some kind of way through simple objects The objects can be divided into object class defining data and methods and building the structural relationship between subclass and superclass
    The realization method of setting up games need use SurfaceView framework game which mostly develop complex games It can be showed by double buffering when the efficiency of the program requires high
    Keywords: Oell phone Android Java language Objectorientation







    目 录
    第1章 绪 1
    11 手机游戏行业概述 1
    12 开发工具介绍 1
    121 Eclipse 1
    122 ADT 1
    123 Android SDK 1
    124 Fireworks 2
    13 技术介绍 2
    131 SurfaceView 2
    132 双缓存 2
    第2章 需求分析 3
    21 项目概述 3
    22 项目概述 3
    221 常规模式 3
    222 夜晚模式 3
    223 模式 4
    224 游戏设置 4
    225 关卡选择 4
    226 查帮助 5
    第3章 概设计 6
    31 游戏设计 6
    311 游戏背景 6
    312 游戏逻辑 6
    313 僵尸作战单位 6
    314 植物作战单位 6
    315 关进攻僵尸种植植物说明 6
    316 关卡说明 7
    317 碰撞逻辑说明 7
    318 状态播放规 7
    32 软件架构 7
    33 软件功结构图 8
    34 软件具体功模块基介绍 8
    341 模块选择功 8
    342 游戏声音开关功 8
    343 模式选择功 9
    344 关卡选择功 9
    345 查帮助功 9
    第4章 界面设计 10
    41 结构设计 10
    42 交互设计 10
    43 视觉设计 10
    第5章 详细设计实现 12
    51 搭建游戏基骨架 12
    511 SurfaceView框架 12
    512 Welcome类 13
    513 Menu类 13
    514 Option类 13
    515 Help类 13
    516 Select类 13
    52 游戏model包 14
    521 TouchAble接口 14
    522 Plant接口 14
    523 BaseModel类 15
    524 Config类 15
    53 游戏具体实现相关实体类 15
    531 太阳花种植产生阳光实现 15
    532 豌豆射手种植射击实现 18
    533 生成僵尸实现 18
    534 游戏家 18
    535 根僵尸判断否射击 21
    536 关奖励 21
    537 游戏失败 21
    538 游戏胜利 22
    539 模式 22
    5310 僵尸碰植物停止吃掉植物继续前进 22
    54 调试 23
    541 吃掉植物僵尸前进 23
    542 僵尸生命值丢失异常 23
    543 concurrentModificationexcEption异常 23
    544 游戏正常结束重新进入游戏直接失败 23
    545 Bitmap size exceeds VM budget异常 24
    546 显示奖励 24
    总结 25
    致谢 26
    参考文献 27

    第1章 绪
    11 手机游戏行业概述
    手机游戏顾名思义指手机运行游戏软件目前编写手机程序 JAVA 语言着科技发展现手机硬件更新速度越越快功越越强现手机游戏初八九十年代风靡全球托掌游戏机俄罗斯方块贪吃蛇等画面简陋规简单游戏进发展掌游戏机媲美具强娱乐性交互性复杂形态作运行手持移动终端设备应程序手机硬件特征决定手机游戏特点:首先庞潜户群统计全球移动电话已超 10 亿部数字天断增加美国外发达国家手机户计算机户手机游戏潜市场台次便携性控制台游戏时代掌游戏机热销原便携性——时沉浸喜欢游戏中游戏控制台者PC 相手机然专业游戏设备 毕竟总时身携带样手机游戏成消遣时间首选更重支持网络手机网络设备定限制素实现线游戏
    什开发ANDROID版游戏源技术优势:方面稳定性现已公认稳定版ANDROID 23操作系统GINGERBREAD (姜饼)方面程序员技术入门快定JAVA语言基础说学掌握ANDROID开发技术非常快二源ANDROID手机操作系统市场优势:GOOGLE2008年9月正式发布ANDROID 10系统ANDROID系统短短3年时间占全球智机市场48份额亚太区市场占统治位终结SYMBIAN(塞班系统)霸位跃居全球第流手机操作系统更需特说明点:开发周期短优势熟悉手机游戏市场知道手机游戏形式更新换代周期短果旦错佳发布时间开发出产品成废品
    12 开发工具介绍
    开发款游戏工具四种:ECLIPSE开放源代码基JAVA扩展开发台ADTECLIPSE台开发ANDROID应程序插件ANDROID SDKANDROID专属软件开发工具包 FIREWORKSADOBE推出款图形编辑软件
    121 ECLIPSE
    ECLIPSE著名跨台集成开发环境(IDE)身框架台众插件支持ECLIPSE拥功相固定IDE软件难具灵活性许软件开发商ECLIPSE框架开发IDE众组织定力支持
    122 ADT
    Eclipse插件作关联Android SDKEclipse够新建Android工程
    123 ANDROID SDK
    ANDROID SDK全称ANDROID SOFTWARE DEVELOPMENT KIT提供WINDOWSLINUXMAC台开发ANDROID应开发组件包含ANDROID台开发移动应程序种工具集5部分组成:
    ANDRIOD模拟器(AVD MANAGEREXE):运行计算机虚拟移动模拟器模拟器实际ANDROID运行环境设计调试测试应程序
    调试监视服务(DDMSBAT):集成DALVIK(ANDROID台虚拟机)中理运行模拟器设备进程协助进行调试进程选择特定程序调试生成踪数查堆线程数模拟器设备进行屏幕快等
    ANDROID调试(ADBEXE):模拟器手机设备安装应程序APK文件命令行访问模拟器手机设备标准调试器连接运行ANDROID模拟器手设备应代码
    SQLITE3数库(SQLIT3(SQLITE3EXE)):ANDROID应程序创建SQLITE数文件开发者者方便访问数文件 
    创建SD卡工具(MKSDCARD(MKSDCARDEXE)) 
    124 FIREWORKS
    FireworksMacromedia公司发布款专网络图形设计图形编辑软件简化网络图形设计工作难度专业设计家业余爱者Fireworks仅轻松制作出十分动感GIF动画轻易完成图切割动态钮动态翻转图等
    13 技术介绍
    该设计SurfaceView游戏框架采双缓存技术避免屏幕出现闪烁
    131 SURFACEVIEW
    SurfaceView直接存者DMA等硬件接口取图数非常重绘图容器
    特性:线程外线程中屏幕绘图样避免画图务繁重时候造成线程阻塞提高程序反应速度游戏开发中SurfaceView游戏中背景物动画等等量画布Canvas中画出
    132 双缓存
    窗体刷新时总擦原图象程利背景色填充窗体绘图区然调新绘图代码进行重绘样擦写造成图象颜色反差造成闪烁闪烁图形编程常见问题需重复杂绘制操作图形操作会导致呈现图闪烁具接受外观数量时绘图需秒钟甚更长时间闪烁现象会更加严重解决问题采双缓技术绘图


    第2章 需求分析
    21 项目概述
    项目分五部分:常规夜晚三模式进行游戏游戏设置查帮助例图图21

    图 21 系统例图
    22 项目概述
    221 常规模式
    部分实现玩家游戏背景白天情况玩游戏该部分具体情况表21
    表 21 常规模式
    例名称
    常规模式
    功简述
    常规模式进行游戏
    前置条件
    玩家进入游戏
    置条件
    进入常规模式开始游戏
    基流
    1 点击菜单页面常规模式钮进入常规模式开始游戏
    2 点击返回钮例终止
    222 夜晚模式
    部分实现玩家游戏背景夜晚情况玩游戏该部分具体情况表22
    表 22 夜晚模式
    例名称
    夜晚模式
    功简述
    夜晚模式进行游戏
    前置条件
    玩家进入游戏
    置条件
    进入夜晚模式开始游戏
    基流
    1 点击菜单页面夜晚模式钮进入夜晚模式开始游戏
    2 点击菜单钮游戏暂停进入菜单
    3 点击夜晚模式回游戏
    4 点击返回钮例终止
    223 模式
    部分实现游戏玩家常规者夜晚模式通关情况玩游戏该部分具体情况表23
    表 23 模式
    例名称
    模式
    功简述
    模式进行游戏
    前置条件
    玩家常规者夜晚模式通关
    置条件
    进入常规模式开始游戏
    基流
    1 点击菜单页面模式钮进入模式开始游戏
    2 点击菜单钮游戏暂停进入菜单
    3 点击模式回游戏
    4 点击返回钮例终止
    224 游戏设置
    部分实现游戏背景音乐效果音开启关闭该部分具体情况表24
    表 24 模式
    例名称
    游戏设置
    功简述
    开关闭游戏背景音乐者效果音
    前置条件
    想游戏进行设置
    置条件
    游戏属性改变
    基流
    1 点击菜单页面选项钮进入游戏设置界面
    2 游戏设置界面中根需进行设置
    3 设置动返回菜单者设置点击返回钮例终止
    225 关卡选择
    部分实现玩家根喜选择游戏关卡玩游戏选择没通关卡
    226 查帮助
    部分实现游戏玩家查帮助








































    第3章 概设计
    31 游戏设计
    311 游戏背景
    类僵尸间仇恨已久争夺生存空间僵尸机会类发起攻击类会束手擒培养出僵尸造成伤害植物僵尸进攻时植物类捍卫家园武器
    312 游戏逻辑
    (1)僵尸进攻方类通种植培育出种进攻防御型植物抵抗僵尸进攻想植物成长攻击防御僵尸需相应阳光值
    (2)关卡中供选择植物僵尸进攻单位例第关普通僵尸进攻第二关会出现两种僵尸
    (3)交战区玩家种植进攻防御单位需植物需种植产生阳光生产单位
    (4)关相应敌数量全部消灭关果敌穿交战区域达类方判定游戏失败
    313 僵尸作战单位
    (1)普通僵尸移动速度1px帧生命值3吃掉植物需3s
    (2)戴帽子僵尸移动速度1px帧生命值4吃掉植物需3s
    (3)戴铁桶僵尸移动速度1px帧生命值5吃掉植物需3s
    (4)运动员僵尸移动速度2px帧生命值3吃掉植物需3s
    (5)佩戴铁网僵尸移动速度1px帧生命值6吃掉植物需3s
    314 植物作战单位
    (1)日葵消耗阳光值50够生产阳光10s生产阳光值50没攻击力
    (2)普通豌豆射手消耗阳光值1005s发射颗子弹攻击力1
    (3)冰冻豌豆射手消耗阳光值1755s发射颗子弹攻击力1
    (4)加强型豌豆射手消耗阳光值2005s发射两颗连续子弹颗子弹攻击力1
    (5)土豆卫士消耗阳光值50抵挡僵尸3s攻击植物争取时间
    315 关进攻僵尸种植植物说明
    第关进攻僵尸普通僵尸选择种植日葵普通豌豆射手
    第二关进攻僵尸普通僵尸戴帽子僵尸选择种植日葵普通豌豆射手冰冻豌豆射手
    第三关进攻僵尸普通僵尸戴帽子僵尸戴铁桶僵尸选择种植日葵普通豌豆射手冰冻豌豆射手加强型豌豆射手
    第四关进攻僵尸普通僵尸戴帽子僵尸戴铁桶僵尸运动员僵尸选择种植日葵普通豌豆射手冰冻豌豆射手加强型豌豆射手土豆卫士
    第五关进攻僵尸普通僵尸戴帽子僵尸戴铁桶僵尸运动员僵尸佩戴铁网僵尸选择种植日葵普通豌豆射手冰冻豌豆射手加强型豌豆射手土豆卫士
    316 关卡说明
    总五条防御路线条防御路线放九单位僵尸屏幕外生成机出现五条路线中条缓缓类方前进关相应僵尸数量全部消灭关果敌穿交战区域达类方判定游戏失败
    317 碰撞逻辑说明
    僵尸屏幕右方左移动僵尸生成果该条路线种植攻击性植物开始发射子弹子弹植物僵尸碰撞区域图片区域两者发生接触发生碰撞子弹僵尸碰撞消失僵尸生命值相应减少子弹超屏幕右边界消失
    318 状态播放规
    植物素材均8帧僵尸素材7帧100ms播放帧播放完毕动第针开始重新播放循环
    32 软件架构
    根前面需求分户基求软件总体结构设计包括软件加载界面功选择模式选择开始游戏游戏设置等软件总体架构图31
    图 31 软件总体架构图
    软件加载:户开游戏进行游戏加载欢迎户该软件
    界面:展现游戏整体功界面
    模式选择:玩家根身喜决定选择种模式进行游戏
    开始游戏:实现植物战僵尸功
    游戏设置:实现游戏种属性进行设置功
    33 软件功结构图
    根总体设计例图分析出程序功包括:游戏加载游戏模式选择关卡选择游戏设置游戏帮助根软件基设计模块设计功软件总体功结构图32

    图 32 软件功结构图
    34 软件具体功模块基介绍
    根游戏具体功模块:功选择游戏音效开关模式选择关卡选择查帮助帮助等功模块
    植物战僵尸游戏功模块功:
    341 模块选择功
    该模块实相植物战僵尸游戏菜单该模式玩家游戏属性进行设置根喜选择开始游戏查游戏帮助等该游戏提供玩家功游戏状态MENU时激活该模块根玩家位置触屏事件调相关功模块玩家点击设备返回钮时退出游戏功选择模块流程图33
    342 游戏声音开关功
    游戏默认关闭背景音效效果音玩家根爱选择否开启背景音乐者游戏效果音菜单中点击选项钮玩家进入声音设置功默认关闭背景音时会显示开启音乐果音乐开启次进入声音设置功显示关闭音乐游戏效果音显示背景音效相

    图 33 功选择模块流程图
    343 模式选择功
    该游戏分三种模式常规夜晚模式开游戏没通关(总五关卡)选择模式游戏时玩家常规模式夜晚模式中进行选择通关卡封锁常规夜晚模式玩家选择模式种模式选择动开始游戏
    344 关卡选择功
    游戏分5关卡关数量僵尸次递增玩家通种植植物道具消灭僵尸关僵尸均消灭游戏动进入关玩家奖励显示屏幕中种子栏中显示玩家选择进行种植然前提阳光值等该植物需消耗值阳光通种植日葵种越获阳光值速度越快避免作弊关卡选择玩家通关卡效
    345 查帮助功
    款软件具帮助功该游戏例外查完帮助点击屏幕者设备返回键会动转菜单界面


    第4章 界面设计
    软件户界面指软件户交流外观部件程序等等该游戏界面达吸引眼球目结合图形版面设计相关原理界面进行美化规范化设计
    41 结构设计
    根软件架构分析知道游戏应该界面:欢迎界面(游戏加载)游戏菜单关卡选择界面游戏设置界面查帮助界面胜利界面失败界面游戏界面
    开软件显示欢迎界面点击开始游戏界面转菜单界面户根需选择种功转相应界面界面间跳转关系图41

    图 41 界面跳转关系图
    42 交互设计
    该游戏Android中文版界面语言选择中文页面添加onTouch()函数onKeyDown()函数响应户触屏点击键事件功退出页面欢迎菜单界面点击退出钮退出游戏设置程序方便退出菜单实现程序功选择功实相实现程序导航功菜单界面设计图42
    游戏界面种子收集栏点击该区域相应种子拖动种植区域植物种植种植区分五横着跑行僵尸进攻游戏界面设计图43
    43 视觉设计
    游戏采绿色色调部分植物颜色色彩容符合角色造型卡通设计表现形式显滑稽爱

    图 42 菜单界面设计图

    图 43 游戏界面设计图










    第5章 详细设计实现
    植物战僵尸游戏采面象方法进行设计象设计程中程序中种事物成象复杂象较简单象某种方式组合成象划分象类定义数方法建立子类父类结构关系需图片准备需修改Fireworks修改Java代码该游戏部分描述出
    51 搭建游戏基骨架
    511 SURFACEVIEW框架
    Android系统中创建植物战僵尸游戏实现方法需SurfaceView游戏框架开发复杂游戏求程序执行效率高时例速度求高游戏双缓显示游戏中背景物绘制画布Surfaceview直接访问画布
    系统默认建立竖屏项目首先AndroidManifestxml配置文件里添加代码androidscreenOrientationlandscape屏幕设置横屏显示定义类MainSurfaceView类继承SurfaceView外实现androidviewSurfaceHolderCallbackRunnable接口
    中定义SurfaceHolder类实例该类提供SurfaceView格式等监听SurfaceView状态通SurfaceHolder控制SurfaceViewlockCanvas()函数获取SurfaceViewCanvas象通Canvas绘制容修改SurfaceView中数防止SurfaceView绘制程中修改摧毁等发生状态改变lockCanvas()函数Canvas画布进行加锁绘制完成unlockCanvasAndPostt()函数解锁画布提交绘画函数总两函数间进行调
    根界面设计该类中定义表示游戏种状态整型常量:GAME_MUNUGAME_WELCOMEGAME_INGDAYGAEM_WINGAME_LOSTGAME_SELECT等初始化定义画图函数myDraw()里面switch()语句实现游戏状态游戏绘图onTouchEvent()函数样处理
    游戏中基会等户次触发键事件触屏事件重绘画布会固定时间刷新画布僵尸单位前进时前迈步植物单位动态显示子弹前进等会玩家交互元素动态游戏开发中设置线程停重绘画布实时更新游戏元素状态实现run()方法时while循环循环标志真情况隔段时间调绘画函数段时间底长呢?疑必须根眼视觉暂留特性确定视频果帧数达24帧视频播放起眼感觉卡顿24帧意思秒播放24张图片程序达秒绘制24次程序次开始绘制次开始绘制时间保持50ms秒绘制20次已够满足该游戏需求
    接修改MainActivity类onCreate(Bundle savedInstanceState)函数setContentView(new MainSurfaceView(this))显示定义SurfaceView视图requestWindowFeature(WindowFEATURE_NO_TITLE)隐标题栏getWindow()setFlags()函数隐状态栏定义init()函数Config类中定义种位图初始化
    512 WELCOME类
    定义欢迎界面类定义开始游戏钮横坐标等draw()函数绘制欢迎界面背景图片钮onTouchEvent()函数功玩家图片钮区域触发ACTION_DOWN事件控制显示表示钮图片
    玩家钮区域触发ACTION_UP事件钮图片显示未状态MainSurfaceViewgameState MainSurfaceViewGAME_MENU代码游戏转菜单界面
    513 MENU类
    游戏菜单中boolean类型定义钮否状态全部初始化false常规模式夜晚模式模式退出等钮菜单界面设计中布局绘制
    ACTION_DOWN者ACTION_MOVE事件中检测钮状态(否)果draw()函数中绘制状态相应图片钮ACTION_UP事件中释放钮状态修正转相应游戏状态点击帮助调MainSurfaceViewgameState MainSurfaceViewGAME_HELP改变游戏状态果点击退出调Systemexit(0)直接退出游戏
    514 OPTION类
    实现游戏声音设置功绘制完背景绘制未状态声音开关钮玩家钮区域点击次该钮onTouchEvent()函数变量ConfigisPlayMusic取反果该值真播放背景音乐果假停止播放背景音乐调MainSurfaceViewbackgroundMusicprepare()函数次开启背景音乐做准备完成动作游戏转菜单
    515 HELP类
    Help类玩家提供帮助信息帮助容写张图片玩家需帮助时开该功该类帮助图片绘制屏幕玩家查帮助完点击屏幕触发ACTION_UP事件游戏转菜单界面
    516 SELECT类
    该类玩家提供选择关卡功玩家点击屏幕相应关卡位置触发ACTION_UP事件程序判断现已通高关卡ConfigtempLevel否者等户选择关卡果成立游戏设置玩家选择关卡否弹出消息提示户
    该关卡没解锁
    接着MainSurfaceView类中游戏状态gameState初始化GAME_WELCOME定义述类象初始化myDraw()onTouchEvent()函数相应游戏状态分调象draw()onTouchEvent()函数
    游戏基骨架搭建完成类图图51

    图51 游戏框架相关类图
    52 游戏MODEL包
    521 TOUCHABLE接口
    Android手机见键非常少开机键音量键功键菜单键返回键玩家玩游戏时手指触屏进行操作操作象会响应触摸事件满足程序求定义TouchAble接口方便求类实现
    522 PLANT接口
    植物单位需拖动种植种植需坐标然坐标便选取前分析中强调植物僵尸交战区域分五条路线条路线九格子种植植物单位植物种植规定格子中四十五格子必须固定格子种植种植物重复种植物格子里种植两格子编号记录否种植植物记录植物种植位置定义该接口实现getMapIndex()方法
    523 BASEMODEL类
    游戏中植物单位僵尸单位种子栏中种子图片属性者方法坐标图片应该出现位置象想设备屏幕中显示出调绘画方法画出根面象继承性(性质疑程序带许突出优点)减少冗余信息应抽取相似类公属性公服务程序中部分类建立父类BaseModel
    524 CONFIG类
    然说量避免全局变量现设备性越越高前老机器日语认问题现关注问题Config类存放游戏中需种全局变量屏幕宽度高度产生阳关僵尸子弹时间等什做原开发程中需跑测试快速完成程修改述变量果没设置全局变量浪费量时间做重复修改操作
    该类定义游戏中种象图片素材普通类中图片工厂中获图片普通类需图片构造函数中传递进果述普通类方定义图片素材加载图片程序显相混乱理
    该类定义适合种植植物点集合交战区域定义五条路线准备竖坐标进行记录
    53 游戏具体实现相关实体类
    531 太阳花种植产生阳光实现
    SeedFlower类种子栏中太阳花卡片继承BaseModel实现TouchAble接口定义显示坐标否存成员变量外定义矩形触摸区域成员变量成员方法图52
    图52 SeedFlower类成员变量成员方法示意图
    SeedFlower():SeedFlower类构造函数中属性初始化需特说明isAlive默认true
    drawSelf():绘画函数实现太阳花种子图片种情况显示情况具体实现描述
    够显示该种子卡片情况果前阳光值ConfigsunshineValue种植太阳花需阳光值ConfigflowerCost画笔Alpha值设置100画太阳花影响象画笔需画完太阳花画笔Alpha值原255
    onTouch():触屏处理函数该函数中首先记录捕捉触摸点坐标检测touchAreacontains(pointXpointY) && ConfigsunshineValue>ConfigflowerCost果成立该坐标显示种植植物功需定义Game类里apply4EmplacePlant(int locationXint locationY)函数实现该函数会检测种植种植物新建种植植物象
    EmplaceFlower类种植太阳花类样继承BaseModel实现TouchAble接口
    touchArea:手指触屏移动区域根构造函数接收参数初始化种植太阳花区域
    onTouch():触屏函数触发ACTON_MOVE事件时该类横坐标进行修正触摸点图片中心touchArea着触摸点移动移动响应ACTION_UP事件时isAlive变量赋值false移该象调Game类中apply4Plant(int locationXint locationYBaseModel baseModel)函数种植植物该函数会检测种植种植物里种植太阳花会新建Flower类象
    Flower类屏幕种植太阳花继承BaseModel实现Plant接口具父类继承变量具新整型成员变量:frameIndexmapIndex长整型变量lastShineTime分表示太阳花位图数组标格子编号次产生阳光时刻图53

    图53 Flower类成员变量成员方法示意图
    drawSelf():绘图函数绘制前帧图片前帧加8取余现时刻减次产生阳光时刻时间差系统产生阳光时间ConfigproSunshineTime次产生阳光时刻赋值现时刻调Game类中produceSunshine(int locationXint locationY)函数产生光该函数中新建Sunshine类象种植植物流程图54
    图54 种植植物流程图
    Sunshine类太阳花隔10s生产出阳光阳光产生生存5s果5s点击阳光阳光会移动阳光值记录处阳光值增加50果超5s没点击会动消失防止阳光移动时没达终点消失存时间显示状态效实种情况存玩家点击某生存499s阳光理想效果会改点移动终点然消失生存时间5s仅剩001s里没移动终点消失种情况允许述设计出阳光两种状态种显示状态种移动状态该类中定义枚举类型阳光状态sunshineState取值SHOWMOVESHOW表示生命时间效MOVE表示生命时间效
    drawSelf():果该阳光存活状态处SHOW状态时判断存活时间否超5s果超isAlive赋值false果没进行操作处MOVE状态时横坐标分xSpeedySpeed速度递减坐标屏幕边界时阳光值加50isAlive赋值false
    需说明户点击阳光时状态设置MOVE计算运动起点终点横距离分xDistanceyDistance表示5帧完成移动xSpeedySpeed分设置xDistance5fyDistance5f
    状态图图55示

    图55 阳光状态图
    532 豌豆射手种植射击实现
    太阳花样定义相关实体类SeedPeaEmplacePeaPeaBullet中前三类太阳花相似里做描述
    Bullet子弹类继承BaseModel需实现已定义接口xSpeed表示子弹横移动速度初始化5drawSelf()函数中先画出子弹横坐标加xSpeed样帧连接起会子弹匀速右移动超屏幕右边界时isAlive置false子弹需僵尸发生碰撞定义getModelWidth()方法获取子弹图片宽度碰撞进行控制
    533 生成僵尸实现
    僵尸类Zombie继承BaseModel需实现接口构造方法参数需传递生成位置坐标需传递整型变量raceWay表示跑道前面分析提僵尸行进路线僵尸做碰撞检测时需检测跑道子弹者植物跑道事情划分5条跑道处僵尸边播放动画帧边屏幕左方运动drawSelf()函数中仅绘制帧动画帧标加横坐标减僵尸前进速度xSpeed然次动画帧加7取余僵尸动画7帧碰撞进行处理需定义getModelWidth()获取僵尸图片宽度
    生成僵尸进行理需定义ZombieManager类控制僵尸产生控制段时间产生僵尸定义长整型变量lastBirthTime0drawSelf()函数中判断果次产生僵尸时刻现15sGame类申请apply4AddZombie()屏幕中产生僵尸
    534 游戏家
    定义Game类draw()函数中先绘出背景图片种子栏游戏屏幕添加菜单点击钮作游戏暂停功游戏屏幕添加菜单点击钮作游戏暂停功然MainSurfaceView类中定义Game象初始化myDraw()onTouchEvent()中相应状态调Game类象draw()onTouchEvent()函数运行游戏进行中界面
    游戏通断绘制图片进行先画画必须分非常清楚然导致非正常覆盖影响游戏视觉效果画元素屏幕层规定第层次类推
    种植植物拖动种子时种子图片着手指移动移动时候种子图片应该显示屏幕象边够覆盖元素元素覆盖应该第层绘图函数中应该画植物种子规定第二层阳光规定第三层植物僵尸子弹第四层然游戏背景种子栏没单独设计类直接函数中画出定义容器gameLayout1gameLayout2gameLayout3分表示第层第二层第三层容纳单位gameLayout4plant0gameLayout4zombie0分表示第四层第条跑道容纳植物单位僵尸单位剩跑次类推定义createElement()方法阳光值ConfigsunshineValue赋初值200种容器初始化该方法中新建SeedFlowerSeedPea类象seedFlowerseedPea初始化种子栏中相应位置gameLayout2add()添加第二层
    实现apply4EmplacePlant()方法首先MainSurfacesfh加锁防止意外访问程序断循环点击植物种子会创建干种植植物检测gameLayout1size()否0果零判断种植种植物调gameLayout1add(new EmplaceXXX(locationX locationY))创建添加第层draw()方法中遍历gameLayout1调中元素drawSelf()方法创建该象搁置户触发ACTION_UP事件时做两件工作第:isAlive属性赋值false清理掉该象需新定义removeEmplacePlant()方法遍历gameLayout1果中需元素添加deadList容器中遍历deadList销毁时gameLayout1size()值零次种植做准备第二:调apply4Plant()种植选取植物
    实现apply4Plant()方法实现该方法需做准备工作根概设计交战区划分45格子植物必须种植格子中间出现方面代码计算交战区45格子坐标保存
    private void createElement() {
    ……
    for (int i 0 i < 5 i++) {
    for (int j 0 j < 9 j++) {
    ConfigplantPointsput(i * 10 + j new Point((j + 2)* ConfigscreenW 11
    ConfigscreenW 11 2(i + 1) * ConfigscreenH 6 10))
    if (j 0) {
    ConfigraceWayYpoints[i] (i + 1) * ConfigscreenH 6 10
    }
    }
    }
    }
    外层循环控制跑道行数层循环控制跑道列数认游戏背景左侧非交战区占15倍格子宽度右侧非交战区约占05格子宽度册非交战区高度占单元格高度格子宽度高度约分占整游戏背景宽度十分高度六分面代码i*10+j表示第格子j+2表示忽略前两列减05格子宽度i行格子横坐标i+1表示忽略单元格高度ConfigscreenH 6 – 10中减10坐标进行修正if语句记录跑道坐标
    添加植物方法中先遍历plantPoints集合找离EplaceXXX类象种植点计算该点跑道确定跑道种植植物添加相应跑道植物容器中该功代码:
    public void apply4Plant(int locationX int locationY BaseModel baseModel) {
    ……
    for (Integer key ConfigplantPointskeySet()) {
    point ConfigplantPointsget(key)
    if ((Mathabs(locationX pointx) < ConfigscreenW 11 2)
    && (Mathabs(locationY pointy) < ConfigscreenH 6 2)) {
    int raceWayIndex 6
    for (int i 0 i < ConfigraceWayYpointslength i++) {
    if (pointy ConfigraceWayYpoints[i]) {
    raceWayIndex i
    }
    }
    ……
    }
    }
    }
    种植植物图片左角坐标横坐标plantPoints集合中点横坐标相减果绝值半格子宽度两点坐标差绝值半格子高度时遍历点植物合适种植点接遍历raceWayYpoints数组寻找该合适点第跑道
    添加植物时判断该合适种植点否已存植物果植物时放弃种植isExistPlant(int keyint raceWayIndex)方法实现该功根跑道数该跑道植物集合进行遍历果Plant接口子类果集合中某植物key合适种植点key值样点已存植物现里种植果遍历完象没找返回true表示种植
    屏幕出现僵尸Game类中处理添加植物简单Game类中新建ZombieManager象zombieManager初始化draw()方法中调该象drawSelf()方法需实现apply4AddZombie()方法取机数Mathrandom()(int) (Mathrandom() * 10) 5处理赋值新定义局部变量raceWay根raceWay新建僵尸添加进相应跑道中僵尸容器实现生成僵尸方法
    面实现代码:
    public boolean isExistPlant(int key int raceWayIndex) {
    switch (raceWayIndex) {
    case 0
    for (BaseModel model gameLayout4plant0) {
    if (model instanceof Plant) {
    if (key ((Plant) model)getMapIndex())
    return false
    }
    }
    break
    ……
    }
    return true
    }
    535 根僵尸判断否射击
    现实现跑道僵尸时豌豆射手发射炮弹该跑道僵尸死亡者没产生僵尸时豌豆射手停止射击处休息状态发射炮弹首先Pea类中定义布尔变量isShoot初始化false定义getset函数该类中isShoottrue时调shootBullet()函数家Game类apply4AddZombie()中产生僵时遍历该产生僵尸跑道否豌豆射手存果豌豆射手isShoot设置true果没做处理运行程序发现果先种植豌豆射手产生僵尸切正常没问题果该跑道没种植豌豆射手前已产生僵尸种植豌豆射手豌豆射手会攻击非时该跑道产生僵尸分析发现应该产生僵尸时判断否豌豆射手应该豌豆射手发射炮弹时判断该跑道否僵尸果发射否发射样Pea类中需定义isShoot变量直接shootBullet()中判断否发射
    536 关奖励
    玩家关进行奖励分新建SeedSnowpeaEmplaceSnowpeaSnowpea类前pea类似点区SeedSnowpea类构造函数初始化isAlivefalseGame类定义SeedSnowpea象seedSnowpea玩家关Configlevel增加2时调seedSnowpeasetAlive()isAlive设置true加强型豌豆射手土豆卫士做相似处理
    537 游戏失败
    未谋胜先谋败里先做失败功前面已说僵尸超屏幕左边界时判定游戏失败次僵尸左移动判断僵尸locationX否0(屏幕左侧横坐标0)果0游戏失败游戏转失败状态显示提示玩家游戏失败考虑游戏失败玩家继续游戏单独定义失败类中实现draw
    ()函数画出ConfigbmpLost显示僵尸吃掉脑子玩家点击屏幕时响应MotionEventACTION_DOWN事件里简单设计updown处想达预期效果需实现onTouch()函数
    538 游戏胜利
    接着做胜利界面建立Win类Lost类基样draw()函数中画出胜利图片点击事件触发时游戏状态设置GAME_WINMainSurfaceView建立Win象win然myDraw()onTouchEvent()分调win象draw()onTouchEvent()函数里重问题出现游戏判定玩家胜利根该游戏规玩家没输掉游戏前消灭掉定数量僵尸判定玩家胜利先试着Configjava文件中定义level0ZombieCount整型变量表示通关消灭基础僵尸数量测试简单暂时先赋值3胜利消灭僵尸数量Game类中定义deadZombieCount整型变量表示已消灭僵尸数量果该值等level0ZombieCount判定游戏胜利Game类中checkCollision()中僵尸生命值者等0时判断++deadZombieCount否等Config level0ZombieCount果成立游戏状态设置GAME_WIN然里问题游戏隔15s产生僵尸现死亡deadZombieCount僵尸游戏结束会出现屏幕僵尸没消灭游戏会结束样处理:关卡产生定僵尸数量基础数量level0ZombieCount前关卡level积确定zombieCount记录前数量产生僵尸没达规定数量时继续产生否停止生成僵尸僵尸死亡时判断死亡僵尸数量否达通该关卡需数量(deadZombieCount(Configlevel0ZombieCount*Configlevel)0判断)成立Countlevel++deadZombieCountzombieCount赋值0进行关(屏幕方显示前关卡)游戏总分5关卡通关卡(level>6时游戏状态设置胜利)游戏会胜利
    539 模式
    游戏常规模式者夜晚模式中退出时回菜单游戏初始化两种模式通关玩家开放模式时常规模式夜晚模式玩家开放模式通Configlevel>6判断成立点击模式进入游戏模式中没关卡概念玩家分分数根消灭僵尸增加定义全局变量score0Game类draw()函数中游戏状态模式时显示分游戏胜利条件改:常规模式者夜晚模式时Configlevel>6
    5310 僵尸碰植物停止吃掉植物继续前进
    实现僵尸碰植物停止前进吃掉植物继续前进功Zombie类中定义布尔变量isMove表示僵尸否移动初始化true长整型变量eatTime记录僵尸碰撞植物瞬间系统时间戳设置两成员变量get()set()属性僵尸横移动代码添加条件语句:isMove真时僵尸左移动Game类中碰撞函数检测僵尸植物相遇时果僵尸处移动状态停止前进刻系统时间戳zombiesetEatTime(SystemcurrentTimeMillis())记录僵尸处静止状态该僵尸停留时间超3s时植物isAlive赋值假僵尸移动状态改真
    54 调试
    541 吃掉植物僵尸前进
    运行游戏发现僵尸遇植物停3s植物消失时僵尸样停止动代码中添加logi()检测代码根预想路线走方执行遍段代码预计碰撞执行遍实际情况碰撞次执行碰撞函数碰撞条件身错隐藏条件问题僵尸停止超3s植物isAlive赋值假植物屏幕消失紧接着僵尸移动状态赋值真(里logi()检测isMove已赋值真)僵尸没移动说明isMove赋值假说已屏幕消失植物僵尸发生碰撞该植物根没消失原处隐身状态想里真相白屏幕移时应该紧接着该植物remove掉(里调update()函数样调会造成程序异常)碰撞超3s植物消失僵尸继续前进该问题解决
    542 僵尸生命值丢失异常
    僵尸生命值设置4次炮弹击中次生命减少1生命减少0时僵尸死亡isAlive设置false碰撞检测函数中碰撞次时通zombielifeValue运行效果僵尸碰发炮弹直接消失根没出现4发炮弹命中消失效果分析肯定判断碰撞僵尸生命值进行者等4次减操作什执行次减操作开始没想明白计施僵尸生命值设400否会出现种情况果然僵尸炮弹击中3次吃豌豆射手没消灭生命值设置100时僵尸击中3次死亡僵尸击中4次没死亡想明白问题僵尸吃掉植物前进相似甚bug样方法处理该bug消失
    543 CONCURRENTMODIFICATIONEXCEPTION异常
    添加植物鼠标左键UP时出现异常concurrentModificationException初步分析UP时程序正执行update()函数List进行遍历时候中元素删掉碰撞函数中remove必碰撞象需List进行遍历(update()List遍历remove掉需象)层removeupdate()独立出新removeEmplacePlant()removePlant_Bullet()removeZombie()方法需remove象方分调述方法
    544 游戏正常结束重新进入游戏直接失败
    游戏失败正常结束结束状态点击屏幕够出现预期效果转换菜单次点击常规模式重新开始游戏游戏直接进入失败状态里僵尸超屏幕左边界没remove掉导致种情况判断游戏结束该僵尸remove掉说里说重问题重新开始游戏画面必然次游戏添加植物等说处次游戏状态里初始化游戏游戏操作Game类中进行需重新newGame象行考虑MainSurfaceView中已initGame
    ()函数中游戏进行初始化里调该函数游戏状态gameState赋值GAME_LSOTpublic void initGame()修改public static voidinitGame()
    545 BITMAP SIZE EXCEEDS VM BUDGET异常
    添加夜晚模式背景图片Game类中设置果游戏模式夜晚模式加载夜晚背景运行游戏发现异常:bitmap size exceeds VM budget网搜索说android系统限制图片分配8兆存超崩设置VM时候Hardware选项中项Max VM application heap size该项值增100运行行查夜晚模式背景图片达11M压缩100k运行程序首次运行程序正常点击模拟器屏幕返回钮次运行程序继续报相异常估计存够发现退出系统执行Systemexit(0)第二次游戏会出现异常界面需增加onKeyDown()函数户点击返回键进行处理户触发KEYCODE_BACK事件果游戏处状态INGDAYINGNIGHTENDLESSWINLOSTHELPOPTION SELECT时游戏初始化游戏状态转GAME_MENU果GAME_MENUGAME_WELCOME时调Systemexit(0)退出程序释放资源onKeyDown()方法起作原监听函数没监听原没设置前View获取焦点谓前View设置焦点实告诉系统现视图需户交互系统监听视图前定义MainSurfaceView类构造函数中调setFocusable(true)监听键事件setFocusableInTouchMode(true)监听触屏事件
    546 显示奖励
    第二关果玩家退出游戏菜单然接着点击常规模式游戏然第二关错误游戏设置第二关奖励没显示种子栏目中玩家接着通第二关进入第三关第三关奖励显示第二关奖励然没显示原判断否出奖励代码紧挨着Configlevel++导致果没达关奖励isAlive属性赋值真然奖励果玩家第三关者第四关退出菜单然接着游戏前奖励显示Game类中draw()方法中判断现关卡前奖励显示





    总结
    毕业设计长时间终完成然程中茫然甚知措通种方式解决掉中难题中学专业知识成长少
    次毕业设计选题目Android版植物战僵尸移动终端设备已成生活部分Android系统手机说形影离
    学期末选择题目开始整理思路做充分准备收集毕业设计图片素材收集相关资料学相关技术等设计初期设计方案手咎原技术够图书馆找书籍作者会独见解灵感
    处理图片编写代码程中遇少问题然直接间接解决运行效率问题:设计中方便调试需修改变量设成全局变量占定存造成存浪费考虑现手机设备硬件条件较没进行处理运行时程序需元素时释放掉免运行时间稍长死机:软件适应性够强找图片素材关800*480手机屏幕进行处理果屏幕适应果图片根手机屏幕尺寸例缩放算勉强运行达理想效果干脆缩放实原技术家找种两全美办法需改进方
    通项目开发真正学融入实践中然里涉知识没全面游戏单机版竞技游戏相联机版简单联机版游戏涉网络传输协议会牵涉进更问题例字符串传输中转换传输速度等系列问题会努力做出复杂度更高玩性更强手机游戏满足广消费者求坚信踏出校园刻必定满怀信心迎接新生舞台
















    致谢
    四年学生活画句号心中难舍眷恋校园走出生说新征程见闻知学全部应实际工作中回首四年取许成绩生活中快乐艰辛感谢老师四年孜孜倦教诲成长关心爱护
    知谁样说窗情壶陈年老酒时开启会沉醉四年风风雨雨走充满着关爱留值珍藏美记忆
    求学路父母关爱未间断辛勤私创造良学条件鼓励支持提供穷学动力感谢直抚养培育
    老师认真负责工作态度严谨治学精神深厚理水受益匪浅特感谢王老师毕业设计程中巨帮助够利完成毕业设计表示衷心感谢



























    参考文献
    [1] 李华明 Android游戏编程零开始[M] 北京:清华学出版社 2011年10月
    [2] 陈强 Android实例开发完全手册[M] 北京:民邮电出版社 2012年07月
    [3] 陈昱勋陈风郑名杰等 Google Android SDK开发范例全[M] 北京:民邮电出版社 2011年10月
    [4] 林刚强 AndroidSoundPool类利弊[DBOL]
    httpteche800comcnarticles20104291272532925487_1html 20100429
    [5] ddna MediaPlayer基方式[DBOL] httpblogcsdnnetddnaarticledetails5176233 20100111
    [6] 移动开发者社区 Android[DBOL] httpandroideoecn
    [7] 优亿开发 Android[DBOL] httpwwweoeandroidcomvideo
    [8] 北风网 IT[DBOL] wwwibeifengcom
    [9] CSDN IT[DBOL] wwwcsdnnet
























    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 35 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    童话 植物大战僵尸

    植物大战僵尸 人物: 植物:倭瓜、豌豆射手、食魔花、火爆辣椒、玉米投手、向日葵、仙人掌等。 僵尸:撑杆僵尸、小鬼僵尸、加刚特、铁桶僵尸、僵王博士、植物僵尸、机器僵尸等。 时间:2090...

    12年前   
    11478    0

    植物大战僵尸 小游戏大智慧

    小游戏,大智慧 植物大战僵尸 早些年,有一款益智策略类游戏风靡全国,从大人到小孩,从老板到员工都玩的不亦乐乎——那就是植物大战僵尸。游戏中玩家通过放置功能各异的植物,把僵尸阻挡消灭在入侵...

    11年前   
    10272    0

    基于Android的FTP文件传输

     毕业设计(论文) 题 目 基于Android的FTP文件传输 姓 名 学 ...

    5年前   
    1058    0

    基于Android智能风扇的设计

    由于科技越来越发达,智能硬件也使用越来越多,基于蓝牙的技术开发以及应用也是快速的发展。其使用在Android系统和Windows系统等平台上都可以使用蓝牙无线模块。可以实现了主蓝牙设备和从设备它...

    3年前   
    969    0

    基于Android Studio的饼图账单的设计与开发Android毕业论文

    毕 业 论 文 基于Android Studio的饼图账单的设计与开发Design and Development of PieChart Billing Based on Android S...

    4年前   
    786    0

    Android实训报告基于Android的游戏开发

    通信与电子信息专业实训报告项目名称:基于Android的游戏开发 班 级 通信班 姓 名 ...

    3年前   
    1079    0

    基于Android的教学课程系统设计与开发

    摘 要移动应用已经成为人们生活必不可缺的一部分,大学生身为移动应用的最大用户群体,在生活学习娱乐各个方面都与移动应用有着紧密联系,然而针对大学生校园学习的移动应用却寥寥无几,因为不同的...

    3年前   
    612    0

    基于Android的中国象棋毕业设计

    基于Android的中国象棋毕业设计 摘 要 现在智能操作系统迅速发展,使得智能手机和其他的智能移动设备得到广泛普及,因此,智能操作系统的应用软件开发及其需要的服务将有广阔的发展前景...

    5年前   
    1213    0

    基于android的物业管理系统的设计与实现19.8

     目录基于android的物业管理系统的设计与实现 3摘 要 3Android property managemengt system 5Abstract 51 绪论 61.1 选题背景 6...

    3年前   
    801    0

    基于Android的网上订餐系统毕业论文

    XX 大 学 毕 业 设 计( 论 文 ) 题目 基于Android的网上订餐系统 作者 学院 专业 学号 指导教师 二〇XX 年 X月 X日 摘 要 ...

    5年前   
    1804    0

    基于Android手机的NFC开发与应用

    基于Android手机的NFC开发与应用摘 要随着信息时代的快速发展,NFC作为一种由RFID演变来的新型近距离无线通信技术也受到人们的关注,相较于红外、Wifi等其他无线通信有启动速度快、...

    1年前   
    369    0

    基于Android的外卖点餐类的app的设计与开发

    基于Android的外卖点餐类app的开发与设计 摘 要:在这千变万化的岁月中,手机已不是稀奇之物。规矩的传统订餐已经不能在我们生活中得到满足,用户们需要一个可以在家查看餐厅以及点餐的服务。...

    8个月前   
    192    0

    基于Android的志愿活动平台的设计与实现

     基于Android的志愿活动平台的设计与实现 ...

    11个月前   
    474    0

    论文开题报告:定稿基于Android的快递APP设计与实现

    目前,为了提高取件效率,快递公司在一些快递密集型的投放点放置了智能云柜,取件人通过快递公司发送的密码来开启云柜。虽然这种方式大大提高了取件效率,让取件人的取件时间更加自由,但是云柜只能存放一些体...

    5年前   
    2905    0

    基于安卓Android智能家居详细设计毕业论文

    基于Android的智能家居目 录第 1 章 项目概述 11.1 项目背景 11.2 术语定义 2第 2 章 技术方案 32.1 系统描述 32.2 功能描述 32.3 项目功能图 4...

    3年前   
    1132    0

    基于Android的电子书阅读器的设计与实现

    毕业设计说明书(论文)中文摘要Android平台现在非常的火,我们平时使用的智能手机,平板电脑,还有新的智能电视,有很大部分是基于Android平台的,很显然,它在人们生活中的表现得越来越重要...

    3年前   
    635    0

    基于Android的智能停车系统的设计与开发(修改版)

    在对城市停车位供给紧缺、停车难以及乱停车等问题进行解决时,可以研究其根源,对城市的有效停车位进行增加,构建现代化停车场,另外也可以针对目前已有的停车场进行科学合理的配置、控制以及调度。

    3年前   
    489    0

    基于Android的天气预报查询系统的实现毕业设计

     基于Android的天气预报查询系统的实现 摘要:随着智能手机一步步走进人们的生活,它将成为人们获取信息的主要设备,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,...

    5年前   
    1960    0

    基于Android移动平台图像处理系统开发

    在今天的全球化世界里,科技不断的进步与创新更加促进了外语学习途径的多样化,随着人们学习方式的便捷并迅速的发展,特别是以电子词典为主工具的出现,用户对此类产品的便捷、功能的要求越来越高。目前,电子...

    3年前   
    3344    0

    基于java的坦克大战游戏开发毕业设计

     毕业设计说明书(论文) 作 者: 学 号: 院 系: 专 业...

    5年前   
    1310    0

    文档贡献者

    山***1

    贡献于2019-05-31

    下载需要 35 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档