基于安卓推箱子游戏的设计与实现

上传人:痛*** 文档编号:120781814 上传时间:2022-07-18 格式:DOC 页数:28 大小:1.31MB
返回 下载 相关 举报
基于安卓推箱子游戏的设计与实现_第1页
第1页 / 共28页
基于安卓推箱子游戏的设计与实现_第2页
第2页 / 共28页
基于安卓推箱子游戏的设计与实现_第3页
第3页 / 共28页
点击查看更多>>
资源描述
毕 业 设 计(2016届)题 目:基于安卓推箱子游戏的设计与开发 学 院 XXxxXX 专 业 XXxxX 年 级 XXxxXX 学生学号 XXxxXX 学生姓名 XXxxXX 指导教师 XXxxXX XX年XX月XX日摘 要如今,伴随着Google Android操作系统的盛行,基于Android SDK的系统开发和基于Android应用的开发等已倍受大家关注. 但是目前基于Android游戏开发的市场还是不够成熟的,因而一款休闲娱乐、锻炼思维且适应于Android操作系统的游戏必将成为主流. 在这个快速发展的社会坏境中,生活节奏飞快,人们需要适当的慢下来,本篇文章是结合Eclipse SDK开发平台开发的一款基于安卓平台的推箱子小游戏. 该游戏主要分为初始化模块,界面模块,数据存储模块,功能模块及游戏控制模块. 玩家通过控制小人的移动来推动箱子,将所有箱子都推到目的地从而过关. 每关的难易程度不同,可保持玩家对游戏的新鲜感,本游戏不仅是适合各类人群休闲娱乐的活动,还有助于提高人们思考问题能力与想象力,改善思维方式,拓展思维. 关键词:安卓 推箱子 EclipseAbstract Recently, along with the prevalence of Google Android operating system, the public has immensely concerned on the development of applications that based on Android SDK systems and Android application. In this rapid development of social environment, the fast pace of life, people need to be appropriate to slow down . This issue is a Sokoban game, which is developed for Android system and is invented based on the combination of Eclipse SDK development platform. players have to control the movement of a turtle to push a box and to put all boxes into the right destination. Particularly, the difficulty of each level is separated differently, which maintain the freshness of the game . The game is not only suitable for all kinds of people for leisure time, but also can help people to expand imagination and to improve creative thinking. Key Words:Android PushBox Eclipse数学计算机学院 宁夏大学本科毕业设计目录1. 绪论11.1 研究背景和意义11.2 国内外研究状况21.3 本文主要工作内容22. 相关技术简介32.1 Android技术32.1.1 应用程序32.1.2 Java开发方面42.1.3 C/C+开发方面42.2 Android工作原理42.2.1 硬件抽像层42.2.2 系统内核42.2.3 安全权限机制52.3 系统开发环境说明52.3.1 Android的开发环境说明52.3.2 开发环境53. 系统分析63.1 系统设计目标63.2 系统可行性分析63.2.1 技术可行性分析63.2.2 操作可行性分析63.3.3 经济可行性分析63.3 系统功能需求概述73.4 系统设计规则73.5 业务流程设计74. 游戏的设计与实现94.1 主菜单界面模块设计94.2 游戏界面设计94.3 设计方案115. 游戏功能设计说明及代码135.1 对键盘的抬起按下接听的实现135.2 主菜单界面的实现145.3 游戏地图的实现155.4 游戏中关于人物的实现175.5 屏幕滚动的实现186. 系统测试196.1 键盘的操作和功能测试196.2 箱子放置到指定位置时变色显示功能的测试演示206.3 游戏是否通关判断功能的测试演示207. 结 论22参考文献23谢 辞241. 绪论1.1 研究背景和意义本课题来源于一款来自日本的古老游戏推箱子,其设计目的是训练人的逻辑思维能力. 游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置. 稍不小心就会出现箱子无法移动或者通道被堵住的情况,这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务. 但任务的完成还需要玩家头脑清晰,在最少的步骤之下完成所有箱子的定向移动. 这就需要玩家开动脑筋,在大脑中模拟游戏中人物的行走路线. 而推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏. 它既能锻炼思维的严密性,又有很多乐趣. 我个人也比较喜欢玩这个游戏,因此,我就借这个机会将这个推箱子游戏用安卓语言实现了出来,然而随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发了出各种版本、各种类型的推箱子. 这其中也包括很多手机版本的实现,伴随着手机与计算机的普及,很快推箱子游戏便进入了千家万户. 推箱子游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎. 本文基于Android技术和eclipse SDK开发环境, 开发了一个操作简单、界面美观、功能较齐全、可在Android SDK 2. 2平台上运行的推箱子游戏. 整个游戏包含了两个公共类,主菜单界面相关类,游戏界面相关类,在这个游戏的设计过程中,可以加深我对安卓语言的应用,提升了我的代码编程能力,在整个游戏的开发过程中我查阅了很多资料,请教了好多同学,开发这个游戏增强了我的动手能力. 通过该游戏的设计过程,培养了我的结构化程序设计的思想,加深对安卓语言基本语言要素和流程结构的理解,针对安卓语言中的重点和难点内容进行了训练,让我独立完成有一定工作量的程序设计任务,得到软件工程的综合训练,提高了我解决实际问题的能力. 1.2 国内外研究状况Android是由Google为首的OHA(Open Handset Alliance)推出的一款开放的嵌入式操作系统平台,从2008推出的android SDK1. 0到现在,Android SDK的最新版本已经升级到了最新的2. 3,Android正以前所未有的速度聚集着来自世界各地的开发者,越来越多的创意被应用到Android1应用程序的开发中,大有席卷整个手机产业的趋势. 说到Android系统,Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件. Android 的核心系统服务依赖于 Linux 2. 6 内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型. 由于Android带有相当浓郁的Linux血统这也就意味着他拥有开源Linux的众多优点:安全、运算速度快、易于开发等等. 正因为Android具有上述的优点,所以它在国内具有相当强劲的竞争优势. 青年网络的主要负责人潘长华先生说到:Android作为一款十分优秀的移动开发平台十分适合国内的开发环境. 尤其是中小企业开发团队低成本以及源代码的分享可以为企业节省大量资金,这对于中小企业来说无疑是最大的诱惑. 青年网络推出的星网睿话就是国内成功的Android开发产品. 同时一个资深的Android开发爱好者告诉记者:如果你是个人开发爱好者,那么Android就是Google为你量身打造的,放弃闭源的种种吧,开源才是王道,Android才是未来的主宰. 伴随着Google Android操作系统的盛行,国内外的开发团队也逐渐的壮大起来了,基于Android SDK的系统开发,基于Android应用的开发等已逐渐倍受大家关注,而手机游戏开发历来是移动开发中分量最重的部分,面对如此火爆的Android市场自然也不甘示弱,由于Android的应用层开发是基于Java的开发,所以必有其可以快速移植J2ME开发的游戏的优势,但是移植的游戏必定也不能发挥Android操作系统独特的特性,所以目前基于Android游戏开发的市场还是不够成熟的,面对这种情况,在了解AndroidSDK基础上,我打算开发一款完全适应于Android操作系统的推箱子益智游戏,此游戏采用OpenGL技术,实现2. 5D斜视角的立体视角,采用SQLite轻量级数据库存储技术等质在为Android量生打造一款独特的游戏. 1.3 本文主要工作内容本文首先对系统所涉及到的基础理论知识进行阐述,并在此基础上进行了系统分析. 系统分析是平台开发的一个不可缺少的环节,为了能够使本系统更好、更完善的被设计出来,就必须先进行调查研究. 在系统调查的基础上,对新系统的功能进行系致的分析,从而才能够开发出完整的系统设计. 本平台利用了现在比较广泛的安卓语言实现的. 其次考虑到系统实施的可行性,在软件方面我选择了如今比较流行的Android来进行开发管理平台的设计,使用 Eclipse进行开发,Eclipse是非常成熟的开发工具,因此无论在可用性还是可靠性方面都毋庸置疑. 2. 相关技术简介2.1 Android技术Android是一种以linux为基础的开放源代码操作系统2,主要使用于便携设备. 目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”. Android操作系统最初由Andy Rubin开发,最初主要支持手机. 2005年由google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上. Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS. 2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一. 2012年2月数据,Android占据全球智能手机操作系统市场52. 5%的份额,中国市场占有率为68. 4%. 并且Android支持多种操作系统3-4. Android的系统架构和其它操作系统一样,采用了分层的架构. android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层. Android是以Linux为核心的手机操作平台5,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统. 在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C+作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:QT(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序. 另外,谷歌还在2009年特别发布了针对初学者的Android Simple语言,该语言类似Basic语言. 而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发. 2.1.1 应用程序早期的Android应用程序开发,通常通过Android SDK(Android软件开发包)下使用Java作为编程语言来开发应用程序,但通过不同的软件开发包,则使用的编程语言也不同. 例如开发者可以通过Android NDK(Android Native开发包)使用C语言或者C+语言来作为编程语言开发应用程序. 同时谷歌还推出了适合初学者编程使用的Simple语言,该语言类似微软公司的Visual Basic语言. 此外,谷歌公司还推出了Google App Inventor开发工具,该开发工具可以快速地构建应用程序,方便新手开发者. 2.1.2 Java开发方面Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化. 考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同. 2.1.3 C/C+开发方面早期的Android开发只支持Java作为编程语言开发应用程序,因而使得其他语言开发者只能望而却步. 2010年4月,谷歌正式对开发者发布了Android NDK,NDK允许开发者使用C/C+作为编程语言来为Android开发应用程序,初版的NDK使得开发者看到了C/C+在Android开发中的希望. 但是,当前版本的NDK在功能上还有很多局限性:NDK并没有提供对应用程序生命周期的维护;NDK也不提供对Android系统中大量系统事件的支持;对于作为应用程序交互接口的UI API,当前版本的NDK中也没有提供. 但是相对于初版的NDK,现在的NDK已经进行了许多重大的功能改进. 由此可见,NDK仍然需要完善和发展,相信未来随着NDK的发展,NDK可以做得更多更好. 2.2 Android工作原理2.2.1 硬件抽像层Android 的 HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块. HAL 的目的是为了把 Android framework 与 Linux kernel 隔开,让 Android 不至过度依赖 Linux kernel,以达成 kernel independent 的概念,也让 Android framework 的开发能在不考量驱动程序实现的前提下进行发展. HAL stub 是一种代理人(proxy)的概念,stub 是以 *. so 档的形式存在. Stub 向 HAL“提供”操作函数(operations),并由 Android runtime 向 HAL 取得 stub 的 operations,再 callback 这些操作函数. HAL 里包含了许多的 stub(代理人). Runtime 只要说明“类型”,即 module ID,就可以取得操作函数. 2.2.2 系统内核Android 是运行于 Linux kernel之上,但并不是GNU/Linux. 因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了. Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等. Android 为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 userspace,使得Linux driver 与 Linux kernel彻底分开. bionic/libc/kernel/ 并非标准的kernel header files. Android 的 kernel header 是利用工具由 Linux kernel header 所产生的,这样做是为了保留常数、数据结构与宏. 2.2.3 安全权限机制Android本身是一个权限分立的操作系统. 在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID). 系统的各部分也分别使用各自独立的识别方式. Linux就是这样将应用与应用,应用与系统隔离开. 系统更多的安全功能通过权限机制提供. 权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问. Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作. 一款应用应该根据自身提供的功能,要求合理的权限. 用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全. 如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑. 编辑本段系统组件Android开发四大组件分别是:活动(Activity): 用于表现功能. 服务(Service): 后台运行服务,不提供界面呈现. 广播接收器(BroadcastReceiver):用于接收广播. 内容提供商(Content Provider): 支持在多个应用中存储和读取数据,相当于数据库. 2.3 系统开发环境说明2.3.1 Android的开发环境说明为了学习Android的 UI和功能,我们可以通过Android Virtual Device(AVD)来实现. AVD是Google提供给开发人员来调试他们开发的应用程序的,它可以运行在我们的PC机上,提供与真实手机形同的UI和操作方式,只是底层的硬件驱动不同. 我们可以用鼠标代替手机在AVD上实现点、划、按等触摸操作. 实现这一切的前提是我们需要搭建一个Android的开发环境. 2.3.2 开发环境开发所用操作系统:Windows 7 64位IDE:Eclipse开发语言:安卓开发所用插件:ADT 12. 0. 0SDK:Android SDK 2. 2,JDK 1. 6及以上办公软件:Office 2007 Office Visio20033. 系统分析3.1 系统设计目标基于安卓版推箱子游戏的具体开发目标为:(1)完成游戏菜单的设计,实现菜单上按钮功能. (2)设计游戏地图,并将建筑物、箱子、人物在地图中设置好(3)主角不能穿过箱子;(4)箱子数量和目标位置数量相等(但每个箱子并不和唯一的目标位置一一对应);(5)主角可以移动和推动木箱(响应键盘方向键);(6)主角只能往前推动箱子,不能向后或者向侧面拉箱子;(7)主角不能同时推动两个箱子;(8)箱子移动方向正前方紧挨墙壁,不可推动;(9)将所有箱子推到设定位置则通过本关,自动进入下一关卡. 3.2 系统可行性分析3.2.1 技术可行性分析在策划推箱子游戏时,首要考虑到要设计一个优美的游戏界面,操作起来更加人性化,即玩家可以用键盘的上、下、左、右键控制人物的移动位置,在画面方面也要更加清新,该游戏是一个轻量级的益智游戏,不存在复杂的情节,做的主要工作为设计游戏各关仓库的形状、大小、可通过区域、各关中箱子的初始位置与目的地. 上述种种都可以用Android原因来实现. 在编写程序是需要上网搜集了游戏中要用到的图片、声音等,收集一些有用的素材. 3.2.2 操作可行性分析本游戏只需要玩家操作四个键位即上下左右四个键位来控制游戏中人物的动作,操作简单易懂,对玩家来说不需要高深的计算机专业知识,只要认识汉字,懂得开关游戏,就可以对系统进行使用. 3.3.3 经济可行性分析由于游戏属于安卓版本小游戏,语言平台是开放的,编译器也是学生学习版本不需要交钱,整个游戏并不算太大,因此开发成本不算太高. 整个开发过程由一个人参与,只需要一台PC机,就可以实现全部的开发任务. 由于PC机是我自己所有的,而且无需专门升级硬件;而各种软件,又是能够在网上免费下载的,因此,整个开发成本可以说是非常的低廉,这也为以后进一步完善游戏提供了非常大的方便. 在使用成本上,用户只需要拥有一部手机,安装本游戏APK就可以使用本游戏,无需付出任何代价,而且对手机的硬件的需求也不是很高,软件方面也没有特殊的需求,易于推广和使用. 因此,从经济可行性分析来看,这个游戏完全是可行的. 3.3 系统功能需求概述基于安卓的推箱子小游戏运用于手机端,手机端实现了打开游戏、进入游戏列表,开始游戏、开关声音、游戏帮助、退出游戏四项功能. 进入游戏以后利用上下左右四个键控制游戏,进入游戏以后按下左下角有退出按钮,游戏会退回到菜单页面. 3.4 系统设计规则无论哪个游戏都要有它自己的设计规则. 该游戏也一样,它的主要设计规则有:简单性:在实现系统的功能的同时,尽量让系统操作简单易懂,这对于一个系统来说是非常重要的. 针对性:该系统设计是基于安卓版推箱子小游戏的设计与实现,所以具有专业突出和很强的针对性. 实用性:该游戏操作简单,打开即玩,具有良好的实用性. 3.5 业务流程设计业务流程分析阶段要调查系统所涉及每个环节的管理业务活动,掌握所有管理业务的内容、作用和信息的输入、输出、数据存储以及信息处理方法和过程,并根据业务的实际处理步骤和过程,绘制出业务流程图. 业务流程图(Transaction Flow Diagram,TFD),它是用一些规定的符号及连线来表示某个具体业务处理过程的图表,即描述系统内各单位、人员之间的业务关系、作业顺序和管理信息流向的图. 业务流程图如图3-1所示:图3-1业务流程图4. 游戏的设计与实现4.1 主菜单界面模块设计游戏的界面只有一个主菜单界面和一个游戏界面组成,菜单界面包含了四项功能按钮,在游戏界面中只有一个退回到主菜单界面的按钮. 如下图4-1所示. 图4-1 界面模块图 4.2 游戏界面设计启动游戏后便可直接进入游戏主界面,主界面上玩家可以自由选择对游戏的操作. 该游戏的运行步骤与界面设计如下:启动游戏后游戏主界面,效果如图4-2所示. 图4-2 游戏主界面图点击“开始游戏”,即可进入系统设置的关卡中,默认从第一关开始,在游戏地图下方只有一个退出按钮,玩家可以通过退出按键返回游戏主界面. 玩家现在就可以开始游戏旅途,充分开动脑筋,挑战每一关卡,关卡难度设计由易到难. 效果如图4-3所示. 图4-3 游戏第一关图当玩家将所有箱子推向目的地,这时候游戏会提示恭喜过关,点击游戏屏幕继续. 如图4-4所示. 图4-4 游戏胜利提示图当游戏通过第一关时游戏进入第二关,第二关游戏如图4-5所示. 图4-5 第二关图点击“退出”,则会退回游戏主菜单. 4.3 设计方案游戏主体设计主要分为以下几个模块6-7:控制调度模块、图形界面模块、逻辑运算模块、动画效果模块本游戏分五个模块(1)初始化模块,对游戏界面进行初始化操作,包括界面切换、和控制声音播放. (2)功能实现模块,主要是对游戏中各个环节进行绘制,设计出系统地图,对玩家手机键位的设定,音乐功能调用,游戏中所有文字的提示信息以及游戏中背景和文字颜色大小等设置的实现. (3)游戏设计模块,实现玩家控制人物的操作,使之能够操作箱子到各个位置,以完成游戏设定的任务. (4)游戏数据模块,游戏数据合理性的判断. (5)功能控制模块,控制游戏功能的实现,包括创建菜单、调用系统音乐、获取当前系统状态、获取游戏界面图标等参数、保存游戏. 系统功能结构图如图4-6所示图4-6 系统功能模块图5. 游戏功能设计说明及代码5.1 对键盘的抬起按下接听的实现在对键盘的抬起按下进行接听是用到了两个类PushBoxActivity、KeyThread. PushBoxActivity主要是游戏的控制器,其主要功能是各个view之间的切换. 在这个程序中,定义了一些变量,例如是否播放声音的变量boolean isSound=true,胜利时的声音MediaPlayer winSound,储存游戏地图的变量 int map;int map2,和选中地图的变量int selectMap,键盘的状态变量 int action 以及最重要的Handler myHandler=new Handler变量,该变量用于接收各个view的控制消息,然后根据消息的类型进行不同的处理. 在定义好好一些变量之后,初始化游戏中的声音,设置为循环播放. 改程序最后的部分编写的是键盘抬起的处理和键盘按下的处理方法. 键盘的抬起和键盘的按下代码如下:public boolean onKeyUp(int keyCode, KeyEvent event) /键盘抬起 if(keyCode = 19)/上 action = action & 0x37; if(keyCode = 20)/下 action = action & 0x3B; if(keyCode = 21)/左 action = action & 0x3D; if(keyCode = 22)/右 action = action & 0x3E; return false; public boolean onKeyDown(int keyCode, KeyEvent event)/键盘按下监听 if(keyCode = 19)/上 action = action | 0x08; if(keyCode = 20)/下 action = action | 0x04; if(keyCode = 21)/左 action = action | 0x02; if(keyCode = 22)/右 action = action | 0x01; return false;KeyThread主要负责定时检测PushBoxActivity中键盘状态码,负责键盘事件. 在此程序中,睡眠的时间定为150ms,并对循环标志位、是否监听键盘和键盘各个方向是否按下变量做出定义. 该类的重点在于监听的运行,监听的运行方法先判断是否需要监听,当需要监听,判断其为走路或者推箱子,得到键盘的状态码,赋值到变量action中,通过处理运算,判断哪个键被按下,例如向上键被按下时,先判断是否达到最上方,若没达到最上方则判断是否有箱子,若上方有箱子移动是,需要启动箱子移动线程,进行箱子的无极移动,在此过程中将键盘的监听标志位设为false,即失去键盘监听. 其他方向键被按下时,判断类似. 向上被按下时的键盘监听方法如下:while(flag)if(keyFlag)/是否需要键盘监听boolean typeFlag = true;/什么类型. 推箱子或者走路action = pushBoxActivity. action;/得到当前键盘的状态码if(action & 0x08) != 0)/上KEY_UP = true;elseKEY_UP = false;if(action & 0x04) != 0)/下KEY_DOWN = true;elseKEY_DOWN = false;if(action & 0x02) != 0)/左KEY_LEFT = true;elseKEY_LEFT = false;if(action & 0x01) != 0)/右KEY_RIGHT = true;elseKEY_RIGHT = false;5.2 主菜单界面的实现主菜单界面由MenuView、MenuViewDrawThread两个类组成. MenuView继承自SurfaceView,并且实现了SurfaceHolder,Callback接口. 程序有对该类中引用到的图片进行声明,该类的构造器, 游戏界面绘制是将各个独立的组件相结合,进而绘制出的8. 界面的绘制工作的编写,屏幕监听的方法. 在该类的构造其中包括了刷帧线程进行初始化和对图片资源进行初始化. 界面的绘制工作只需要将所有的图片绘制到指定位置即可,而声音状态图片会根据PushBoxActivity中的声音状态值进行绘制. 屏幕的监听方法会在点击声音开关图片时,声音开始的处理方法为将声音标志位致反,若此时声音正在播放则声音停止播放,若没有声音播放,则开始声音播放. MenuViewDrawThread主要负责刷帧. 定时调用程序中onDraw方法. 在此程序的构造器中,得到MenuView和surfaceHolder的引用. 程序中定义和编写了睡眠时间和循环标志位实现的方法,界面的运行方式. 界面的运行方法先将画布置空,锁定画布,然后绘制画布最后解锁画,布并定义画布每隔200ms循环一次. 5.3 游戏地图的实现游戏地图涉及到了两个类MapList、GameView两个类. MapList主要是地图信息的封装类,封装了所有管卡中的地图信息,包含了多个矩阵集合. 在地图中用于到了迷宫电脑鼠9的思想. 迷宫问题是图形学、图论和数据结构等领域中广为人知的一个经典问题10-11. GameVIew主要负责前台的显示,负责绘制游戏中所有的信息. 游戏地图实现是整个游戏过程的核心,由于游戏的整个过程中呈现三维立体的效果. 所有游戏地图设置也是至关重要的一块,游戏地图整体是用二维数组存储在文件中的. 在MapList中有具体的方法. 每次打开游戏会初始化一次地图文件,游戏地图分为两层地板. 该类同样继承自SurfaceView并且实现SurfaceViewHolder,Callback接口. 此程序包括对PushBoxActivity的引用、初始坐标的定义、各个图片的声明、箱子的坐标、游戏的状态值、构造器、游戏画面绘制的实现,在构造器中,PushBoxActivity的引用,初始化刷帧线程和图片资源. 游戏画面绘制时会根据游戏的状态值不同进行不同的绘制,状态值为0时绘制游戏时的信息,状态值为1时绘制游戏胜利时的信息. 游戏地图绘制代码如下:if(status = 0)/正常游戏中paint. setAntiAlias(true);/抗锯齿canvas. drawColor(Color. BLACK);/绘制黑背景/绘制第一层,即地板层for(int i=0; ipushBoxActivity. map1. length; i+)for(int j=0; jpushBoxActivity. map1i. length; j+) /根据索引值进行坐标转换 int X = initX+36*j-15*i; int Y = initY+10*j+25*i; if(pushBoxActivity. map1ij = 0)/白色空地 paint. setColor(Color. argb(255, 220, 220, 220); this. myDrawRect(canvas, X, Y); else if(pushBoxActivity. map1ij = 1)/灰色空地 paint. setColor(Color. argb(255, 170, 170, 170); this. myDrawRect(canvas, X, Y); else if(pushBoxActivity. map1ij = 2)/目的地1 paint. setColor(Color. argb(255, 127, 255, 130); this. myDrawRect(canvas, X, Y); else if(pushBoxActivity. map1ij = 3)/目的地2 paint. setColor(Color. argb(255, 60, 255, 120); this. myDrawRect(canvas, X, Y); /开始绘制第二层,及建筑所在层for(int i=0; ipushBoxActivity. map2. length; i+)for(int j=0; jpushBoxActivity. map2i. length; j+) /根据索引值进行坐标转换 int X = initX+36*j-15*i; int Y = initY+10*j+25*i; if(pushBoxActivity. map2ij = 1)/第二层上有箱子处 if(tempi = i & tempj = j)/是当前移动的箱子 canvas. drawBitmap(box, tx-1, ty-27, paint); else/不是移动的箱子 canvas. drawBitmap(box, X-1, Y-27, paint); else if(pushBoxActivity. map2ij = 2)/墙 canvas. drawBitmap(wall, X, Y-25, paint); else if(pushBoxActivity. map2ij = 3)/绿色的箱子 if(tempi = i & tempj = j)/是当前移动的箱子 canvas. drawBitmap(greenBox, tx-1 ,ty-27, paint); else/不是移动的箱子 canvas. drawBitmap(greenBox, X-1, Y-27, paint); /绘制精灵 if(i = pushBoxActivity. mySprite. i & j = pushBoxActivity. mySprite. j) pushBoxActivity. mySprite. drawMySelf(canvas, paint); canvas. drawBitmap(exit2, 0, 440, paint); /绘制退出按钮else if(status = 1)/恭喜过关paint. setAntiAlias(true);/抗锯齿canvas. drawColor(Color. BLACK);/绘制黑背景canvas. drawBitmap(goon, -3, 70, new Paint();/绘制恭喜图片5.4 游戏中关于人物的实现游戏中关于人物的实现涉及到了三个类 MySprite、SpriteMoveThread、SpriteThread. MySprite负责游戏中主人公的绘制、封装的信息. 此程序包括了变量的定义、图片的定义、数组的定义、构造器、初始化化图片、把图片放入数组中和绘制封装的方法. 该程序定义了主人公的初始位置变量、当前位置变量和是否处于行走的变量,定义了各个图片的ID,并把ID放入数组中进行管理. 程序的构造器中得到PushBoxsActivity的引用,并根据角色当前的位置换算出X、Y坐标,并换算出当前的实际坐标. 绘制封装的方法会根据角色当前的状态进行绘制,如果正在行走,直接绘制即可. 如果不是在行走需要进行坐标换算和坐标修正进行绘制. 创建图片数组和ID数组循环初始化所有图片并把图片放入数组中的代码如下:public void initBitmap()/初始化所有的图片manUp = new BitmapmanUpID. length;manDown = new BitmapmanDownID. length;manLeft = new BitmapmanLeftID. length;manRight = new BitmapmanRightID. length;manPushUp = new BitmapmanPushUpID. length;manPushDown = new BitmapmanPushDownID. length;manPushLeft = new BitmapmanPushLeftID. length;manPushRight = new BitmapmanPushRightID. length; for(int i=0; imanUpID. length; i+) manUpi = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manUpIDi); for(int i=0; imanDownID. length; i+) manDowni = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manDownIDi); for(int i=0; imanLeftID. length; i+) manLefti = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manLeftIDi); for(int i=0; imanRightID. length; i+) manRighti = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manRightIDi); for(int i=0; imanPushUpID. length; i+) manPushUpi = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manPushUpIDi); for(int i=0; imanPushDownID. length; i+) manPushDowni = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manPushDownIDi); for(int i=0; imanPushLeftID. length; i+) manPushLefti = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manPushLeftIDi); for(int i=0; imanPushRightID. length; i+) manPushRighti = BitmapFactory. decodeResource (pushBoxActivity. getResources(), manPushRightIDi); SpriteThread为人物的换帧线程,自动检查总共几帧,然后格局方向每隔一定时间换一帧. SpriteThread通过构造器得到图片类型,true为走路的图,false为推箱子图在运行方法中,先判断绘制图片的类型,若为走路图片时并且向上时,只需要把之前设置的储存图片ID的数组设置为下一帧即可. 若为其他方向运行或者推箱子时的运行方法类似. SpriteMoveThread负责人物的移动,从一个位置移动到另一个位置. SpriteMoveThread定义了箱子的移动方向变量和睡眠时间变量. 程序中先得到箱子的移动方向,再对坐标进行调整,根据需要移动的方向进行移动,当需要向上时,先判断是否可以往上走,当可以移动时,移动人物并且将是否移动标志位设为false. 其他方向的移动判断相似. 5.5 屏幕滚动的实现获得人物当前实际位置,判断人物当前实际位置的横纵坐标与边界的位置,例如判断人物的Y轴距离上边界小于100时,将GameView中绘制的初始Y位置加上60. 这样就实现了屏幕滚动的效果. public void scroll(int x, int y)/滚屏方法 if(x 100)/距左边距100时 pushBoxActivity. gameView. initX += 60; if(y 220)/距右边距320-200时 pushBoxActivity. gameView. initX -= 60; if(y 380)/距下边距480-380时 pushBoxActivity. gameView. initY -= 60;6. 系统测试6.1 键盘的操作和功能测试键盘操作功能测试,测试步骤如下(这里对其中的方向键“下”进行测试演示)游戏开始后的主角位置如图6-1所示. 图6-1 游戏初始图单击键盘上的“下”方向按键.查看主角是否向下移动,如图6-2所示图6-2 按“下”之后图判断结果:键盘操作测试成功6.2 箱子放置到指定位置时变色显示功能的测试演示具体测试步骤如下:(1)推箱子游戏已经开始如图6-1所示(2)推动箱子到指定位置后,显示如图6-3所示图6-3 推箱子到指定位置图当箱子推到指定位置时通过变色就可以确定箱子是否到达指定位置. 6.3 游戏是否通关判断功能的测试演示游戏开始后,玩家将要推的箱子全部推倒指定位置,只剩最后一个图6-4预留最后一个箱子图将最后一个箱子推到指定位置显示效果如图6-5所示:图6-5提示过关图结 论手机游戏现在备受人们的喜爱,它充斥在人们的日常生活里,随着Andro
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!