计算机科学与技术-基于安卓的2048益智游戏的设计与实现_第1页
计算机科学与技术-基于安卓的2048益智游戏的设计与实现_第2页
计算机科学与技术-基于安卓的2048益智游戏的设计与实现_第3页
计算机科学与技术-基于安卓的2048益智游戏的设计与实现_第4页
计算机科学与技术-基于安卓的2048益智游戏的设计与实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

[15]。成功打开后,如图2-4所示:图2-4模拟器界面图

第3章系统的需求分析和概要设计3.1系统需求分析3.1.1系统功能需求分析系统主要有以下功能模块:用户登陆、关卡选择、呈现游戏界面、重新开始游戏、当前分数和最高分数、游戏帮助、排行榜等。用户登陆是游戏的初始界面,玩家首先需要输入用户名和密码注册属于个人的专属帐号,进入游戏主界面前需要输入用户名和密码,验证正确后方可进入游戏主界面。等级选择,玩家单击这个按钮,游戏就会从主界面切换到等级选择界面。如果玩家选择了对应的等级,首先要判断等级是否打开。等级没有打开的情况下,显示对话框,通知玩家等级没有打开。等级已经打开的情况下,游戏进入主界面,开始等级。所谓重新开始游戏,是指在玩家不能应对现在的问题的情况下重新开始游戏。如果玩家处于不同级别,保持当前关卡并重新启动游戏。当新手在玩游戏时不知道游戏玩法时,游戏帮助是一个提醒。游戏界面是在主界面正中生成一个4×4矩阵,并在矩阵中随机生成两张“2”或“4”牌。现在的分数和最高的分数表示在这个回合中玩家取得的分数和历史最高的分数。现在的分数超过最高分数的情况下,最高分数表示现在的分数。综上需求可做出系统功能图,如图3-1所示。图3-1系统功能图3.1.2游戏基本规则游戏开始后,通过使画面滑动来控制卡片的移动方向。卡片在滑动时使用相同的两张卡片,如果中间没有不同的卡,两张卡在滑动过程中结合,显示为两张卡片的合计。相同的卡片有3张的情况下,只合并滑动方向的2张卡。如果在滑动方向上有两张相同数值的卡片与之相邻的是一张其数值为其两倍的卡片,则只合成两张相同且相邻的两张卡片。3.2系统概要设计3.2.1系统流程的设计点击游戏图标进入登陆页面。一旦玩家注册了一个帐户,输入用户名和密码,进入主游戏界面,开始正常启动。从主界面开始,玩家可以重新启动游戏,显示帮助,显示排名,显示关卡选择界面。当玩家单击重新启动开始按钮时,会弹出玩家可以选择的对话框。当玩家选择确定时将游戏继续。当玩家选择取消时,返回游戏界面。按钮时会弹出等级选择界面,当玩家点击对应的等级时,最高分会决定等级是否打开。如果没打开,对话框就会显示出来,显示“在此级别未打开”,如果打开了会显示与等级界面相关联的所有卡片。当您按下启动界面上的返回按钮时,您将退出游戏。游戏的流程图如图3-2所示:图3-2(a)系统流程图图3-2(b)系统流程图3.2.2系统模块设计从总体上看,该系统分为三个模块:“菜单设计”,“界面设计”和“算法设计”。(1)菜单设计菜单显示在游戏主界面下方,有“重新开始”,“选择关卡”,“排行榜”,“游戏帮助”四个模块,如图3-3所示:图3-3菜单设计(2)界面设计界面设计有“登陆界面设计”,“游戏界面设计”,“关卡界面设计”,“排行榜界面设计”四个部分,如图3-4所示:登陆界面(b)游戏界面(c)关卡选择界面(d)排行榜界面图3-4界面设计(3)算法设计1.当滑动方向上两张卡片数值相等时,滑动后卡片将移动到边缘,合成一张为合成前数值两倍的卡片,并随机在空白格生成一张“2”或“4”卡片,如图3-5所示:图3-5简单卡片合成2.当滑动屏幕向可以碰撞的方向上有两张卡片相同且有一张卡片是它们的总和并在同一方向时,相同一张卡片将移动到不能移动的位置,并生成一张为数字2倍的卡片,但合成卡片不会与数字2倍的卡片合并号码,并且生成一个“2”或“4”的卡片,如图3-6所示:图3-6复杂卡片合成3.当界面上没有空位并且两两相邻的卡片不相同时游戏结束。如图3-7所示:图3-7游戏结束

第4章系统实现4.1游戏框架搭建(1)AnimLayer类:游戏动画类。主要负责创建动画和游戏移动动画。(2)Card类:游戏卡片实现类。主要负责游戏卡片,卡片数字和样式的实现。(3)Config类:游戏关卡配置类。主要负责储存游戏关卡等级信息。(4)GameView类:游戏中最主要的类。游戏中的操控以及相应的事件都包含在该类中。(5)LoginActivity类:游戏登陆实现类。主要负责实现用户登录注册功能。(6)MainActivity类:游戏主要功能实现类。主要负责实现重新开始、选择关卡、排行榜、游戏帮助、当前分数、最高分数功能。4.2登陆界面的实现游戏的登录界面存储在login_main.xml中,其主要逻辑存储在LoginActivity中。用户信息使用了安卓4大存储中的SharedPreferences,在键值对中存储私有原始数据。数据的键为SP_KEY_USERINFO,并存储json格式的用户数据。当玩家输入用户名和密码与存储的数据相等时会让页面跳转到游戏界面开始游戏,如图4-1所示:图4-1开始界面4.3游戏界面的实现4.3.1游戏布局的实现(1)游戏的主布局存放在activity_main.xml中。(2)在GameView类中,通过自行设计实现了一个继承于GridLayout网格布局的布局实现。其三个构造方法都要实现初始化界面的操作,其中定义了一个二维数组用来记录GameView初始化的16个卡片类。使用了一个安卓内部的point对象用来构建空点的数组。(3)Card类中其继承自FrameLayout祯布局,其中通过构造方法生成了一个Label,卡片的背景为label的背景,卡片显示的文字为label显示设置的文字。默认的卡片数值为0。并通过卡片的数值设置卡片的背景颜色。(4)游戏的主主布局是一个4×4的网格布局,其中游戏初始化时就已经有了16张卡片,并且每张卡片的数值均为0。4.3.2游戏的初始化(1)游戏在MainActivity类中进行初始化,其中oncreate方法中分别初始了下方4个选择按钮和游戏主要布局,包括最高分以及分数计数的布局。布局初始化时,执行GameView中的构造方法。(2)在GameView中,游戏初始化时执行InItgameview方法,其主要调用了图4-2中的几个方法,其中添加卡片方法,通过在x和y方向向上分别遍历,通过newcard对象生成卡片,并将卡片的初始值设置为0,将卡片添加到卡片的二维数组中。其中开始游戏方法,主要执行图4-3中四个过程。主界面实现效果图如4-4所示。图4-2初始化主要方法图4-3开始游戏方法步骤图4-4主界面4.4游戏滑屏卡片移动的实现当玩家移动屏幕时,玩家的指头滑行方向主要由initGameView方法来监控。先知道起始坐标和结束坐标,然后比较结束坐标和起始坐标之间的差值,以确定屏幕的滑动方向。在评估了玩家的滑轨之后,通过调用swipeLeft、swipeRight、swipeUp、swipeDown方法来移动卡片。下面以向左回滑动为例进行讲解,首先通过两个for循环从行到列进行遍历,当遍历到第1行第1个格子的时候,以第1个格子为起点,从第2个格子进行遍历,如果其后的格子的数字大于0,在此条件下,如果第1个格子的数字小于等于0。则需要移动第2个格子。并且将第1个格子的值设置为第2个格子的值,第2个格子的值清零。此时继续固定这个格子。并进行下次检查。如果第1个格子与第2个格子的值相等,则设置第1个格子的值为原来的两倍。并且设置第2个格子的值为0。并且在此处调用添加成绩的方法,添加的数值为当前第1个格子的数值。后续循环以此类推。其他向上,向下向右滑动操作依次类推。其中设置了一个参数flag:merge合并,如果一旦发生了数值合并,就要随机添加一个新的格子数,并且在此时检查游戏是否成功或者是结束(调用check方法)。代码如图4-5所示,实现效果如图4-6所示。图4-5swipeLeft方法代码图4-6卡片移动4.5计分与关卡的实现4.5.1游戏计数的实现(1)在GameView内中可以调用主活动Mainactivity中的添加成绩方法。(2)在MainActivity类中设置了添加成绩,存储成绩和显示成绩的几个方法。并且添加了存储最高成绩,显示最高成绩,获得最高成绩的方法。最高成绩的存储使用了安卓4大存储中的SharedPreferences,在键值对中存储私有原始数据。4.5.2游戏关卡的实现不同的游戏关卡有不同的起始卡片界面,解锁相应的关卡等级需要达到与之要求的最高分数。其实现步骤如下:(1)通过在config中存储数组常量,来存放游戏的等级信息。通过创建一个二维数组,按照行和列的方式,分别存储每一个位置的数字数值。如图4-7所示。图4-7数组常量(2)游戏关卡等级通过创建一个buttongroup,在里面存储所有的button,通关判断最高分的数值开通相应的关卡。如图4-8所示。图4-8游戏关卡代码关卡实现效果如图4-9所示:图4-9关卡功能4.6游戏排行榜的实现游戏的排行榜数据也使用了安卓4大存储中的SharedPreferences,在键值对中存储私有原始数据。数据的键为SP_KEY_SORT,并存储json格式的排行榜数据。排行榜数据在每次退出游戏时,通过调用MainActivity其中的ondestroy方法。在其中进行存储,先通过获得游戏排行榜数据方法,获得一个Jsonarr数组,通过创建一个jsonobject,在object中分别存储当前游戏者的用户名,成绩。并将其存放到原来的数组中,转化为json格式的字符串,按照数据的键进行存储。每次获取排行榜数据,点击排行榜时获取新的排行榜数据,取得原来的节省格式字符串,并且将其转化为节省object格式,通过创建一个map数组获取所有的排行榜数据。排行榜的界面显示,布局存储在listview中。通过创建一个listview的数据适配器,向其中填放数据,并弹窗显示最终的排行榜数据。实现效果如图4-10所示。图4-10游戏排行榜

第5章系统测试5.1测试目的和意义系统测试用于检测错误的程序执行。一个成功的测试是检测出没有搜寻到的错误。测试的目的是用最小的精力发现各种潜在的错误和缺陷。系统测试是保证系统质量和可靠性以及系统分析、设计和开发的最终检查的重要环节。根据测试的概念和目的,提出了测试系统应遵循的基本原则。测试需要尽快实行并继续进行。一旦开发完成,应用系统就不会被测试。由于原始问题的复杂性、发展阶段的多样性以及参与者之间的协调性,所有发展阶段都可能出现错误。因此,为了尽快纠正错误,需要在整个开发阶段进行测试。5.2测试方法此次测试方法采用安卓模拟器测试,在Androidstudio中创建名为Nexus5X、Android9.0系统、x86CPU的安卓模拟器,并运行2048游戏的APK。运行成功后对系统主要模块进行测试。测试结果如下:1.用户的登陆和注册:测试要求:在登录注册界面中输入用户名和密码,并且要求密码以密文形式显示,注册后并登陆能进至游戏主界面。测试结果如图5-1所示。图5-1登录注册测试2.划屏卡片移动:测试要求:分别向上下左右四个方向滑动屏幕,每次划屏都能生成新卡片,合成两张数字相同卡片时能生成一个两倍数字卡片并在分数框中加分。测试结果如图5-2所示。图5-2划屏卡片移动测试3.游戏关卡:测试要求:点击选择关卡按钮出现关卡列表,通过判断最高分开启相应的关卡,并能加载相应关卡的卡片。测试结果如图5-3所示。图5-3游戏关卡测试4.排行榜:测试要求:点击排行榜显示每个用户结束游戏时的分数并做排序,最高分为第一名分数。测试结果如图5-4所示。图5-4排行榜测试5.3测试用例通过以下的测试用例进行对游戏其他各个功能模块进行测试并加以修改。登录模块测试用例如表5-1所示:表5-1登录测试用例测试编号测试输入期望结果实际结果001测试用户名输入“abc”,密码输入“123”,点击注册按钮弹出提示框显示“注册成功,请登陆!”用户名输入“abc”,密码输入“123”,点击注册按钮后,弹出提示框显示“注册成功,请登陆!”。002测试用户名输入“abc”,密码输入“123”,点击登陆按钮跳转到游戏主界面并弹出提示框显示“欢迎您,abc!”用户名输入“abc”,密码输入“123”,点击登陆按钮后跳转到游戏主界面并弹出提示框显示“欢迎您,abc!”。主界面功能模块测试用例如表5-2所示:表5-2界面功能测试用例测试编号测试输入期望结果实际结果001测试点击重新开始按钮游戏重新开始当前游戏关卡点击重新开始游戏按钮后游戏重新开始当前游戏关卡。002测试点击游戏帮助按钮弹出信息框显示游戏规则与操作说明点击游戏帮助按钮后弹出信息框显示游戏规则与操作说明。003测试点击排行榜按钮弹出信息框显示等级、用户名、分数,并按分数排序点击排行榜按钮后弹出文本信息框显示等级、用户名、分数,并按分数排序。004测试点击选择关卡按钮弹出列表框有多个关卡可供选择并按难度排序,只有最高分达到要求方可解锁相应关卡点击选择关卡按钮后弹出列表框有多个关卡可供选择并按难度排序,只有最高分达到要求方可解锁相应关卡。检测游戏结束/通过测试用例如表5-3所示:表5-3游戏结束测试用例测试编号测试输入期望结果实际结果001测试当格子全满且相邻的格子没有相同数字弹出提示框提示游戏结束并可选择重新开始游戏当格子全满且相邻的格子没有相同数字时弹出提示框提示游戏结束并可选择重新开始游戏。002测试在关卡模式下任意一个格子数值达到10倍开局最大数值弹出提示框提示“你赢了”并可选择重新开始游戏在关卡模式下任意一个格子数值达到10倍开局最大数值时弹出提示框提示“你赢了”并可选择重新开始游戏。

第6章总结与展望6.1论文总结本文介绍了Android平台上开发2048小游戏的设计与实现。先是对安卓开发平台优点与特点进行分析,然后对整个系统框架进行精密设计和对其功能逐步实现,最后在安卓模拟器上成功测试整个系统。本次毕业设计至此接近尾声,通过此次毕业设计令我收获良多,初期起步阶段对安卓开发一筹莫展,令我十分困惑,通过花费大量的时间精力进行阅读文献资料,对安卓开发语言有疑点的地方积极请教老师与同学,并在他们的帮助下搭建了好开发平台并设计游戏框架,对此我懂得了如何设计好一个良好的界面,也明白了如何设计好一个精简的游戏算法,在实现游戏功能的过程中遇到很多意料之外的困难,对此唯有不断的思考、反复的测试、与他人交流找出自己的错误并加以改正,明白了实事求是的重要性和纸上得来终觉浅得知此事要躬行的大道理,通过毕业设计后,我对安卓开发有了更加深入的了解,这对我今后从事计算机开发行业奠定了良好的基础。6.2展望该系统的开发为用户提供了一个优秀的娱乐交流平台,但仍有许多领域需要进一步改进和研究。(1)新模式选择这个游戏只有数字。当玩家经常面对数字时,他们会感到疲劳。由于显示的卡片可以填充中文字符、图像等,玩家的选择范围更广。当他们感到疲劳的时候,有很多方法可以改变他们的情绪。(2)难度游戏设计这个游戏里玩家可以有很多时间来思考。在以后的阶段,可以设想一个时间有限的说明。当倒计时结束玩家将不能移动,此时游戏结束,增加游戏难度。

参考文献黄彬华.Android手机/平板电脑程序开发教练[M].北京:水利水电出版社,2012:58-65.李嘉诚.Android应用程序开发研究与应用[J].软件导刊,2014,13(11):65-67.崔浩然.基于Android平台的手机游戏的设计与实现[D].西安科技大学,2011.王亮.基于Android平台冒险类手机游戏的设计与实现[D].北京工业大学,2013.孙宏明.Android手机程序设计入门、应用到精通[M].北京:中国水

温馨提示

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

评论

0/150

提交评论