基于android平台的2048手机游戏开发设计与实现_第1页
基于android平台的2048手机游戏开发设计与实现_第2页
基于android平台的2048手机游戏开发设计与实现_第3页
基于android平台的2048手机游戏开发设计与实现_第4页
基于android平台的2048手机游戏开发设计与实现_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计论文基于ANDROID平台的2048游戏开发设计教学单位计算机学院专业名称软件工程学号学生姓名指导教师指导单位计算机学院完成时间2017年4月30日电子科技大学教务处制发基于ANDROID平台的2048游戏开发设计【摘要】在生活节奏不断加快的现代社会,轻松的益智游戏对缓解生活压力调节情绪具有重要的意义。2048这款小游戏是一款流行的数字游戏。第一款2048小游戏是由GABRIELECIRULLI首度发布在GITHUB上。2048是当时基于1024和小三传奇这两款的玩法而开发的新型数字游戏,而游戏设计初衷是一款益智类的游戏,其特点在于轻松,简单,因此,开发要求做到各项功能要完备、操作要简便、易学易用。现在开发出来的版本有普通版、六边形版、朝代版、3D版、后宫版等等。本文采用JAVA语言开发了2048小游戏,通过ANDROID平台实现了2048的基本运行,本着简单,易于操作的原则和缓解生活压力、降低生活节奏的初衷,游戏中没有繁多的按钮,也不用特别复杂的操作,只需动动手指,即可操纵自如。游戏经过图形界面的处理,以不同的颜色显示不同的数字,并拥有了最高成绩记录,撤销上一步,重置游戏的各项功能。对于游戏的逻辑实现部分进行测试,测试结果正常,目前没有发现异常。但是游戏界面可能有些简单,日后可以通过美化界面来获得更好的游戏体验。【关键词】游戏;益智;数字BASEDONTHEANDROIDPLATFORM2048GAME【ABSTRACT】INTHEACCELERATEDPACEOFLIFEINTHEMODERNSOCIETY,EASYPUZZLEGAMETOEASETHEPRESSUREOFLIFEFORCE,ADJUSTTHEMOODHASIMPORTANTMEANING“2048“THISSMALLGAMEISAPOPULARDIGITALGAMETHEFIRST“2048“SMALLGAMEWASRELEASEDBYCIRULLIGITHUBONGABRIELEFORTHEFIRSTTIME“2048“WASBASEDON“1024“AND“SMALLTHREE“LEGENDOFTHETWOGAMEPLAYANDTHEDEVELOPMENTOFANEWTYPEOFDIGITALGAMESANDGAMEDESIGNORIGINALINTENTIONISAPUZZLEGAME,ITSCHARACTERISTICSISEASYANDSIMPLE,THEREFORE,DEVELOPMENTSEEKINGTOACHIEVETHEFUNCTIONTOCOMPLETE,EASYTOOPERATE,YIXUEYIUSENOWDEVELOPEDAVERSIONOFTHEORDINARYVERSION,HEXAGONALVERSION,DYNASTYVERSION,3DVERSION,THEPALACEVERSION,ETCTHEJAVALANGUAGETODEVELOPTHE2048SMALLGAME,2048,THEBASICOPERATIONISREALIZEDTHROUGHTHEANDROIDPLATFORM,THEPURPOSEOFSIMPLEANDEASYOPERATIONPRINCIPLEANDALLEVIATETHEPRESSUREOFLIFE,REDUCETHEORIGINALINTENTIONOFTHERHYTHMOFLIFE,THEGAMEWITHOUTDIFFERENTBUTTON,ALSONEEDNOTPARTICULARLYCOMPLEXOPERATIONS,ONLYNEEDTOMOVEAFINGER,YOUCANMANEUVERABILITYGAMETHROUGHTHEPROCESSINGOFTHEGRAPHICALINTERFACETODISPLAYDIFFERENTCOLORSWITHDIFFERENTNUMBERS,ANDHAVETHEHIGHESTSCORERECORDS,UNDOTHELASTSTEP,RESETTHEFUNCTIONOFTHEGAMETHELOGICOFTHEGAMETOACHIEVEPARTOFTHETEST,THETESTRESULTSARENORMAL,THEREISNOABNORMALBUTTHEGAMEINTERFACEMAYBEALITTLESIMPLE,INTHEFUTURECANBEUSEDTOBEAUTIFYTHEINTERFACETOGETABETTERGAMINGEXPERIENCE【KEYWORDS】GAME;PUZZLE;NUMBEL目录第1章绪论111游戏开发背景112国内外研究现状113游戏开发意义214论文结构2第2章相关技术和理论基础321JAVA语言322ANDROID操作系统4221简介4222系统架构5223ANDROID版本623开发平台介绍6231ECLIPSE6232ADT7232JDK7第3章可行性分析831可行性研究目的8311技术可行性8312经济可行性8313操作可行性8第4章游戏设计941游戏规则942总体设计943详细设计11第5章游戏测试1751测试过程1752测试内容1753测试结果21第6章心得体会22参考文献23附录游戏实现代码24致谢32图目录图21JAVALOGO3图22ANDROIDLOGO4图23ANDROID系统架构5图421系统功能9图422计分显示10图423游戏内容10图424游戏菜单10图425游戏流程11图431游戏主界面12图432数字合并前13图433数字合并后14图434游戏计分15图435游戏计分15图436游戏结束16图521游戏开始18图522向上滑动18图523向左滑动19图524向下滑动19图525向右滑动20图526撤销功能20图527重置功能21第1章绪论11游戏开发背景ANDROID智能手机功能非常强大,具有很高的性价比,非常深受人们的喜爱,可能正式因为如此,在2014年中,ANDROID智能手机在全世界占据着815很夸张的市场份额,一举成为使用的人数最多,市场份额占据最大的ANDROID智能手机系统。而ANDROID智能手机游戏的出现正是为了娱乐心神,并且随着智能移动终端和全球移动通信网络的不断进步,ANDROID智能手机游戏也正在经历从简单到复杂的进化过程。从全球来看,智能移动终端的娱乐服务一直被认为是带动移动数据业务加速并快速发展的重要力量。也是作为手机娱乐服务的重要内容之一。近年来,一直伴随着全球移动网络和移动终端性能不断的提高和完善。由于近几年来,ANDROID智能手机游戏的快速发展,游戏的分类也变得越来越丰富,目前手机游戏按内容可分为角色扮演类(RPG)、冒险类(AVG)、格斗类(FTG)、棋牌类、电影改版类、益智类、体育竞技类、模拟类。手机游戏种类目前已成为人类线上娱乐生活的不可或缺的最主流的载体而存在,现代人对于移动终端的休闲娱乐功能所需求越来越强大,移动终端上的游戏或已以成为了现代人们娱乐生活中不可或缺的一部分了。12国内外研究现状基于ANDROID的游戏开发,国内国外的水平差距很大。在市场上成名的手机游戏基本上都是国外游戏公司开发的,而且很容易辨认。因为学习的关系,本人接触了很多ANDROID开发者的游戏,发现国内开发者开发的ANDROID手机游戏,不仅界面粗糙,而且设计简单,同质化严重,相同的创意往往被反复抄袭很多次。而国外开发者开发的游戏不同,大型游戏内容丰富,情节完整;小型游戏而从用户体验和创意上远胜国内的开发者。13游戏开发意义此次毕业设计的初衷就是想设计出一个能够在任何环境任何时间都能够放松心情和娱乐心身的单机游戏,只要通过简单和易操作的ANDROID游戏帮助手机用户来打发他们闲暇的时间,并娱乐心身和放松心情。如果你也是一个数字叠加的爱好者,或者是比较有天赋的数学天才,不过就算不是数学的天才,一般的玩家也能够玩转这款游戏,都会有很大的成功机会。当你体会过这款游戏,你就会被这游戏深深的吸引,根本停不下来。14论文结构本论文主要从下面几章阐述对于ANDROID2048游戏的研究与应用第1章绪论,介绍了课题的研究背景、国内外研究现状,课题研究目的和意义、以及本文的结构。第2章相关开发技术与理论基础,介绍了课题采用的ANDROID操作系统等相关技术。第3章可行性分析,对ANDROID2048游戏进行可行性分析。总体介绍了程序的设计架构及所要实现的功能分析,并阐述了开发平台和环境的选择。第4章系统详细设计与实现,介绍了程序各个模块的功能分析以及设计思路并其相关实现代码。第5章系统应用实例和结果分析,介绍了应用平台,测试用例以及结果分析。第6章心得体会,总结本文工作成果,并对研究工作做反思和总结第2章相关技术和理论基础21JAVA语言JAVA语言的前身是SUNMICROSYSTEMS公司开发的一种用于智能化家电的名为OAK(橡树)的语言,它的基础是当时最流行的C和C语言(SUN公司于2009年4月被ORACLE公司收购)。但是,由于一些非技术上的原因,OAK语言并没有得到迅速的推广。知道1993年,WWW(万维网)迅速发展,SUN公司发现可以利用OAK语言的技术来创造含有动态内容的WWW网页,于是已受人冷落了的OAK语言又被重新的开发和改造。于是便将改造后的OAK语言改名为JAVA语言,JAVA是太平洋上的一个盛产咖啡的岛屿的名字。终于,在1995年,JAVA这个被定位于网络应用的程序设计语言被正式推出。图21JAVALOGOJAVA编程语言的风格十分接近C语言。集成了C语言面向对象技术的核心,JAVA舍弃了C语言中容易引起错误的指针,改以引用取代,同时移除原C与原来运算符重载,也移除了多重继承特性,改用接口取代,增加垃圾回收器功能。在JAVASE15版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。SUN公司对JAVA语言的解释是“JAVA编程语言是个简单、面向对象、分布、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。JAVA语言问世的时间虽然不长,但却已被业界所接受,IBM、APPLE、DEC、ADOBE、HP等大公司都已经购买了JAVA语言的许可证。2001年,当时的移动电话吧主NOKIA宣布,到2003年将出售1亿部支持JAVA的手机。22ANDROID操作系统221简介ANDROID,中文俗称安卓,是一个以LINUX为基础的开放源代码移动设备操作系统,主要用于智能手机和平板电脑,由GOOGLE成立的OPENHANDSETALLIANCE(OHA,开放手持设备联盟)持续领导与开发中。ANDROID已发布的最新版本为ANDROID51LOLLIPOP。图22ANDROIDLOGOANDROID系统最初由安迪鲁宾(ANDYRUBIN)等人开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统;但是后来发现市场需求不够大,加上智能手机市场快速成长,于是ANDROID被改造为一款面向智能手机的操作系统。于2005年8月被美国科技企业GOOGLE收购。2007年11月,GOOGLE与84家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发改良ANDROID系统,随后,GOOGLE以APACHE免费开放源代码许可证的授权方式,发布了ANDROID的源代码,让生产商推出搭载ANDROID的智能手机,ANDROID操作系统后来更逐渐拓展到平板电脑及其他领域上。2010年末数据显示,仅正式推出两年的ANDROID操作系统在市场占有率上已经超越称霸逾十年的诺基亚SYMBIAN系统,成为全球第一大智能手机操作系统。在2014年GOOGLEI/O开发者大会上GOOGLE宣布过去30天里有10亿台ANDROID设备被激活,相较于2013年6月则是538亿。222系统架构ANDROID是基于LINUX内核的软件平台和操作系统,采用了软件堆栈(SOFTWARESTACK)的架构,共分为四层。图23ANDROID系统架构(1)应用程序层该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用JAVA语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。(2)应用程序框架层该层是ANDROID应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在ANDROID平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。(3)系统库和ANDROID运行时系统库包括九个子系统,分别是图层管理、媒体库、SQLITE、OPENGLESTATE、FREETYPE、WEBKIT、SGL、SSL和LIBC。ANDROID运行时包括核心库和DALVIK虚拟机,前者既兼容了大多数JAVA语言所需要调用的功能函数,又包括了ANDROID的核心库,比如ANDROIDOS、ANDROIDNET、ANDROIDMEDIA等等。后者是一种基于寄存器的JAVA虚拟机,DALVIK虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。(4)LINUX内核ANDROID核心系统服务依赖于LINUX26内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。LINUX内核也是作为硬件与软件栈的抽象层。驱动显示驱动、摄像头驱动、键盘驱动、WIFI驱动、AUDIO驱动、FLASH内存驱动、BINDER(IPC)驱动、电源管理等。223ANDROID版本ANDROID操作系统是一个由GOOGLE和开放手持设备联盟共同开发发展的移动设备操作系统,其最早的一个版本ANDROID10BETA发布于2007年11月5日,至今已经发布了多个更新。这些更新版本都在前一个版本的基础上修复了BUG并且添加了前一个版本所没有的新功能。当前用户量最多的是代号为JELLYBEAN果冻豆版本,占ANDROID用户426,因此,本设计采用ANDROID412SDK版本。23开发平台介绍2048ANDROID游戏开发平台为ECLIPSE432ADT2262JDK170_51,模拟测试平台为ANDROIDSDK模拟器,真机测试平台为ZTEU930HD。231ECLIPSEECLIPSE是不仅仅是成为专门开发JAVA程序的IDE环境,根据ECLIPSE的体系结构,通过开发插件,它能扩展到任何语言的开发,甚至能成为图片绘制的工具。ECLIPSE是一个开放源代码的项目,任何人都可以下载ECLIPSE的源代码,并且在此基础上开发自己的功能插件。也就是说未来只要有人需要,就会有建立在ECLIPSE之上的C,JAVA,PYTHON等语言的开发插件出现。同时可以通过开发新的插件扩展现有插件的功能。可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是ECLIPSE的潜力所在。在本项目中,ECLIPSE正是通过第三方插件ADT实现了开发ANDROID应用。232ADTDT是英文ANDROIDDEVELOPMENTTOOLS的简称,即ANDROID开发工具包。ADT是ECLIPSE中构建ANDROID应用程序IDE插件,ADT扩展了ECLIPSE的功能,让开发人员快速建立新的ANDROID项目、创建应用程序的用户界面。ADT可以帮助ECLIPSE找到ANDROIDSDK,再加上ANDROID框架的API组件调试使用ANDROIDSDK工具,以便APK分发给应用程序。ADT大大减轻ANDROID应用程序的开发工作量,工具集成XML编辑器,将给开发人员一个令人难以置信的开发ANDROID应用环境。使用ADT之前,必须确认已经安装了ECLIPSE以及同ECLIPSEIDE兼容版本的ANDROIDSDK。232JDKJDKJAVADEVELOPMENTKIT是JAVA语言的软件开发工具包SDK。有SE、EE、ME三个版本。没有JDK的话,无法编译JAVA程序,如果想只运行JAVA程序,要确保已安装相应的JRE。第3章可行性分析31可行性研究目的311技术可行性确保现有的技术是否能解决本该开发项目系统采用JAVA语言开发,ECLIPSE作为ANDROID开发环境。ADT插件提供了一系列图形用户界面组件进行界面编程,所以在技术上可行。312经济可行性由于“2048”游戏作为毕业设计进行开发,由本人亲自开发,而且开发ANDROID程序不需要购买昂贵的设备,所以成本不会太高,综上所述经济上是可行的。313操作可行性确定软件产品是否能够被最终的用户所接受,用户是否能操作最终的产品该游戏在方便易操作的ANDROID手机上运行,方便于玩家操作。根据以上几个方面的研究,在技术上、经济上和操作上都是可行的,本项目可进行开发。第4章游戏设计41游戏规则(1)开始时棋盘内随机出现两个数字,出现的数字仅可能为2或4;(2)玩家可以选择上下左右四个方向,若棋盘内的数字出现位移或合并,视为有效移动;(3)玩家选择的方向上若有相同的数字则合并,每次有效移动可以同时合并,但不可以连续合并;(4)合并所得的所有新生成数字相加即为该此移动的有效得分;(5)玩家选择的方向行或列前方有空格则向空格处位移;(6)每次有效移动一步,棋盘上的空位无数字处随机出现一个数字依然可能为2或4;(7)棋盘被数字填满,无法进行有效移动,判负,游戏结束。42总体设计421游戏框架分析对一个游戏而言,需要将各个部位分割成其对应部分的功能,并且逐步去实现该功能。图421系统功能游戏主要分三个显示模块分别是是游戏计分,游戏内容,游戏菜单。图422计分显示图423游戏内容图424游戏菜单422游戏流程分析要想把一个游戏做好,首先要把流程分析好,画出流程图,如图421所示图425游戏流程423游戏记分分析当有数字合并时,记录此时合并的的数字,加到相应的分数中。同时保存游戏最高分到本地,下次启动应用时显示历史最高分。424游戏结束分析当屏幕上数字没有得到2048这个值,没有两个相同的格子的数字相同,并且已经没有空格,那么就判定为游戏结束。43详细设计431游戏主界面游戏开始界面为一个类似棋盘4乘4的16宫格,在宫格的左上角显示再该局游戏内的得分,而对应的右边则显示历史最高分。如下图431所示图431游戏主界面432游戏逻辑实现1游戏布局本游戏的设计用到了线性布局、相对布局、表格布局等等。首先总体布局是一个线性布局,内部包括一个子线性布局和一个表格布局,该子线性布局中包含四个TEXTVIEW,用来显示当前分数,SCOPE,最高分,TOPSCOPE。表格布局用来显示4乘4的方格。最后再用一个线性布局显示下方的两个按钮,撤销和重置。2数据结构015对应游戏中44的16个方格。相应的数字对四取余得到该数字的横坐标,除以四得到该数字的纵坐标。当方格内无数字时,将其保存到空白格列表SPACELIST中。当方格内有数字时时,将其保存到数字格列表NUMBERLIST中。3触控交互本模块主要实现用户使用手指滑动屏幕,来判断其滑动的方向。首先定义手指接触屏幕起始位置的横坐标变量STARTX,纵坐标变量STARTY,手指离开屏幕的最后位置的横坐标OFFSETX,纵坐标变量OFFSETY。调用ONTOUCHLISTENER监听器,重写ONTOUCH方法。将OFFSETX减去STARTX得到水平方向的偏移量,同理OFFSETY减去STARTY得到垂直方向的偏移量。通过判断水平和垂直方向偏移量即可知道用户所要移动的方向。特殊情况1由于人的手指在滑动方向会有偏差,一般不会精准的向四个方向滑动,肯定会有偏差,所以要判断手指滑过方向的是水平方向还是垂直方向的意图,当水平方向的偏移量大于垂直方向的偏移量时,表明用户是水平滑动意图,当垂直方向的偏移量大于水平方向的偏移量,表明用户是垂直方向滑动的意图。2由于人的手指只有滑动一段距离才能表明用户的意图,不可能点一下屏幕或者稍微动一下就表示滑动意图,这显然不太符合现实情况,所以要定义偏移一定的距离才能判断用户的真正意图。规定当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于5时,用户向上滑动,大于5使,规定向下滑动;当水平方向的偏移距离大于或者等于水平方向的偏移距离,且当偏移小于5时,规定用户向左滑动,如果大于5,用户向右滑动。4数字合并滑动方向不同时,执行不同的遍历顺序。例如用户向上执行一次向左有效滑动时,做一个嵌套循环得到该方向上索引。再调用置换方法实现。用户所移动的方向上有两个相同的格子时,首先一次移动中,每个格子最多只能升级一次,获取当前格子的VIEW,并将其置成空白格。获取目标格的VIEW,并将其背景置成当前格升级后的背景。然后在空白格列表中加入当前格子,在数字列中删掉第一个格子,将数字列表对应的内容升级。效果如下图所示图432数字合并前图433数字合并后5数字列表类数字列表类用于保存数字格,以及数字格对应的数字。定义一个LISTSTUFFLIST用于保存所有不为空的格子的坐标(在GRIDLAYOUT中的位置从0到15)。再定义一个LISTNUMBERLIST用于保存所有不为空的格子对应的数字(以2为底数的指数)。定义以下方法,用于判断当前位置是否为数字格;将当前的格子从数字列表中去掉;使当前的格子对应的数字升级,指数加1;将当前格子对应的位置置换为新的位置;通过格子对应的位置获取其对应的数字;通过格子对应的横纵坐标来获取其对应的数字;清空数字格及其对应的数字;判断是否还有可以合并的数字格;获取对应序号格子中的位置;获取对应序号格子中的指数。6添加随机数在空白格中随机加入数字2或者4,首先获取坐标对应的VIEW,通过随机生成数字1或2,INTMATHROUNDMATHRANDOM1然后将当前格子的图片置换为2或者4,在NUMLIST中加入该格子的信息,最后在空白列表中去掉这个格子。游戏最开始的时候会添加两个随机数,并且每执行一次有效移动时,在空白格处随机添加一个随机数。7游戏计分每当有相同的数字合并时,合并所得的所有新生成数字相加即为该此移动的有效得分。如下图所示图434游戏计分图435游戏计分游戏最高分显示在右上角,历史最高分会记录在本地。读取PERFERENCE文件,如果没有,则会创建一个名为TOPSCORE的文件,使用EDITOR类写入PERFERENCE文件,用于写入最高分。8撤销功能撤销操作,获取操作记录栈中最后的记录,并重绘界面。至少应有一次有效滑动后才能撤销。将当前的界面记录在栈中弹出。取栈中第二个对象即为本次操作之前的界面的记录。调取方法,重绘界面。9重置功能清空界面,清空数字,使得分为零,重新初始化。433游戏结束当游戏界面上的数字被填满,并且没有两个相邻的相同数字时,游戏结束,此时会弹出一个提示框,显示用户本局所获得得分数并鼓励,点击重新开始则初始化游戏,玩家可以开始下一局。点击结束则直接关闭该游戏。如图所示图436游戏结束第5章游戏测试51测试过程(1)拟定测试计划。根据游戏的总体情况,仔细分析游戏各个步骤的运行可能出现的状况,对各种情况进行汇总,然后拟定出一份具体测试步骤。(2)初步测试。根据拟定好的计划进行游戏调试,出现意外情况时(3)及时记录。测试完后对所记录的意外情况进行分析,然后提出改进的方案,再进行修改。(4)深度测试。对游戏进行最后的修改确认没有漏洞后再进行测试,从各个方面进行一次整体的排查,知道不再出现意料之外的情况。(5)测试人员。测试初级阶段主要由游戏主要编程员进行测试,以便能够全面的进行一次错误排查。然后由不同的玩家进行测试,集众人之益,能够从不同的角度发现问题,以便更好地改。52测试内容为了更好的测试游戏的可用性现用安卓模拟器进行测试,首先打开ECLIPSE软件,通过IMPORT将源代码导入工作区,然后点击工具栏的开始按钮打开模拟器进行运行,当游戏进入游戏主界面时按照以下步骤进行测试。开始界面如图所示图521游戏开始(1)向上滑动,如图所示图522向上滑动结果正常。(2)向左滑动,如图所示图523向左滑动结果正常。(3)向下滑动,如图所示图524向下滑动结果正常。(4)向右滑动,如图所示图525向右滑动结果正常。(5)点击“撤销”返回上一步,如图所示图526撤销功能结果正常。(6)点击“重置”初始化界面,如图所示图527重置功能结果正常。53测试结果程序运行正常,没有发现什么错误。第6章心得体会经过了几个月的研究终于把2048这个游戏完成了,这个游戏的完成使我明白了,看似很简单的事情要真的动手实践起来确实有一定的难度,还好经过我不断的耐心学习和钻研,才把这个游戏的基本功能实现了,最后只实现了记录历史最好成绩的功能,暂时没有实现排行榜这点稍微遗憾,以后有机会我会去实现的俗话说,不积跬步无以至千里,不积小流无以成江海,程序中的很多方法我都是在书中和网上找了又找,试了又试,一遍又一遍,最终才把需要的方法融入到程序当中,实现了必要的功能模块。我以前从来没有玩过这个游戏,在开发游戏之前,我先在网上找到该游戏,了解游戏的玩法,自己熟悉之后才开始慢慢琢磨如何布局,如何分析,如何设计,如何实现默写模块功能,就用户在屏幕上滑动,获取用户意图这一模块来说,以前感觉很不可思议的事情,经过我不断耐心的学习,实验,最终也实现了,感觉挺棒的,通过这一点使我了解到我现在需要学习的内容还很多,今后我一定积极去学习需要学习的知识,做到融会贯通,多做项目使自己在实践中学习,为将来打好铺垫。最终因为本人能力有限,时间仓促,该游戏只是实现了基本功能,具体的美化、优化等等还没来得及做,虽然只做了这么一小部分,但是我还是学到了很多平时没有掌握到的知识,虽然不太完美,但是总体来看我还是比较满意,相信只要有实践就会有收获,只要肯努力就会有回报。成功的大门永远为那些追逐目标而奋发图强的人而开。参考文献1郑莉,王行言,马素霞JAVA语言程序设计M北京清华大学出版社,2010,2282382吴亚峰,于复兴,杜化美ANDROID开发游戏大全M北京人民邮电出版社,2013,14213王小科,寇长梅,于复兴等ANDROID入门经典M北京机械工业出版社,2013,1301344楚无咎ANDROID开发游戏大全M北京电子工业出版社,2013,2325,8284,1601635IANFDARWINANDROID开发游戏大全M北京机械工业出版社,2013,290297,3333346一辉ANDROID布局详解之一FRAMELAYOUTHTTP/BLOGCSDNNET/YIHUI823/ARTICLE/DETAILS/6702273,20110819/201412257益智小游戏2048网页游戏HTTP/WWW4399COM/FLASH/133861HTM,20140826/201412208FLYFISH手机游戏HTTP/BAIKEBAIDUCOM/LINKURLBC70MOPFKDDNGOLREOONGJIWTTYIAKNTJIXXQ9TW6IRNMXJKDVSTWU3UWDW6VBIVOZ4SN2YJBYZOHJCFAJACAJLRN045_X7I8TRHH4HWA,20140320/201412219SPRINGHI2009ANDROID中的HANDLER总结HTTP/WWWPIN5ICOM/SHOWTOPICANDROIDHANDLERHTML,20100726/2014122510ZYQ0335ACTIVITY之间的数据传递方法HTTP/BLOGCSDNNET/ZYQ0335/ARTICLE/DETAILS/S7636724,20120606/20141225附录游戏实现代码/用于获取移动方向上下一个格子的位置PARAMINDEX当前格子的位置PARAMDIRECTION滑动方向RETURN如果在边界在返回1/PUBLICINTGETNEXTINTINDEX,INTDIRECTIONINTYINDEX/4INTXINDEX4IFX3IFX0IFY0IFY3RETURNINDEXDIRECTION/用于获取移动方向上前一个格子的位置PARAMINDEX当前格子的位置PARAMDIRECTION滑动方向RETURN如果在边界在返回1/PUBLICINTGETBEFOREINTINDEX,INTDIRECTIONINTYINDEX/4INTXINDEX4IFX0IFX3IFY3IFY0RETURNINDEXDIRECTION/该方法用来交换当前格与目标空白格的位置PARAMTHISIDX当前格子的坐标PARAMNEXTIDX目标空白格的坐标/PUBLICVOIDREPLACEINTTHISIDX,INTNEXTIDXMOVEDTRUE/获取当前格子的VIEW,并将其置成空白格VIEWTHISVIEWGRIDLAYOUTGETCHILDATTHISIDXIMAGEVIEWIMAGEIMAGEVIEWTHISVIEWFINDVIEWBYIDRIDIMAGEIMAGESETBACKGROUNDRESOURCEICONS0/获取空白格的VIEW,并将其背景置成当前格的背景VIEWNEXTVIEWGRIDLAYOUTGETCHILDATNEXTIDXIMAGEVIEWNEXTIMAGEIMAGEVIEWNEXTVIEWFINDVIEWBYIDRIDIMAGENEXTIMAGESETBACKGROUNDRESOURCEICONSNUMBERLISTGETNUMBERBYINDEXTHISIDX/在空白格列表中,去掉目标格,加上当前格SPACELISTREMOVESPACELISTINDEXOFNEXTIDXSPACELISTADDTHISIDX/在数字格列表中,当前格的坐标置换成目标格的坐标NUMBERLISTCHANGEINDEXTHISIDX,NEXTIDX/刚方法用于合并在移动方向上两个相同的格子PARAMTHISIDX当前格子的坐标PARAMNEXTIDX目标格子的坐标/PUBLICVOIDLEVELUPINTTHISIDX,INTNEXTIDX/一次移动中,每个格子最多只能升级一次IFCHANGELISTCONTAINSNEXTIDXMOVEDTRUE/获取当前格子的VIEW,并将其置成空白格VIEWTHISVIEWGRIDLAYOUTGETCHILDATTHISIDXIMAGEVIEWIMAGEIMAGEVIEWTHISVIEWFINDVIEWBYIDRIDIMAGEIMAGESETBACKGROUNDRESOURCEICONS0/获取目标格的VIEW,并将其背景置成当前格升级后的背景VIEWNEXTVIEWGRIDLAYOUTGETCHILDATNEXTIDXIMAGEVIEWNEXTIMAGEIMAGEVIEWNEXTVIEWFINDVIEWBYIDRIDIMAGENEXTIMAGESETBACKGROUNDRESOURCEICONSNUMBERLISTGETNUMBERBYINDEXNEXTIDX1/在空白格列表中加入当前格SPACELISTADDTHISIDX/在数字列中删掉第一个格子NUMBERLISTREMOVETHISIDX/将数字列表对应的内容升级NUMBERLISTLEVELUPNEXTIDXCHANGELISTADDNEXTIDX/更新分数UPDATESCOREINTMATHPOW2,NUMBERLISTGETNUMBERBYINDEXNEXTIDX/该方法,为每个符合条件的格子执行变动的操作,如置换,升级等PARAMTHISIDX当前格子的坐标PARAMDIRECTION滑动方向/PUBLICVOIDCHANGEINTTHISIDX,INTDIRECTIONIFNUMBERLISTCONTAINSTHISIDXINTNEXTIDXGETLASTTHISIDX,DIRECTIONIFNEXTIDXTHISIDX/不能移动RETURNELSEIFSPACELISTCONTAINSNEXTIDX/存在可以置换的空白格REPLACETHISIDX,NEXTIDXELSEIFNUMBERLISTGETNUMBERBYINDEXTHISIDXNUMBERLISTGETNUMBERBYINDEXNEXTIDX/可以合并LEVELUPTHISIDX,NEXTIDXELSEINTBEFOREGETBEFORENEXTIDX,DIRECTIONIFBEFORETHISIDX/存在可以置换的空白格REPLACETHISIDX,BEFORE/用于获取移动方向上最后一个空白格之后的位置PARAMINDEX当前格子的坐标PARAMDIRECTION移动方向RETURN/PUBLICINTGETLASTINTTHISIDX,INTDIRECTIONINTNEXTIDXGETNEXTTHISIDX,DIRECTIONIFNEXTIDX0XINTTHISIDX4YXCHANGETHISIDX,DIRECTIONBREAKCASELEFTFORINTY0Y0YINTTHISIDX4YXCHANGETHISIDX,DIRECTIONBREAK/如果本次滑动有格子移动过,则随机填充新的格子IFMOVEDADDRANDOMITEMHISTORYHISTORYNEWHISTORYSPACELIST,NUMBERLIST,SCOREHISTORYSTACKPUSHHISTORYSYSTEMOUTPRINTLN“历史轨迹压入栈中“HISTORYPRINTLOGIFSPACELISTSIZE0IFNUMBERLISTHASCHANCEOVER/根据参数重绘界面PARAMSPACELIST空白格列表PARAMNUMBERLIST数字格列表PARAMSCORE当前分数/PUBLICVOIDDRAWVIEWSLISTSPACELIST,NUMBERLISTNUMBERLIST,INTSCORESCORETEXTSETTEXTSCORE“GRIDLAYOUTREMOVEALLVIEWSFORINTI0I61342BASEVIEW类介绍在该程序中所有绘图页面都继承的BASEVIEW类,BASEVIEW类继承了SURFACEVIEW,并实现了SURFACEHOLDERCALLBACK接口和RUNNABLE接口。SURFACEVIEW继承自VIEW,但它与VIEW不同VIEW是在UI的主线程中更新画面,而SURFACEVIEW是在一个新线程中更新画面。我们不可能写一个方法让主线程自己运动。VIEW的特性决定了其不适合做动画,因为如果更新画面时间过长,那么主UI线程就会被正在画的函数阻塞。所以ANDROID中通常用SURFACEVIEW显示动画效果。在SURFACEVIEW中提供了GETHOLDER方法,SURFACEVIEW中一般通过使用SURFACEHOLDER类来控制CANVAS在其SURFACE上的操作。根据JAVA语言的抽象特点,BASEVIEW类在实现父类方法也抽取了所有视图的共同变量和共同方法,不仅保证了整个程序的一致性,也增加了可读性和扩展性。该类的变量有14PROTECTEDINTCURRENTFRAME/当前动画帧15PROTECTEDFLOATSCALEX/背景图片的缩放比例16PROTECTEDFLOATSCALEY17PROTECTEDFLOATSCREEN_WIDTH/视图的宽度18PROTECTEDFLOATSCREEN_HEIGHT/视图的高度19PROTECTEDBOOLEANTHREADFLAG/线程运行的标记20PROTECTEDPAINTPAINT/画笔对象21PROTECTEDCANVASCANVAS/画布对象22PROTECTEDTHREADTHREAD/绘图线程23PROTECTEDSURFACEHOLDERSFH24PROTECTEDGAMESOUNDPOOLSOUNDS25PROTECTEDMAINACTIVITYMAINACTIVITY26该类的方法有27/视图改变的方法28PUBLICVOIDSURFACECHANGEDSURFACEHOLDERARG0,INTARG1,INTARG2,INTARG329/视图创建的方法同时初始化不同手机的分辨率30PUBLICVOIDSURFACECREATEDSURFACEHOLDERARG031SCREEN_WIDTHTHISGETWIDTH/获得视图的宽度32SCREEN_HEIGHTTHISGETHEIGHT/获得视图的高度33THREADFLAGTRUE/视图新建时就开启进程3435/视图销毁的方法36PUBLICVOIDSURFACEDESTROYEDSURFACEHOLDERARG037THREADFLAGFALSE/视图销毁时关闭这个进程3839/初始化图片资源方法40PUBLICVOIDINITBITMAP41/视图销毁前释放资源42PUBLICVOIDRELEASE43/绘图方法,所有的绘图过程都在这个方法中实现44PUBLICVOIDDRAWSELF45/线程运行的方法46PUBLICVOIDRUN47/SET方法能够在该对该方法的进程起到停止的作用48PUBLICVOIDSETTHREADFLAGBOOLEANTHREADFLAG49THISTHREADFLAGTHREADFLAG5044主界面的功能实现界面是呈现给用户的,一个界面呈现的友好性会决定用户是否会接受该系统,对于ANDROID系统而言,界面的友好布局,信息的简单明了都至关重要。实现主界面的是视图包下READYVIEW类,为了整个程序的统一性和可读性,在实现主页面视图时用的是绘图技术实现,没有使用安卓的布局页面。该视图中有三个按钮,分别是开始游戏、设置游戏和退出游戏,在设置游戏中可以关闭和开启声音。主界面是所有页面的中心页面图示效果如图42图42系统主界面该类的变量有部分变量省略51PRIVATEFLOATFLY_X/图片的坐标52PRIVATEBOOLEANISBTCHANGE/按钮图片改变的标记53PRIVATESTRINGSTARTGAME“开始游戏“/按钮的文字54PRIVATEBITMAPTEXT/文字图片55PRIVATEBITMAPBUTTON/按钮图片56PRIVATEBITMAPBUTTON2/按钮图片57PRIVATEBITMAPPLANEFLY/飞机飞行的图片58PRIVATEBITMAPBACKGROUND/背景图片59PRIVATERECTRECT/绘制文字的区域绘图代码如下60CANVASSFHLOCKCANVAS61CANVASDRAWCOLORCOLORBLACK/绘制背景色62CANVASSAVE63CANVASSCALESCALEX,SCALEY,0,0/计算背景图片与屏幕的比例64CANVASDRAWBITMAPBACKGROUND,0,0,PAINT/绘制背景图65CANVASRESTORE66CANVASDRAWBITMAPTEXT,TEXT_X,TEXT_Y,PAINT/绘制文字图片67IFISBTCHANGE/当手指滑过按钮时变换图片68CANVASDRAWBITMAPBUTTON2,BUTTON_X,BUTTON_Y,PAINT69ELSE70CANVASDRAWBITMAPBUTTON,BUTTON_X,BUTTON_Y,PAINT71IFISBTCHANGE272CANVASDRAWBITMAPBUTTON2,BUTTON_X,BUTTON_Y2,PAINT73ELSE74CANVASDRAWBITMAPBUTTON,BUTTON_X,BUTTON_Y2,PAINT75IFISBTCHANGE376CANVASDRAWBITMAPBUTTON2,BUTTON_X,BUTTON_Y3,PAINT77ELSE78CANVASDRAWBITMAPBUTTON,BUTTON_X,BUTTON_Y3,PAINT79/开始游戏的按钮80CANVASDRAWTEXTSTARTGAME,SCREEN_WIDTH/2STRWID/2,BUTTON_YBUTTONGETHEIGHT/2STRHEI/2,PAINT81/退出游戏的按钮82CANVASDRAWTEXTSETGAME,SCREEN_WIDTH/2STRWID/2,BUTTON_Y2BUTTONGETHEIGHT/2STRHEI/2,PAINT83CANVASDRAWTEXTEXITGAME,SCREEN_WIDTH/2STRWID/2,BUTTON_Y3BUTTONGETHEIGHT/2STRHEI/2,PAINT84CANVASSAVE85/飞机飞行的动画86CANVASCLIPRECTFLY_X,FLY_Y,FLY_XPLANEFLYGETWIDTH,FLY_YFLY_HEIGHT87CANVASDRAWBITMAPPLANEFLY,FLY_X,FLY_YCURRENTFRAMEFLY_HEIGHT,PAINT88CURRENTFRAME89IFCURRENTFRAME390CURRENTFRAME091CANVASRESTORE主界面中有三个按钮分别为开始游戏,设置游戏,退出游戏,每个按钮都是通过PUBLICBOOLEANONTOUCHEVENTMOTIONEVENTEVENT方法实现监听,当按下该按钮时,该监视器将触发点击事件,通过点击事件中的横竖坐标确定用户点击的那个按钮,从而选择向MAINACTIVITY发送不同的的信息。消息规则如下92PUBLICSTATICINTDIR_LEFT_UP193PUBLICSTATICINTDIR_RIGHT_UP294PUBLICSTATICINTDIR_LEFT_DOWN395PUBLICSTATICINTDIR_RIGHT_DOWN496PUBLICSTATICINTDIR_LEFT597PUBLICSTATICINTDIR_RIGHT698PUBLICSTATICINTTO_MAIN_VIEW799PUBLICSTATICINTTO_END_VIEW8100PUBLICSTATICINTEND_GAME9101PUBLICSTATICINTSET_GAME10102PUBLICSTATICINTREADY_GAME11103PUBLICSTATICINTSOUNDS_OPEN12104PUBLICSTATICINTSOUNDS_CLOSE13其中为设置游戏按钮被点击时打到如图43所示,其中监视器代码如下105IFXBUTTON_X196PRIVATEMISSILEGOODSMISSILEGOODS197PRIVATEBULLETGOODSBULLETGOODS198PRIVATEGAM

温馨提示

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

评论

0/150

提交评论