《基于ANDROID系统的游戏APP设计毕业论文.doc》由会员分享,可在线阅读,更多相关《基于ANDROID系统的游戏APP设计毕业论文.doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 基于ANDROID系统的游戏APP设计毕业论文目录第1章 绪论11.1 选题背景与意义11.2Android手机游戏APP的市场现状21.3 本文主要容2第2章 ANDROID系统平台概况32.1Android操作系统32.2Android操作系统特性32.3Android操作系统框架结构42.3.1Application42.3.2ApplicationFramework42.3.3LibrariesAndAndroidRunTime52.3.4LinuxKernel52.4Android应用程序构成52.4.1Activity52.4.2BroadcastReceiver62.4.3Se
2、rvice62.4.4ContentProvider62.5Android应用程序的生命周期6第3章 系统的整体设计83.1 数独游戏简介83.2 游戏策划93.2.1 欢迎界面的策划93.2.2 游戏界面的策划93.2.3 相关资源103.3 游戏的架构103.3.1 各类的介绍103.3.2 游戏的框架简介11第4章 软件的实现134.1 欢迎界面的实现134.1.1KLSDActivity实现134.1.2WelcomeView类的实现134.1.3WelcomeViewDrawThread类和WelcomeViewGoThread类的实现144.1.4HelpView类和AboutVi
3、ew类的实现164.2 游戏界面相关类的实现174.2.1GameView的实现184.2.2TimeThread的实现184.3 数独算法类的实现194.3.1 数独算法基本逻辑204.3.2 检测填充结果214.4 游戏的测试和运行224.4.1 游戏测试概述224.4.2 测试环境234.4.3 游戏运行结果23结论27致谢28参考文献2930 / 32 第1章绪论1.1选题背景与意义2007年,Android手机操作系统横空出世,并以开源的特点迅速占领手机操作系统的市场。据调查,在当今智能手机操作系统中,Android系统的智能手机所占的比例已经高达到62%,越来越多的用户选择安卓手机
4、。占据着如此巨大的市场份额,所带来的利益也是极其诱人的,随着移动互联网的发展以与智能手机的普与,对于手机APP发展越来越快,其中,手机游戏APP的开发更加具有诱人的利益。手机游戏APP吸引用户最大的特点就是因为方便,用户可以随时随地使用,正因为这个特点,手机游戏APP已成为用户最喜欢的移动应用之一,不管在iPhone还是在Android,发展速度都极其迅速1。常见手机游戏APP的特征可概括如下:(1)潜在用户群巨大:据调查。目前全球有20亿人使用移动,并且每天这个数字都在增加。甚至除了一些发达国家外,各国的手机用户都远远超过计算机用户。由此可以想象,手机游戏的潜在价值是十分巨大的。(2)移动性
5、与便携性:相比于传统的控制台游戏,手机游戏APP具有可以随身携带,用户可以随时随地进入游戏,去参加一些限时活动或者购买装备等特点。因为这个特点使得手机游戏APP早已成为人们日常生活中用于消遣时间的选择。用户可以在等车、休息时进行游戏。调查显示,适当的玩玩游戏可以让人释放压力,因而手机游戏APP已慢慢变成人们日常生活中一种普遍的娱乐方式。(3)支持网络:手机是一种网络设备,在某些时候可以让多个用户同时在线游戏。而随着移动互联网的发展,用户越发渴望移动游戏,为了满足用户的这一要求,Android平台游戏的开发将之运用在了实际中。本文以数独游戏APP为例,详细介绍了在Android系统平台上开发的优
6、势。数独又被称之为九宫格,来源于中国古代,但那时的规则更加复杂,那时的规则不是数字不能重复,而是要求每行、每列以与斜向上的各数字之和为15。易经中的九宫图也是由此而来。数独真正被世人所了解是在2004年英国泰晤士报的封面上刊登了一个数独的游戏。由此数独游戏开始广泛传播。数独的游戏规则十分简单,用户只需在空格处填上1-9的数字,并使该数字在每行、每列以与每个小的九宫格都只能出现一次,这种推理性的游戏操作极其简单,不需要数字运算,而且有助于开发大脑,锻炼思维,因而很受用户喜爱。1.2Android手机游戏APP的市场现状Android是由Google开发的一种基于Linux平台的开源操作系统。它包
7、含移动手机工作的全部软件,集操作系统、界面展现与软件应用程序于一体,并且解决了以往产业创新的专有权问题2。Google与30多家在技术和无线应用方面的知名企业共同开发出了Android系统。并且通过与开发商、运营商以与制造商等合作伙伴建立良好的合作伙伴关系,共同建立一个开放式,标准化的生态系统。在Android系统上开发的游戏软件,无需进行市场划分,更加不需要为用户进行量身定制等需求。因为用户的核心需求都是娱乐和打发时间,这样的要求依附于社会发展层次,与地区限制等因素无关,甚至可以打破文化的限制。考虑到这一因素,游戏在开发时都会考虑它的普遍性与其传染性,如何让推出的一款游戏点燃用户周围玩家的激
8、情,从而占领整个市场,这是每个商家需要考虑的问题。而在当今社会,每一个使用Android手机的用户都有可能是游戏需求的潜在用户,而随着移动时代的到来,Android手机的用户量也是每日剧增,在这种利益的驱使下,Android手机的市场越发壮大,其所带来的潜在影响就是游戏市场将得到巨大的发展空间3。1.3本文主要容本文由五个部分组成,各部分容如下:第一章绪论。详细介绍了本文的选题背景与意义,以与Android手机游戏的市场现状。第二章Android系统平台概况。这一章主详细介绍Android智能手机系统的市场现状、功能特征、特点以与体系结构等方面的容。第三章系统的整体设计。这一章主要介绍了对游戏
9、APP的一系列策划,所要实现的功能以与架构的介绍。第四章软件的实现。这一章对整个游戏APP的界面、游戏过程中可能会出现的问题的处理以与游戏的修改和整合做了详细介绍。总结。对本文所描述的加以总结并表达对未来的期望。第2章Android系统平台概况这一章将对Android开发平台做出详细的介绍,包括Android操作系统、特性、系统框架、程序的各个模块以与系统的生命周期。2.1Android操作系统Android手机操作系统是基于Linux平台实现的一种开放源码的手机操作系统,由谷歌于2007年推出的,为了占据移动终端的头把交椅,谷歌不惜花费巨力将Android打造成为真正意义上的开放源码的移动平
10、台,在移动终端的基础上,让Android在拥有移动手机所需要的一系列软件的基础上,能够更进一步加快移动互联网的前进步伐,并且能够在原有基础上得到创新。由于Android的前景与其存在的巨大利益,谷歌为此可以说是花费了巨大的精力和成本。开发Android系统初期,通过和全球30多家在手机应用和移动开发项目上的领军人物的合作,使得Android在一开始就有了一个良好的基础。后期为了依靠Android系统的良好优势创建一个开放性、标准化的移动软件平台,谷歌更是与开发商、制造商以与运营商等形成了长期友好的合作伙伴关系。为了让每一个Android系统的移动手机用户可以在任何时间和地点都能够被提供所需要的
11、信息4,谷歌甚至将Android操作系统当做是公司企业战略之一。2.2Android操作系统特性Android操作系统特性如下所示:(1)框架与特性:Android操作系统有4大组件与各式的控件,用于软件开发,其有两个主要的特性,分别是复用性和替代性。(2)虚拟机Dalvik:在开发软件过程中,免不了需要检测软件运行情况,而这就离不开虚拟机的作用,在Android操作系统中所使用的虚拟机是一种由谷歌开发的Java虚拟机,不同于市面上所推行的其他虚拟机,谷歌自主开发的虚拟机更加适用于Android系统,而且运行效率较其他的更快,资源占用率更小。 (3)SQLite数据库:在移动设备中存在大量的数
12、据,如何管理这些数据是十分重要的一个环节,而SQLite数据库的出现有效解决了这一问题,SQLite可以进行层次化的存储数据并且它的占用存少,处理速度快,此外SQLite还可以支持事务处理。(4)多媒体:支持各种格式的音视频文件(5)全球移动通讯系统:简称GSM,为了实现全球标准化网络,使得一部移动设备不受区域限制而推出的第二代移动通信技术。(6)蓝牙:蓝牙是一种在短距离实现语音和数据传输的无线连接技术。(7)全球定位系统:简称GPS,是由覆盖全球的24颗卫星组成的卫星系统。(8)开发环境:以Eclipse集成开发环境为核心,调试工具,设备模拟器,存与性能检测为辅。2.3 Android操作系
13、统框架结构Android系统操作平台主要分为四个部分,依次为:Application、ApplicationFramework、LibrariesAnd AndroidRunTime、Linux Kernel。如图2.1所示。图2.1Android操作系统平台的架构模型2.3.1 Application与传统的操作系统不同,谷歌为了用户能够更好地体验Android系统,对于一些传统的应用仍会保留。但与其特有的应用一样,所有应用都将基于Java语言进行编写。但这并不妨碍用户的使用,因为所有应用都可以通过网络嵌入,在同等条件创建,可以并行运行5。2.3.2ApplicationFrameworkA
14、ndroid移动设备上的每一个应用程序都是各个组件组成,而Android系统主要有4大组件,分别是Activity、BroadcastReceiver、Service以与ContentProvider,这些组件通过ApplicationFramework提供的API组成了一个个应用程序的框架。有了这样一个大的框架,再加上一些控件的添加,就组成了一个个移动设备中所使用的应用程序。2.3.3LibrariesAndAndroidRunTimeAndroid之所以能被不同组件相互使用,主要是由于它有自己的一套核心库,通过核心库的容,程序员在开发是可以省去不少麻烦。由于Android是基于Java语言
15、开发的,因而在Android核心库中包含了大部分Java语言核心库的容。Android系统中所用到的虚拟机Dalvik就是以Linuxkernel为基础实现的,Dalvik和JavaVM不同,Dalvik执行的.dex格式的文件,而JavaVM执行的是标准的字节码。此外Dalvik是Register-based6的虚拟机,可以最大限度的实现优化,更加实用于移动设备,而JavaVM是Stack-based虚拟机,远不如Dalvik。2.3.4Linux Kernel正如每个人都需要一个大脑一样,每一个操作系统也需要一个核心,对于Android操作系统而言使用Linux核来作为系统的核心处理事务。
16、其中包括机制的安全、存与进程的管理以与网络堆栈等。Android操作系统的运行离不开移动设备的驱动程序,其中主要的有DisplayDriver、FlashMemoryDriver、CameraDriver、AudioDriver、Wi-FiDriver、KeyBoardDriver、BluetoothDriver以与Android所特有的驱动BinderIPC驱动7等。2.4Android应用程序构成与其他计算机开发平台不同,在Android平台上开发的程序都有一个唯一的入口启动程序,正如前面所说到的,程序的开发是由各个组件之间的相互组合而成,Android操作系统有四大组件,这些组件通过In
17、tent来传递数据。在一个程序中并不是都需要Activity、Service、BroadcastReceiver和ContentProvider等全部的组件,有时可能只需要几种组件相互组合就可以了。另外,正如每个公司都需要在工商局注册一样,每一个组件的使用也需要在清单文件中注册8。清单文件是一个xml文件,就如一个国家的法律一样,清单文件是每个程序都不可或缺的。2.4.1Activity作为四大组件之一的Activity应该是程序员用的最多的一个组件,也是最好用的的一个组件。在一个程序中,每一个Activity就是一个手机界面。而在这个界面中程序员可以添加很多视图,如:Button、EditT
18、ext、ListView等。通常情况下一个应用程序可能包含多个Activity,而每一个Activity之间也可以相互跳转。当然Activity之间的跳转也是可以返回的,这种返回机制在多个Activity之间的跳转是非常有效的。用户可以通过这种机制继续之前的操作。这些Activity之间的相互跳转都离不开Intent的作用。Intent主要有两个数据结构组成,action与data。Action的种类很多,常见的有:main、view、edit等,而action所需数据都是url的形式9。2.4.2Broadcast Receiver当程序需要处理外部事件时,需要利用BroadcastRece
19、iver来完成,用户并不能看见BroadcastReceiver,用户只能通过NotificationManager来了解发生了什么事件,BroadcastReceiver也需要注册才能使用,只不过这个注册可以是在清单文件也可以在代码中进行10。只要完成注册,一旦事件发生,应用程序可以直接启动。2.4.3ServiceService也是程序的一种,它可以长时间运行,和BroadcastReceiver一样,Service也没有用户界面,不仅没法交互,而且不能自己运行。只有通过Activity或Context对象来调用11。比如说用户在使用音乐播放器时,突然想要上网,此时,用户的手机虽然跳转到了
20、网页界面,但是音乐播放器并没有停止工作,而是等待用户的唤醒继续使用。而这正是由于Service在执行。如果用户有需要也可以强行停止Service的运行。2.4.4Content Provider不同于其他的操作系统,Android操作系统在文件类型、数据库类型以与其他类型等数据存储方面是独立的,这就有效的避免了某些病毒或不正常程序运行所带来的影响。虽然数据存储是独立的,但是却并不影响数据在程序之间的交换。为了方便数据的共享,Android系统提供了ContentProvider,一个程序如果想要获得另一个程序的数据,只需在该程序中实现ContentProvider接口,此时只要其他程序有访问权
21、限,就可以获取该程序的数据并对其进行修改12。2.5Android应用程序的生命周期程序的运行是指从开始到完毕的过程,每一个程序都有一个生命周期。不同于其他系统,在Android平台上开发的程序的生命周期与自身无关,不受自身的约束,而是通过Android系统来决定的,一个程序的生命周期长短是由系统的负载和应用程序来决定的。Android系统程序进程如图2.2所示。图2.2Android应用程序进程优先级(1)前台进程:在程序运行过程中前台进程是极其重要的,是与用户进行交互所必不可少的。前台进程主要有四种情况。正如上文提与到一样,系统在运行过程中可能涉与多个进程同时运行的情况,这会导致系统存被极
22、大的占用,此时如果设备的存不足,则会导致某些进程无法继续运行,此时需要清除一些长时间未曾使用的进程以释放存资源,保证其他进程的正常运行。(2)可见进程:可见进程顾名思义就是指用户可以看见的页面,但是却不与用户进行交互,对于程序的运行没有任何影响。此外与该进程相关的其他进程如果正被可见进程调用,则该相关进程同样被视为可见进程。Android系统正常情况下不会存在大量可见进程,但有时为了前台进程的正常运行,系统会清除一部分可见进程,释放存,为前台进程提供资源。(3)服务进程:服务进程就是指系统正在运行的程序。服务进程同样是不可见的,一般情况下,服务进程会一直在后台运行,但有时为了前台进程和可见进程
23、的正常运行,系统也会完毕一些服务进程,释放资源。(4)后台进程:后台进程是指所有已启动的进程之外的进程,在Android系统的移动设备中存在大量的后台进程,这些后台进程会占据大多的存资源,所以优势为了保障其他进程的正常运行,系统会优先考虑完毕后台进程。(5)空进程:空进程是一个没有任何组件的进程,用户同样看不见,但在释放资源时,空进程会第一个被清除,空进程与其他进程存储地址不同,空进程储存在系统存中,设备被重新启动时,空进程依然会运行。设备在运行过程中会涉与到释放资源方面的问题,当系统资源紧的时候,系统会优先释放优先级低的进程,一个进程的优先级取决于该进程中组件的优先级最高的那个13。如果一个
24、进程需要获取另一个进程的数据,那么这两个进程会保持相同的优先级。第3章系统的整体设计3.1数独游戏简介数独的游戏规则很简单,用户在运行游戏之后,设备的界面上会出现一个99的表格,总共81个格,其中有些格有数字,用户只需在其他空格处填上1-9的数字,并且使得每个数字在每行、每列以与每个33的格子中都只有一个。游戏框架如图3.1所示。图3.1游戏框架图数独游戏是一款非常容易上手的游戏,下面我简单介绍一下该游戏的运行步骤。(1)用户在自己的移动设备上点击游戏图标,首先进入眼帘的便是游戏的欢迎界面,用户可以点击任意位置进入主菜单。(2)在菜单界面有四个选项,用户可根据提示进行不同的操作。(3)在进入游
25、戏时,用户可以看见在下方有四个按钮以与一个计时区,用户可以查看游戏运行时间,也可以通过点击按键进入不同的操作。(4)当用户将设备界面上所有的空格全部填满时,系统会自动进行比对,如果全部正确,则会跳转到胜利的界面,反之,弹出游戏失败。(5)不管是胜利还是失败,用户都可以点击任意位置返回欢迎界面。(6)在主界面点击退出游戏即可完毕游戏。3.2游戏策划3.2.1欢迎界面的策划用户在运行游戏后,首先进入的是开机动画界面,这一功能的实现主要是利用图片的刷帧效果。用户在开机动画界面任意点击即可进入游戏的主菜单界面,根据提示点击相应位置即可实现相应的功能。如图3.2所示。图3.2菜单界面这里选取480320
26、的手机屏幕分辨率,当y位于()时,程序开始游戏;当y位于(180 230)时,程序会进入游戏介绍界面;当y位于(230 280)时,程序会跳转到游戏帮助界面;当y位于(280 330)时,程序直接退出。3.2.2游戏界面的策划当用户进入游戏时,在游戏界面下方会有四个功能键以与一个计时区。如图3.3所示。图3.3游戏主界面游戏主界面分为三个区域,游戏区域是用户需要操作的区域,计时区是用于提示用户游戏进行了多久,四个按钮可以让用户实现相应操作。3.2.3相关资源程序自身并没有音乐与图片等资源文件,所需资源都需要程序员自行添加,程序所需资源如表3.1所示。表3.1所用图片资源图片名像素用途图片名像素
27、用途a1-a9.png2121输入数字key_background.png100100数字键盘b1-b9.png2121默认数字change2.png5030按下换题icon.png15080游戏图标change1.png5030未按下换题fail.png15080游戏失败select.png2424选中单元格win.png15080恭喜过关drop1.png5030未按下放弃go_on.png15080暂停中drop2.png5030按下放弃time0.png2121实践中的0help1.png5030未按下提示help2.png5030按下提示stop1.png5030未按下暂停stop2
28、.png5030按下暂停background.jpg320480背景heart.png2525提示图标small_background.png100100背景方框time.png3131时间冒号about.jpg320480关于背景exit.png86退出提示help.jpg320480帮助背景menu.jpg320480菜单单元w1-w30.gif320244欢迎动画帧在Android操作系统中,非代码类的文件存放于res文件夹下,图片等资源则存放于drawable文件夹下。3.3游戏的架构3.3.1各类的介绍1共有类KLSDActivity类继承父类Activity并重写里面的方法,是整个
29、程序的核心和入口,通过与其他类的交互获取消息,并通过对收到的消息的处理跳转到其他界面14。这是整个程序唯一的公共类。2.欢迎界面相关类(1)WelcomeView类:游戏欢迎界面类,即用户运行游戏所展现的界面。(2)WelcomeViewDrawThread类:该类是欢迎视频界面的刷帧线程。(3)WelcomeViewGoThread类:欢迎界面的服务线程。(4)AboutView类:游戏介绍界面的绘制。(5)HelpView类:游戏帮助界面。3游戏界面相关类(1)GameView类:介绍游戏的规则与模型,同时生成游戏过程中的各个画面与用户的交互。(2)GameViewDrawThread类:
30、执行刷帧操作。(3)TimeThread类:刷新游戏运行时间。(4)DrawKeyThread类:改变键盘透明度,执行渐变处理。(5)ShuDuSuanFa类:存放数字的二维数组。3.3.2游戏的框架简介游戏框架图如图3.4所示。图3.4游戏框架下面将通过对程序的使用分别详细讲述每个类的作用,步骤如下。(1)用户运行游戏后,在KLSDActivity中首先会初始化WelcomeView,之后设备将会跳转到WelcomeView界面。然后通过WelcomeViewDrawThread与WelcomeViewGoThread来生成欢迎界面与刷新界面。(2)当用户进入游戏首页之后,通过点击提示的帮助
31、按钮,系统会自动调用HelpView类来显示帮助界面。同理,当用户点击关于按钮时,系统会通过AboutView类显示关于界面。(3)当用户开始游戏时,系统进入GameVew类,同时GameViewDrawThread会被启动并刷新界面。(4)当用户在游戏过程中可以通过点击任意空白位置,系统会自动调用DrawKeyThread线程来生成数字键盘。(5)用户在开始游戏时,系统会在自动启动TimeThread线程,来更新时间。(6)用户在游戏开始前,系统会通过ShuDuSuanFa类生成数独数组,生成的数组将作为评判用户输入数字是否准确的标准。第4章软件的实现4.1欢迎界面的实现4.1.1KLSDA
32、ctivity实现本设计所有类之间的调度都是通过主类KLSDActivity进行的,KLSDActivity不仅作为整个程序的入口,而且也管理着整个程序中的类,其中包括WelcomeViewwelcomeView、GameViewgameView、AboutViewaboutView、HelpViewhelpView以与HandlermyHandler。上述类都是View的子类,每个类都有着各自的作用,WelcomeView类用于生成欢迎界面,GameView类生成游戏界面,AboutView类生成引用界面,HelpView类生成帮助界面,HandlermyHandler类用于线程通信并更新控
33、件15。除了所管理的每个类,KLSDActivity的每个成员函数也是不可或缺的一个因素,其中包括:onCreat():此方法是Activity类的“大门”,调用此方法可以将游戏模式切换成全屏模式并初始化欢迎界面。initWelcomeView():此方法用于欢迎界面的切换。initGameView():切换游戏界面。initHelpView():初始化帮助界面。initAboutView():初试化关于界面。KLSDActivity类之所以能够管理其他类,控制每个类之间的切换以与使设备显示特定的界面,都是依赖于Handler来实现的。4.1.2WelcomeView类的实现WelcomeVi
34、ew类是程序用于开机动画界面的实现,其流程图如图4.1所示:图4.1WelcomeView类功能流程图WelcomeView类用于实现欢迎界面。该类是SurfaceView类的子类,利用双缓冲机制进行绘图。可以更为有效的控制界面的格式、大小以与在屏幕中的显示位置,通过SurfaceHolder类中的getHolder方法获取16。在绘制屏幕时必然会使用到画布,而要想使用画布必须先利用lockCanvas方法锁定画布,然后在画布上进行操作,当所需界面在画布上绘制完成时,利用unlockCanvasAndPost方法解锁画布,才可以将所绘制的界面展示在屏幕上。为了更加方便的管理和使用动画界面所需的
35、帧图片,其ID存放于BitmapID数组中,在后续操作中只需对BitmapID数组进行增删操作即可。作为WelcomeView类的构造器,publicWelcomeView(KLSDActivityactivity)可以初始化图片、动画线程以与刷帧线程,其中界面的绘制依赖于onDraw()方法,屏幕的监听用onTouchEvent()方法,此方法以用户点击的坐标位置确定用户点击的是哪里,并将消息发送回Handler类。4.1.3WelcomeViewDrawThread类和WelcomeViewGoThread类的实现程序员为了使游戏更加吸引用户,在进入游戏时做了一段动画欢迎界面,为了实现这一
36、功能,新建了WelcomeViewDrawThread类,用于刷新动画界面,而动画界面的生成则是依赖于WelcomeViewGoThread类,这两个类都是Thread类的子类,因而都必须重写父类的run()方法才能实现所需功能。WelcomeViewDrawThread类的run()方法的代码如图4.2所示:图4.2WelcomeViewDrawThread类的run()方法WelcomeViewDrawThread类的run()方法主要控制c的值,当c为空时,通过调用WelcomeView类里的onDraw()方法,绘制完背景图片后,c值不为空,此时屏幕解锁,画布被初始化,c值又为空,通过
37、释放和更新屏幕显示的容,达到刷帧效果。WelcomeViewGoThread类中run()方法代码如图4.3所示:图4.3WelcomeViewGoThread类中run()方法WelcomeViewGoThread类中的run()方法通过控制drawIndex的值,使drawIndex实现累加以此判断是否达到数组的最大长度,如果到了,则判断drawIndex的数值是否为5,如果等于5,则改变drawString的值,如果不等于5,则drawIndex减去10,再次进入循环,以此达到闪动效果。4.1.4HelpView类和AboutView类的实现游戏帮助和游戏说明的实现是通过HelpView
38、类和AboutView类来实现的。这两个类通过onDraw()方法来绘制界面且两者十分相似,因而只对其中一个进行分析,这里选择HelpView类,其代码如图4.4所示:图4.4HelpView类的onDraw()方法作为帮助界面的构造器,publicHelpView(KLSDActivityactivity)需要先获得surfaceHolder和activity,然后加入Callback的实现类并初始化图片资源。通过onDraw()方法,绘制帮助界面的背景。通过onTouchEvent()方法对键盘进行监听,系统通过用户点击屏幕的位置调用此方法来判断是否返回并将消息发送给Handler进行处理
39、。4.2游戏界面相关类的实现游戏界面向用户展示了游戏区,计时区,与功能区,每个区域实现一个功能,其流程图如图4.5所示:图4.5游戏界面流程图4.2.1GameView的实现GameView是用户正式进行游戏的界面,GameView在初始化时候完成一系列资源的读取,利用GameViewDrawThread线程来进行对图片的刷帧操作,TimeThread线程对时间进行即时更新17。当用户开始游戏时,系统会调用DrawKeyThread线程完成数字键盘的绘制。GameView作为SurfaceView的子类,同样需要实现onDraw()方法,GameView类中的onDraw()用于游戏界面图片的
40、绘制、时间显示、选题按钮提示以与数字框提示。当用户点击屏幕时,系统会调用DrawKey()方法来绘制数字键盘并且通过对surfaceCreated()和surfaceDestroyed()两个方法的调用来完成一系列相关线程的启动与调用。4.2.2TimeThread的实现TimeThread线程是用于记录用户进行游戏的时间长短,其代码如图4.6所示:图4.6TimeThread线程的代码TimeThread类相对而言要简单得多,系统只需要利用gameView.time每秒钟更改一下GameView的时间就可以了。作为时间线程的构造器public TimeThread(GameViewgameV
41、iew)必须先引用GameView类,然后复写其中的run()方法,即可实现时间的实时跟新。4.3数独算法类的实现数独算法类是用于检测用户填入空白格的数字的正确与否,其流程图如图4.7所示:图4.7WelcomeView类功能流程图4.3.1数独算法基本逻辑ShuDuSuanFa类是一个数学计算的类,该类通过一系列的数学算法得到程序所需要的数独数组,并通过相应的的接口给其他的类来用。ShuDuSuanFa类的目的通过数学算法得到程序所需的数组。使得用户所填写的数字满足九宫格的规则。该数学算法的检测规则是在以此使用0-9中的数字与九宫格中的每一行、每一列以与每一个33的小方块进行比较,检测是否每
42、一个数字都只出现一次,如果满足条件,则再次产生一个数字继续进行对比,直至9个数字全部检测完毕,如果9个数字检测完都满足条件,则游戏胜利,反之只要有一个数字不满足条件,则游戏失败。运用数独算法时,系统运用了回溯法,即先将所有可能解排列,在按照一定的条件进行索引。针对这一问题,一般有两种解决方式,一是给定一个解,然后依次进行查找,直到找到为止。二是先求出所有可能解,通过遍历的方式找到所需解。回朔法是一种搜索方式,这种搜索方式只适用于一些大数量解得问题,在问题的解空间树中,首先按照深度优先的策略,从根结点出发搜索解空间树18。当算法搜索至解空间树的任意一点时,首先判断该结点是否包含问题的解。如果不包
43、含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。与其他搜索方式不同,回溯法得特点在于不必把问题的每一层的所有可能解都遍历一遍,只要当前的可能解不满足约束条件就抛弃该解,寻求下一个可能解,而不必求解其余的下层解。当当前层得所有可能解都不满足约束条件,则回溯到上一层,抛弃上一层的当前可能解。从对回朔法的分析可知数独问题的约束条件为:每个空格的数值围为1-9,每一行数字不能重复,每一列数字不能重复,每一个33的格子数字不能重复。由此可知,回溯法通过约束条件的筛选,排除掉所有不可能的解,最终获得问题的一个或者全部解。4.3.2检测填充结果根据数独游戏
44、的规则,用户在填满全部的空白空格后,要使每一行、每一列以与每一个33的小格子中的数字都只能出现一次,以此为基础来判定用户所填写的数字是否满足游戏规则。(1)列检测首先调用checkLine()方法对每一列中数字进行比对,看是否有重复数字,通过遍历0-9中的数字与每一列进行对比,如果有重复数字则跳转到游戏失败界面,反之进入游戏胜利界面。其代码如图4.8所示:图4.8列检测代码(2)行检测与每一列数据的检测一样,对每一行的数据也需要检测,通过调用checkRow()的方法行数据进行检测,其代码如图4.9所示:图4.9行检测代码(3)小九宫格检测在检测了每行每列之后,程序仍需对每个33的九宫格进行检
45、测,其原理与行列检测一样,不同的是需要考虑小九宫格每个数字的位置,程序通过Row和Col来指定九宫格中每一个数字的位置,Row和Col的围是0-2。其检测代码如图4.10所示:图4.10小九宫格监测代码4.4游戏的测试和运行4.4.1游戏测试概述每一款游戏APP在制作完成之后,不可能立马就投入市场,而是需要经过一系列的检测之后确保没有问题才会投放市场,为了检测本程序有无缺陷,我们需要使用真实的移动设备对其进行检测,找出程序中的缺陷并加以解决,完善产品的功能。考虑到游戏的一些特性,其监测主要包含两个部分:(1)传统的软件测试在程序开发过程中程序员所做的监测,只能在确保程序在一些细节上没有问题,各
46、个模块可以正常使用,但作为一个整体而言,并不能测试出程序存在哪些问题。为了保证程序的正常运行,还需要对程序进行整体的测试,这一阶段的测试主要分为两个方面,一是黑盒测试,即将整个程序作为一个整体,不用考虑其他因素的影响,只需对程序的输入输出数据进行处理即可,这也是一种高端测试。二是白盒测试,与黑盒测试相反,白盒测试需要考虑各方面的细节,对程序的所有分支都需要进行测试,工作量大,属于低端测试。测试人员在对程序进行测试时往往是将两者结合起来使用,这样可以更为有效的完善程序。(2)对游戏性能的测试用户之所以喜爱一个游戏,很大程度上是因为游戏是一种对现实世界的模拟,用户在现实世界中所受的压力,可以在游戏中得到释放,因而每一款游戏在包含游戏独有的特点的同时,还包含了一部分人类社会的特性。考虑到这一因素,对于游戏的测试免不了需要考虑游戏情节的测试、游戏文化的测试以与游戏世界的平衡测试。目前在游戏开发完成后,对游戏性能的测试主要分为三种途径:一是通过游戏公司部人员对程序进行测试,因为他们都是一些职业玩家,能够更好认识游戏,从而完善游戏的功能;二是通过对外界用户的测试来找出游戏的不足,进而加以改进;三是通过用户的反响来对游戏进行改进。4.4.2测试环境程序的测试环境主要包含两种,一是通过虚拟机AVD的测试,二是利用真机