毕业设计(论文)-Android平台下天天爱消除游戏系统的设计与实现.doc_第1页
毕业设计(论文)-Android平台下天天爱消除游戏系统的设计与实现.doc_第2页
毕业设计(论文)-Android平台下天天爱消除游戏系统的设计与实现.doc_第3页
毕业设计(论文)-Android平台下天天爱消除游戏系统的设计与实现.doc_第4页
毕业设计(论文)-Android平台下天天爱消除游戏系统的设计与实现.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

图书分类号密 级:毕业设计(论文)android平台下天天爱消除游戏系统的设计与实现 design and implememtation oflove elimination game on android学生姓名学院名称学号班级专业名称指导教师2015年 6月 6日徐州工程学院学位论文原创性声明本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用或参考的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标注。本人完全意识到本声明的法律结果由本人承担。论文作者签名: 日期: 年 月 日徐州工程学院学位论文版权协议书本人完全了解徐州工程学院关于收集、保存、使用学位论文的规定,即:本校学生在学习期间所完成的学位论文的知识产权归徐州工程学院所拥有。徐州工程学院有权保留并向国家有关部门或机构送交学位论文的纸本复印件和电子文档拷贝,允许论文被查阅和借阅。徐州工程学院可以公布学位论文的全部或部分内容,可以将本学位论文的全部或部分内容提交至各类数据库进行发布和检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。论文作者签名: 导师签名: 日期: 年 月 日 日期: 年 月 日摘要现在社会,科技发展非常迅速,移动和携带方便得到了越来越多人的重视,由于这种趋势,手机游戏也开始发展起来。在移动平台上android系统的占有率超过50%,因此android手机上的游戏发展越来越好。本论文提出一款安卓系统上的的天天爱消除游戏设计,并且对于游戏的具体开发和实现进行了详细的分析。在游戏制作中,主要可以实现用户和手机的人机交互,使用户能够更好的参入到游戏中去。该系统主要分为服务器端和客户端,服务器端以java为开发语言,eclipse为开发环境,sql server 2008为数据管理平台,以tomcat作为服务器,实现服务器的功能,手机端可以实现用户注册、登陆功能、游戏时间限制、游戏计分、查看排名等功能。服务器端针对客户端发来的请求,来操作后台数据库,完成特定的功能。游戏主要采用活泼可爱的风格,细腻、精美的画质。整体画面看起来,让人感觉到欢乐的气氛,游戏的主角是一些很可爱的小动物,这样生动的设计也增加了游戏的乐趣。在设计效果上,这种做法的表现方式比较清新,采用卡通形式的表现,而没有采用过于华丽的表现,使整个游戏透露着萌萌的气息。关键词 android;游戏;eclipse;tomcatabstract nowadays, technology development rapidly, more and more people pay attention to mobile and portable. as this trend go, mobile games have been beginning to develop. on the mobile platform, the android system has more than 50% occupancy rate, so the game on android is getting better and better.thisthesis presents an android system on the love elimination, and make an analysis on its development and implementation.inthe processofgamemaking,we can realize good interaction between user and mobile, and can enable users a better participate in the game.thesystemconsistsof aserver-sideanda client-server-side. in server, thedevelopmentlanguage is java,the developmentenvironment is eclipse,the datamanagementplatform is sql server2008, and usingtomcatasserver. it contains serverfeatures, includingmobileenduserregistration,login,gametime,gamescores,and seerankingfunctions.server-siderequestsfromclients,tooperatetheback-enddatabase,performaspecificfunction.the love elimination game use livelystyle, andtheoverallpictureisfilled with ahappyatmosphere,picture qualityisrelativelydelicateandexquisite.theprotagonistofthegameissettosproutsmallanimals,sodelicateandvividdesigndetailsaddalotoffun.ineffect,thisapproachisrelativelyfreshexpressionsandnottoofancy,but it does notusecartoontypeofpresentation,revealedwiththeamiableatmosphereof thegame.keywords android ; game ; eclipse;tomcatii目录1 绪论11.1 研究的背景11.2 系统开发内容和意义11.3 论文的组织结构12 系统开发工具和相关技术介绍32.1 开发工具eclipse32.2服务器tomcat32.3 数据库sql server 200833 系统总体方案设计53.1 需求分析53.1.1功能需求53.1.2性能需求53.2 系统设计思想53.2.1整体设计思想53.2.2登录注册模块设计63.2.3游戏模块设计63.2.4查看排名模块设计73.3 数据库设计83.3.1 数据库表的设计84 系统详细设计104.1 游戏界面设计104.1.1 注册与登录界面104.1.2 游戏界面114.1.3 排名界面124.2 客户端游戏详细设计124.2.1游戏框架124.2.2 加载游戏动画设计134.2.3 游戏触屏滑动设计144.2.4 位置交换设计154.2.5 消除特效设计154.2.6 跌落设计164.2.7 计分功能174.2.8 游戏升级功能184.3 服务器端游戏详细设计204.3.1 游戏注册及登陆204.3.2 游戏排名215 系统调试与使用方法235.1调试的目的235.2 调试内容235.3 调试过程235.3.1 登录注册模块235.3.2 游戏模块255.3.3 查看排名模块26结论28致谢29参考文献301 绪论1.1 研究的背景随着科技飞速的发展,现在手机的功能已经不再是简单的接打电话、收发短信了。 更多的用户希望在学习工作可以通过手机的方便灵巧和可随身携带的特性,来实现休闲娱乐。因此,为了适应现在手机的快速发展,并且满足众多用户的需求,我们开发出一款天天爱消除游戏。而且此游戏具有很强的交互性和娱乐性,而且还适合各层阶级人士。尽管现在市面上的游戏版本各种各样,可是消除类游戏其市场还是有的。因为它的特殊在于可以让用户在玩这个游戏时爱不释手。因为这个游戏可以实现排名功能,为了让自己排名靠前,用户就会不断的玩游戏,这样对用户来说,刺激性也很强。可以说这个游戏的优势在于它简单而且易行,只要一个手机就可以玩此游戏。对于在外忙碌的人来说,可能不会花费很多的时间在娱乐上,所以大型游戏是基本上行不通的。这样的小游戏就恰好与他们的需求相投。而对于一些儿童、老人,他们也非常适合这种休闲娱乐的游戏。人们可以在公交上、地铁上、吃饭的时候、无聊的时候玩这个游戏,借此达到休闲娱乐的效果,丰富人们的生活。1.2 系统开发内容和意义 天天爱消除游戏的设计与实现的主要模块有:用户登录模块、用户注册模块、用户游戏模块和查看排名模块。用户登录模块:正确登录玩游戏功能、登录错误提醒功能。用户注册模块:用户输入正确信息成功注册、用户名已存在无法注册功能、用户信息输入不全无法注册功能。用户游戏模块:用户滑动手机屏幕进进行消除游戏,游戏限时功能、游戏结束跳到游戏结束查看分数功能。查看排名模块:查看所有用户排名及分数功能。在如今社会,人们的学习压力、工作学习压力越来越大,生活节奏也原来越快,大多数人都没有足够时间去休闲娱乐、放松自己,这款android手机游戏让我们可以随时随地的享受游戏,娱乐自己,让自己从繁重的生活中解脱出来,从而身心得到放松,让人的精神变得越来越好。天天爱消除游戏的主界面美观,让人感觉赏心悦目,这样可以提高玩家对游戏的兴趣。游戏的整个模块很容易让人理解而且容易操作,这样可以给玩家一个很好的游戏环境,放松玩家的大脑,从而达到精神放松。让人的生活更加丰富,从而也为人的精神健康带来了很大的帮助。1.3 论文的组织结构本论文是对系统的介绍和论述。绪论部分主要是提出该系统开发的背景及意义,然后从系统的开发平台、系统使用的技术以及涉及的开发技术,进一步来对系统的需求进行分析以及对系统用到的数据库进行分析和设计,紧接着是对系统设计的每个模块进行详细的界面设计和代码实现,最后就是对整个系统模块的测试和测试结果进行分析。论文的具体安排如下:第一章:概述系统的开发背景以及开发意义。第二章:介绍系统的开发平台所使用到的工具以及相关算法。第三章:介绍本系统的总体设计框架和功能模块,其中包括系统的需求分析、每个模块的设计还有我们对数据库的设计。从系统希望达到的效果以及系统中处理错误信息的方式两个方面进行介绍。第四章:介绍系统的具体设计方案,详细的介绍界面设计以及代码算法的设计。第五章:测试系统的各个模块,包括功能测试和异常测试,并且针对测试所得到的结果进行分析和处理。2 系统开发工具和相关技术介绍2.1 开发工具eclipseeclipse 是基于java的可扩展的开发性平台,而且它的源代码是开放的。就eclipse自身来说,它可以看做是一个框架或者说是一组服务,通常我们可以在eclipse开发环境中插入一些插件组件来构建自己想要的开发环境。不光如此,eclipse还附带了很多标准的插件,其中包括java开发工具。eclipse的平等性和一致性并不会仅仅局限在java开发工具中。虽然eclipse开发环境是用java语言所开发出来的,然而它的用途并不会仅仅用于java语言,现在为止,它已经支持的插件有很多,如android、php、c/c+等编程语言的插件已经被广泛使用。而本论文天天爱消除游戏就是使用了基于android编程语言的插件。websphere studio workbench,ibm公司的,是基于eclipse的应用程序最杰出例子,它组成了ibm 在java开发工具系列中的基础部分。例如,websphere studio application developer 增添了对于xml 、servlet、web、jsp服务和数据库访问的支持。而本天天爱消除游戏的的服务器端就采用的servlet技术。通过servlet技术来完成对数据库(sql server 2008)的访问。2.2服务器tomcattomcat是现在比较流行的web服务器,是一个不收费的,而且源代码开放的热门服务器。是一个servlet容器,而且是属于轻量级的服务器。在小型或者中型的系统或者并发访问用户不是特别高的场合使用频繁。tomcat部分东西是服务器apache扩展而来,但是它自己可以独立运行也是可以,当我们运行tomcat的时候,它实际上是作为一个apache独立的进程,然后单独运行的。tomcat现在最新的版本是8.0的版本。新增了一些功能,如特高了日志性能,当多个应用打包时,可以先打包成jar包再打成一个总的war包放在里面。其支持servlet3.1、java websocket 1.0和jsp2.3。只需在下载tomcat,再配置相应的环境变量,就会顺利的运行。2.3 数据库sql server 2008sql server 2008是在microsoft的数据平台上发布,可以组织和管理很多的数据。它存储数据的类型多种多样,例如可以存储结构化文档,同时还可以存储半结构化或者无结构化的文档。数据存入数据库中后,就可以对这些数据来进行增删改查,搜索等操作。数据存储的设备也是多种多样的,例如可以存储在桌面计算机,移动设备,或者说是数据中心最大的服务器。它只需要来控制数据,不用担心数据到底存储在什么地方。sql server 2008的优势主要为:可信任的使得公司有很高的可靠性、可扩展性和安全性来运行他们最关键的任务。高效的让公司降低开发和管理数据设施所需时间和成本。 智能的提供全面的平台,用户需要时,发送观察和信息给他们。3 系统总体方案设计3.1 需求分析3.1.1功能需求1.用户注册及登录新用户登录游戏,必须先注册用户,用户名及密码必须为6-10个字符,若注册的用户名已经存在,则提示已经存在,注册失败。老用户用自己的用户名及密码登录成功后即可开始游戏。2.游戏需求游戏时间是有限制的,在游戏中,用户通过移动小动物来实现消除,消除动物都会有相应的分数,在游戏中,只要找到3个相同的小动物就能进行消除,但是如果你能够同时消除4个甚至5个相同的动物,当然就会相应获得更高的分数。游戏刚开始为5*5的图片,当分数达到一定程度的时候,就会变成7*7的布局,当游戏继续,分数更高时,会变成9*9的布局,是游戏更具吸引力。3.查看排名游戏结束,跳到游戏结束界面,用户可以看到自己本次游戏得分,同时,还可以查看用户排名。3.1.2性能需求 要求此app可以在当前主流的android终端上稳定、流畅的运行。3.2 系统设计思想3.2.1整体设计思想此游戏主要分为三大模块设计,登陆注册模块、游戏模块和查看排名模块。整体结构图如下图3-1游戏整体结构图所示: 图3-1游戏整体结构图3.2.2登录注册模块设计登陆注册模块主要实现登录以及注册功能。注册的时候增加了一些限制,用户名和密码都必须为6-10个字符。注册时候的流程图如下图3-2注册流程图所示。登录时,字符也有限制,必须在6-10个字符。登录的时候,如果用户名存在且密码正确,则进去游戏,如果用户名不存在或者密码错误则不能进去游戏。登录的流程图如下图3-3登录流程图所示。 图3-2注册流程图 图3-3登录流程图3.2.3游戏模块设计 用户登录成功进去游戏后,首先会有加载游戏的动画,然后进入到游戏界面。进入游戏后,会有时间限制,用户可以通过滑动游戏屏幕来操作游戏,如果用户滑动合法,则会触发想用的游戏位置交换特效,然后动物闪一闪消除,上面的小动物下跌下来。当时间到了之后,进入到游戏结束界面。用户游戏的流程图如下图3-4用户游戏流程图所示: 图3-4用户游戏流程图3.2.4查看排名模块设计游戏时间结束,进去游戏结束界面,游戏结束界面有本次游戏的得分,还有查看排名按钮,点击查看排名按钮后,就会看到所有用户的排名信息。查看排名的流程图如下图3-5查看排名流程图所示:3-5查看排名流程图3.3 数据库设计3.3.1 数据库表的设计本系统主要由两张表构成,分别是用户信息表users和用户排名表myallscores,其中用户信息表主要存储用户注册信息,当用户注册成功时,在用户信息表中就会增加相应的用户信息。用户排名表主要存储局域网内的所有用户的最高分。数据表如表3-1所示:表3-1 数据表序号名称用途与约束1users用户信息表2myallscores用户排名表用户信息表中一共有两个属性,用户名username和密码passwd,长度限制为10个字符。其中username为主键。由于本游戏只需存储用户名和密码,并以此来根据用户名实现排名,对于此游戏查看用户信息暂时是不需要的,主要的还是游戏设计方面,所以不需要再增加像性别、年龄等属性。又由于用户名必须有密码,所以密码属性也不能为空,且用户信息表如下表3-2所示:表3-2 用户信息表序号字段名字段说明类型长度null1username用户名char10not2passwd密码char10not用户排名表也是包括两个属性,一个用户名username和一个得分score,两者都不能为空。这张表中只存储用户的最高分,也就是说如果用户如果之前最高分为200,用户又玩了一次游戏,而且本次得分160,比较本次成绩和服务器上存储的最高分,发现低于服务器上的存储的最高分,所以不去更新服务器上的分数。如果本次成绩300分,则会去更新数据库中的分数。用户排名表如下表3-3所示:表3-3 用户信息表序号字段名字段说明类型长度null1username用户名char10not2score得分intnot4 系统详细设计4.1 游戏界面设计4.1.1 注册与登录界面进入到注册界面的时候,输入你想注册的用户名,如果不填,直接点击提交的话,系统就会提示你信息不全,请填写完整;如果填入信息长度不在6-10个字符之内,则会提示长度不对,请重新输入,并且清除editview里面的内容;如果该用户名已经被别人注册过了,系统会提示你用户名已经存在,并且清除editview里面的内容,你需要重新输入。当填写信息完成后,点击提交按钮,用户填写的注册信息就会发送到服务器,然后服务器把用户信息存到数据库中。用户注册界面如下图4-1注册界面、4-2 注册字符长度不对、4-3用户名已存在、4-4注册成功所示。 图4-1注册界面 图4-2 注册字符长度不对 图4-3用户名已存在 图4-4注册成功在登录界面下输入你的用户名和对应的密码,这两个信息室登录必备信息,若为空系统会提示信息不全,用户名和密码填写完整后点击“登录”按钮,就会将用户提交的信息发到服务器端,服务器再将用户信息和数据库中存储的信息进行对比,若存在相应的用户,且密码输入正确,则进入游戏,若用户名不存在,或者用户名存在但密码输入不正确,则登录不上游戏,且服务器会给出相应的错误提醒;若用户名或密码字符长度不在6-10字符之内,则系统提示字符长度不对,无法登陆游戏。登录界面下图4-5登陆界面、4-6密码不正确所示: 图4-5登陆界面 图4-6密码不正确4.1.2 游戏界面 当用户输入正确用户名和密码之后,用户就会进入游戏界面。游戏界面主要分为两大界面。第一个界面就是一个进入游戏的动画,类似缓冲效果的界面;第二个界面就是正式开始游戏的界面,这个界面主要有两部分构成,第一部分是计分部分,随着用户玩游戏,分数会相应的增加。第二部分为游戏的主要界面,也就是有7*7个小动物的界面,用户可以滑动每个小动物,来消除小动物。 进入游戏的动画如下图4-7加载游戏界面所示,游戏主界面如下图4-8所示: 图4-7 加载游戏界面 图4-8 游戏主界面 4.1.3 排名界面当游戏结束,就会跳至游戏结束界面,并且用户可以看到本局游戏的得分。游戏结束界面有两个按钮,一个按钮为再来一局,还有一个按钮为查看排名。点击再来一局,就会再开始一局游戏,而点击查看排名按钮,就会看到局域网内所有玩这个游戏的用户的排名。游戏结束界面如下图4-9所示,查看排名界面如下图4-10所示: 4-9 游戏结束界面 4-10 查看排名界面4.2 客户端游戏详细设计 4.2.1游戏框架本游戏是基于opengl es技术实现的,游戏框架并不是很难,最主要部分是一个activity,一个渲染视图和若干个渲染类对象。游戏一共有五个包,其中在elong.crazylink中存放的是登陆、注册、排名界面、渲染视图、渲染类和一个常量类;在elong.crazylink.control包中存放的是一些控制类,如交换控制类、游戏加载控制类等;在elong.crazylink.core包中存放的是一个控制中心类,也就是核心控制类,将控制画面的所有动作。除此之外,还存放着一个分数控制类,来控制分数的多少;在elong.crazylink.draw包中,存放的是画图类,如画动物的类,画交换动物的类,画分数,画加载动画等;还有一个包就是elong.crazylink.interaction包,在这个包中,只有一个类,就是用户与游戏的交互,即一个触摸滑动事件,也就是判断用户滑动动物的行为。4.2.2 加载游戏动画设计实现游戏加载动画的原理还是不难的,由于人眼总是会有视觉暂留效果,所以如果将很多幅相近并且连贯的图片连续并且快速的播放,这样在人眼看来,就是一个连续的动作,也就是动画。在android中,如果需要实现播放动画效果的时候,可以通过循环调用canvas.draw方法系统方法,也可以通过调用opengl es中的ondrawframe方法。本游戏采用的是opengl es方法。想要实现动画效果,就是实现glsurfaceview.renderer接口内的方法,最重要的就是ondrawframe方法,这个方法大体的原理是可以开起一个线程,在这个线程中会一致调用一个ondrawframe的方法,这样就能实现动画效果。因此ondrawframe的主要作用就是将不同的图片显示出来就可以了。这里我们用十张相近的图片来显示动画效果。当用户登录成功并开始游戏后,在onsurfacecreated()方法中,通inittexture(gl)初始化图片素材,也就是通过一个for循环,循环10次来加载10张图片素材,这些图片素材放在一个数组中。即loadingtextureidi = inittexture(gl, r.drawable.loading_01 + i)。还有crazylinkglsurfaceview这个类会开启一个线程,在这个线程中,通过controlcenter中的画图对象的控制类来控制所画图的位置、图片等参数。在onsurfacecreated()方法中,通过msg.what=controlcenter.loading_start,controlcenter.mhandler.sendmessage(msg),来启动画加载动画。由于它的控制类ctlloading中的run方法中有一个语句mpicid+,由通过getpicid()提供给drawloading画图类的draw方法中的gl.glbindtexture(gl10.gl_texture_2d,textureidcontrol.getpicid()调用,由此来实现画不同的图片的效果。实现加载动画的部分图片如下图4-11 图loading_01.png,4-12图loading_01.png所示:图4-11 loading_01.png图4-12 loading_02.png4.2.3 游戏触屏滑动设计对于游戏中触屏滑动,我们在screentouch 类来设计,如果用户是符合条件的触摸滑动事件,就会以消息的形式通知controlcenter类来做出相应的响应。也就是在可以写一个ontouchevent()方法,在这个方法中,调用screentouch类中的touch(motionevent e)方法,将motionevent e参数传进去。这样游戏的触屏滑动设计就是在screentouch类中实现的了。在screentouch类中,我们通过一个switch语句,来获取这个e的动作,在获取为motionevent.action_down的时候,也就是用户按下屏幕的时候来获取这个时候的坐标,然后通过motionevent.action_move来获取用户的滑动事件,并获取用户滑动的距离来判断用户的行为。这主要的判断方法为:若用户第一次按下的坐标为(x1,y1),而当用户滑动的下一个坐标为(x2,y2),令x3=x2-x1,y3=y2-y1,先来判断到底是x轴上的偏移量比较大还是y轴上的偏移量比较大,所以比较x3和y3的绝对值,若x3绝对比较大,则可判定此滑动事件为x轴上的,由此再来判定x3是大于0还是小于0,若大于0则为touch_direction.right行为。y轴同样。当获取到用户行为时,来判定用户行为是否合法,即是否是最右边坐标然后向右滑动,是最左边左边还向左滑动等,若合法,则记录下当下坐标,和邻居坐标,也就是如果向左滑动,邻居左边及为左边一个图片的坐标。然后通过controlcenter.mhandler把当下坐标和邻居坐标传过去,并通知controlcenter滑动事件,controlcenter来画相应的交换图片等一系列动作。4.2.4 位置交换设计也就是如果向左滑动,邻居左边及为左边一个图片的坐标。然后通过controlcenter.mhandler把当下坐标和邻居坐标传过去,并通知controlcenter滑动事件,controlcenter来画相应的交换图片等一系列动作。此设计算法有点复杂,先来介绍一下控制类ctlexchange,我们假设向上滑动一下记录一下坐标(x1,y1)和(x2,y2),如果滑动幅度过小,也就是说从screentouch类中传来的参数x1=x2,y1=y2,则通过判断,不做任何响应。如果滑动符合规定,由于是向上滑动,所以x1=x2,y1y2,则通过构造方法ctlexchange(int col1, int row1, int col2, int row2),来通过坐标判定为滑动时间,则令mneedmovey = true;也就是需要在y轴上设置交换事件。然后再通过run()方法来改变x1、y1、x2、y2的实时偏移量。然后在drawexchange类中通过调用控制类ctlexchange中的getx1()、gety1()、getx2()、gety2()的方法来获取现在的偏移量,然后通过draw()方法来实现画图。在画图方法中,主要使用堆栈技术。在opengl es中,使用glpushmatrix()和glpopmatrix()方法可以进行堆栈操作。glpushmatrix()表示复制当前矩阵,然后把这个矩阵加到堆栈的顶部;glpopmatrix的意思是扔掉堆栈顶部矩阵。可以这样理解:glpushmatrix()是可以记录下现在的坐标,然后通过一些平移、旋转等做操来实现变换,然后再通过调用glpopmatrix()返回到之前的坐标位置。这样的话,接着我们刚才的向上滑动事件,获取x1,y1坐标的相对偏移量,然后通过gl.glpushmatrix()来记录下当下坐标,再通过gl.gltranslatef(control.getx1()*crazylinkconstent.translateratio, control.gety1()*crazylinkconstent.translateratio, 0f)来在y轴向上平移一点,x2,y2同样在y轴上向下平移一点,通过线程控制最终平移一个图片的单位。这样就实现了最终的交换效果。交换结束就会来判断是否需要消除,消除效果我们下一节再来详细介绍。位置交换的图片如下图4-13交换图片所示。 图4-13 交换图片效果图4.2.5 消除特效设计根据游戏规则,三个动物连成一行时,就会触发消除特效。我们设计的消除特效是动物闪动几次后消失。下面我们就来详细介绍这个消除特效。此功能的控制类为ctldisappear,在这个类的start()方法中,来控制消除的消除效果的开始和结束,在run()方法中可以来控制消除效果的频率。此类中还有一个方法为getcount(),此方法主要在画图类drawdisappear中调用来进一步实现扩频。扩频的意思就是控制此图片可见和不可见的时间,这样用一个线程控制的时候,看起来就有了动画的效果。这样的话就有必要来介绍一下controlcenter类的思想。在这个类中,有一个控制图片状态的7*7的数组mstatus,和另一个7*7的图片内容的数组mpic。mstatus中存放的是每个图片的状态,其中1代表正常画图,2代表交换状态,3代表消除后往下滑落充满空地方的状态,4代表消除特效。在mpic数组中,里面内容为画图的代号如下图4-14图片代号所示,从左到右图片代号分别为1-8,这样的话在画图片的时候只要根据图片代号可以画出相应的图片。 图4-14 图片代号当出现消除特效时,将相应的图片的mstatus设置成4,这样就会根据该消除特效的控制类以及画图类来实现消除特效。下图4-15为消除前图片4-16为特效效果图。 图4-15 消除前图片 图4-16 消除时图片4.2.6 跌落设计当动物消除后,就会触发跌落特效,如果是纵向消除,那么就会连续触发跌落特效,直到所有格子都已经重新填充好动物。跌落完成后,会检测是否需要消除,如果是,又会触发消除特效,周而复始。跌落效果实现的控制类为ctlfill类,在这个类中同样的,有一个start()方法,此方法内只有两个语句mdeltay = 100,mstop = false,第一句话用来控制相对偏移量,因为我们返回的是mdeltay/100.0f,也就是我们返回的将是1,0.75,0.5,0.25和0,当返回0时,控制类结束运行。而在画图类drawfill的draw()方法中,跟交换算法采取了相同的策略,也就是采用glpushmatrix()和glpopmatrix()方法进行堆栈操作。这样通过算法glpushmatrix()gltranslatef(0f, control.gety()*crazylinkconstent.translateratio, 0f),drawanimal.draw(gl, witch, col, row),gl.glpopmatrix(),来实现下跌。上述仅仅实现了一个图片的下跌效果,若实现连续的下跌,也就是如果消除的是y轴上的连续几个动物,就需要连续的下跌。这个的实现实在主控制类controlcenter中的isneedfill()方法,也就是是否还存在mpic=0的图片,也就是图片为空的情况,若存在就继续调用下跌的方法来实现下跌效果。下跌效果图如下图4-17开始下跌、4-18下跌一步、4-19下跌两步、4-20下跌完成所示。 图4-17开始下跌 图4-18下跌一步 图4-19下跌两步 图4-20下跌完成4.2.7 计分功能当动物消除后,都会有相应的分数作为奖励。本游戏的分数奖励为:消除三个动物奖励50分,消除4个动物奖励200分,消除5个动物奖励500分,消除6个动物奖励2000分,消除7个动物奖励5000分等等。为了增加游戏的趣味性,又增添了一些分数加倍功能。也就是说,如果用户每次滑动屏幕都可以成功的实现消除动物,就会实现分数加倍,实现第二次消除,就会在原有基础分数上乘以相应的倍数。举个例子来说,如果用户第一次滑动屏幕实现消除三个动物,就会得到50分,然后用户第二次又实现消除动物四个,那么第二次本来应得分数为100分,加上原有的50分就是150。然而有了分数奖励之后,第二次消除四个动物得到的分数就会乘以2,也就是100*2,是200分,这样一共得分就是250分,以次类推,第三次消除可以乘以2的奖励。然而,用户中间有一次操作没有实现消除动物,就会将加倍消除,重新开始,换句话说就是重新回到一倍开始累加。该功能的算法实现也分为画图部分和控制部分,然而该控制部分跟前面不太一样,因而放在了另一个包elong.crazylink.core内。分数控制部分是score类,在这个类中实现基础分数功能的是award()方法,在这个方法中通过通过switch来控制消除几个动物相应的得分。在increase()方法中通过一条语句mdouble+,来实现加倍功能,在reset()方法中通过mdouble=0来实现当用户滑动屏幕无消除现象时的删除加倍功能。分数的画图部分在drawscore类中,由于分数显示为9为,所以在画图时如果50分,则在前面再加7个0,这主要通过一个while循环实现,从而实现分数功能。分数功能的显示如下图4-21初始化分数、4-22消除3个动物分数、4-23再次消除3个动物分数所示 4-21初始化分数 图4-22消除3个动物分数 图4-23再消除3个动物分数 4.2.8 游戏升级功能游戏开始界面为一个5*5的界面,当用户分数超过200分时,就会升级为7*7的界面,当分数超过15000分时,就会再升级为9*9的界面。此功能的实现思想是:将界面直接设置成一个9*9的数组模式,只是在刚开始时,只显示5*5部分,再后来就是现实7*7部分,然后再全显示。在初始化动物时,再init()方法中声明一个局部变量,int num = -100,mpicij = num+,mstatusij = 0,然后初始化这个数组mpicij,这样可以保证这个数组中的值不一样,防止开始时就出现消除现象。然后在crazylinkconstent类中,声明一个静态成员变量number,初始值设为5,代表现在是5*5的数组。在初始化动物的方法init()中,有一个判断的switch语句,来判断类crazylinkconstent里面的number属性。若为5,则在x轴上我们第一、第二和最后一个最后第二个不用显示,y轴上也是第一、第二和最后一个最后第二个不用显示。也就是说只需要初始化mpicij数组的i从2到6,j也是从2到6的数组内容。同样的当number为7时,初始化mpicij数组的i从1到7,最后当number为9时,就需要初始化整个mpicij数组,也初始化数组的就是i从0到8的信息。这样的话,在触摸事件类screentouch中的touch()方法中,判断crazylinkconstent类中的number变量。如果number为5的话,x轴上,由于此时mpicij数组的i只有在2到6上才有效,也就是说触摸别的地方是无效的,所以这里只需判断此时触摸的地方i是否在2到6上即可。y轴与x轴原理相同。当x轴的i在2到6范围内,y轴也在范围内时,当用户触摸结束,也就是当motionevent.action_up时,就会去判断该触摸事件是否合格,判断是否合格的时候,只需判断是不是在最左边还往左边滑动,或者在最右边还往右边滑动,在最上面还往上面滑动,在最下面还往下面滑动。也就是说判断x为2时向左滑,或者x为6时向右划等。当此次判断也正确才会出发滑动事件。在全局控制中心controlcenter类中的draw()方法中,在每次draw完之后都会判断分数是否大于200,或者是否大于15000,其主要代码实现如下:if (crazylinkconstent.number =5&score.getscore() = 200) crazylinkconstent.number = 7; init();else if (crazylinkconstent.number =7&score.getscore() 15000) crazylinkconstent.number = 9;init();升级功能如下图4-24初始化5*5图片,4-25升级7*7图片,4-26升级9*9图片所示: 图4-24初始化5*5图片 4-25升级7*7图片 4-26升级9*9图片4.3 服务器端游戏详细设计4.3.1 游戏注册及登陆本游戏是用java的servlet实现服务器功能,通过servlet来操作后台数据库,也就是一个sql server2008数据库,再将servlet的java代码打个war包放在tomcat里面,就可以实现服务器的功能了。服务器类如下图4-27服务器整体类图所示:图4-27服务器整体类图由上图可以看到,我们在服务器端,主要分为5个包,login包中存放的就是登陆的信息,而register包中存放的就是注册信息。对于注册以及登陆的设计,在服务器端会通过tomcat来获取用户的请求信息,然后完成相应的注册以及登陆。登陆的主要实现代码是通过从sql server2008数据库中获取用户信息,若没有对应信息则返回相应数据。规定若用户名和密码都输入正确则返回1,若用户名正确密码不正确,返回2,若用户名不正确则返回3。通过login类中的doget()方法实现,同时规定http协议的parameter部分为user=username+“_”+passwd,因此当用浏览器输入地址7:8080/crazylink/login?user=caicai_123456时,由于用户名和密码是存在的,因此返回1,若输入user=caicai_1234567,由于密码错误,则返回2。当输入user=caicaic_123456,由于用户名不存在,则返回3。输入对应返回见下图4-28正确输入、4-29密码错误、4-30用户名错误所示。图4-28正确输入图4-29密码错误图4-30用户名错误注册与登陆类似,主要是向数据库表users中写数据,若用户名已经存在则返回1,若注册成功则返回2。这个过程中,主要是在rejester包中实现的。在类register_info中,当用户通过服务器注册信息时,会调用register()方法,并触底两个参数,分别是用户名和密码。当此用户名已经存在,也就是通过调用login可以返回可以登陆,就是用户名已经存在,注册失败。而当无法登陆,也就是说不存在这样的用户时,就可以注册。然后就会向数据库中插入相应的用户信息。主要的代码实现如下:if (log.login(name, passwd) = 1 | log.login(name, passwd) = 2) return 1;try class.for

温馨提示

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

评论

0/150

提交评论