XX大学
毕业设计(论文)
院 系: 信息工程学院
专 业: 计算机科学与技术
班 级:
学生姓名: XX
学 号: XXXXXXX 导师姓名: XXXX 职称: 讲师
起止时间: 2014 年 3月 1 日至 2014年 5月31日
XX大学本科毕业设计(论文)创作诚信承诺书
1.本人郑重承诺:所提交的毕业设计(论文),题目《
》是本人在指导教师指导下独立完
成的,没有弄虚作假,没有抄袭、剽窃别人的内容;
2.毕业设计(论文)所使用的相关资料、数据、观点等均真实可靠,文中所有引用的他人观点、材料、数据、图表均已标注说明来源;
3. 毕业设计(论文)中无抄袭、剽窃或不正当引用他人学术观点、思想和学术成果,伪造、篡改数据的情况;
4.本人已被告知并清楚:学校对毕业设计(论文)中的抄袭、剽窃、弄虚作假等违反学术规范的行为将严肃处理,并可能导致毕业设计(论文)成绩不合格,无法正常毕业、取消学士学位资格或注销并追回已发放的毕业证书、学士学位证书等严重后果;
5.若在省教育厅、学校组织的毕业设计(论文)检查、评比中,被发现有抄袭、剽窃、弄虚作假等违反学术规范的行为,本人愿意接受学校按有关规定给予的处理,并承担相应责任。
学生(签名):
日期: 年 月 日
目 录
1.前言 ..................................................................... 1
1.1课题背景、目的与意义 ................................................ 1
1.2 国内外的发展现状 .................................................... 2
1.3 论文的主要内容以及章节结构 .......................................... 2
2.Android平台开发概述 ...................................................... 3
2.1 Android系统概述 .................................................... 3
2.2 Android系统架构 .................................................... 3
2.3 Android应用程序组件 ................................................ 4
3.系统需求分析 ............................................................. 7
3.1 需求分析概述 ........................................................ 7
3.2功能模块要求分析 .................................................... 8
3.3运行环境要求分析 .................................................... 9
4、总体设计 ................................................................ 9
4.1系统设计 ............................................................ 9
4.2游戏模块设计 ....................................................... 11
4.3类功能的描述 ....................................................... 12
4.4数独游戏所需的开发模式 ............................................. 13
4.5游戏体系框架设计 ................................................... 13
5、系统实现 ............................................................... 14
5.1数独游戏流程框架 ................................................... 14
5.2数独算法的实现 ..................................................... 14
5.3游戏初始化界面模块 ................................................. 16
5.4 游戏菜单模块 ....................................................... 20
6、系统运行与调试 ......................................................... 22
6.1游戏测试概述 ....................................................... 22
6.2测试环境 ........................................................... 23
7、总结与期望 ............................................................. 26
参考文献: ................................................................ 27
致 谢 ..................................................................... 28
基于安卓系统的游戏开发与实现
学生:XX(指导老师:XXX)
(XX大学信息工程学院)
摘要:当今世界,人类越来越离不开智能手机所提供的方便与快捷,它改变了人类传统单一的纸张化通信模式,单一的音频通话模式以及枯燥的娱乐活动。在Android系统诞生之前,智能手机,这个新鲜事物已经大大丰富了人们的业余生活,并得到了广大手机用户的青睐和认同。因此,各大手机厂商瞄准当下机遇,和巨大市场潜能,纷纷研发了各种智能手机操作系统,目的就是在于抢占这个市场的制高点。Android系统因此就是在这个风云际会的历史背景舞台下诞生的。
当今手机行业蓬勃发展的快速发展,日益流行的Android系统使得越来越多的手机用户开始转向Android系统,如地图、音乐、新闻等推出的Android应用程序的出现成为安卓开发软件市场的新型客源;开发者可以根据不同阶层不同年龄需求制定出个性化的手机应用游戏,因此深受年轻用户追捧,丰富青少年业余生活。由此可以看出,Android的游戏的发展前景是光明的。
关键词:安卓 手机软件 游戏
Based on the platform Android game development and design
Student: XX(Faculty Adviser:XXX)
Abstract:Today's world, more and more inseparable from human convenience and fast smartphones offer, it has changed the traditional single sheet of human communication mode , single mode and audio calls boring entertainment. Before the birth of the Android system , smart phones, this new thing has been greatly enriched people's leisure life , Therefore, the major mobile phone manufacturers targeting current opportunities and huge market potential , have developed a variety of smart phone operating system .
The rapid development of today's booming mobile phone industry , the increasingly popular Android system makes more and more mobile phone users turning to the Android system , where there maps, music, news and other Android applications launched Android software development market has become a new source ; developers can develop according to the different needs of different age classes of personalized mobile application game, so sought after by young users . It can be seen that it will development prospects are bright.
Key words: Android mobile software games
1.前言
1.1课题背景、目的与意义 基于Linux的开源和自由的操作系统Android,它的主要作用是应用于移动设备,比如智能手机以及智能平板电脑,此系统由谷歌公司和开放手机联盟公司主导和开发。在此之前,此款系统尚未有一个统一的中文称呼,而在中国大陆,“安卓”或者“安致”被越来越多的人使用和熟知并接受。Andy Rubin,最初作为手机的主要开发支持Android操作系统,2005年8月由谷歌收购注资。 两年后的2007年,谷歌公司与84家硬件制造商合作,并与软件开发商以及电信运营商共同形成开放手机联盟,联合开发Android系统。与此同时,谷歌通过以Apache开源许可证的授权方式,并同时发布了Android源代码。2008年10月,作为Android第一款智能手机面世,随后,Android系统平台扩展到其他领域,比如电视、平板电脑、游戏机、智能化管理平台等等。2011年第一季度,在独霸全球手机系统市场多年之久的Symbian Android的市场份额撼动其霸主地位,首次位居世界第一的市场份额。根据在2013年第四季度市场报告显示,手机的全球市场份额中Android的平台已经达到了78.1%的占有率 。在2013年9月24日这一天,谷歌开发的Android操作系统迎来了五岁的生日,而如今,采用这一系统的全球智能设备的数量已经达到了十亿台。
数独游戏,又称“九宫格”游戏,最早起源地是中国,它是一种中国古代的算术游戏,它通过运用纸和笔,进行一种逻辑演算。玩家在一个9*9的棋盘面上,根据现有已知的数字,推理出剩下的所有空格处得数字,使得每一行,每一列以及每一个3*3的小盘面上的数字均只能含有1-9中所有数字中的一个,而且在这这3*3小盘面中不能出现这九个数字的二次重复使用,所以答案是唯一的。由于这种游戏操作简单,而且可玩性极高,能锻炼人们的思维能力,有助于挖掘大脑潜能,因此而风靡全球。
如今,手机行业在21世纪蓬勃发展迅速,随着日益流行的Android系统的出现,越来越多的手机用户开始转向Android系统,它是基于开源的Linux为基础的操作系统,其特有的个性化,实用性和良好的扩展性,受到外界行业的较高评价和追捧支持。而数独游戏,由于其操作简单,无需特定语言的基础,同时也起到了人类大脑思维发展中的作用,正因如此,数独如此迅速风靡全球。
在Android平台上运行的游戏深受大家的追捧。现如今,基于Android平台上的的游戏不仅可以运行在智能手机上,我们还可以将其放在平板电脑上运行。
1.2 国内外的发展现状 (1) 以专业化、大规模化方向发展
随着越来越多的平台和日益增加的显示芯片对Android的大力支持,硬件性能将不再成为制约专业游戏的开发的瓶颈。在越来越多的领域里,都有了Android的渗入,比如在PC,XBOX360,PSP等游戏平台上占据了都将迅速渗透进Android以及其他移动平台,这使得游戏发展往更加专业化的发展方向前进。
(2) 以网络化方向发展
随着各个平台对WIFI网络、无线通信网络、蓝牙网络都有了良好的支持,游戏将是一个更好的创新型和个性化的用户体验。在线网络游戏,多人游戏,与其他玩家联机对战,将进一步加强游戏的附着力水平,并且容易通过道具来控制生成的盈利模式。这将有助于网络的未来进一步升级,加快发展进程。
(3) 以时间片化、休闲化方向发展
移动设备的便携性使得休闲游戏将会得到快速发展。移动设备可以把分散时间的合理利用是促进游戏可以向时间片化发展,也就是说,一个游戏可以在任何时候开始,而结束是可以在任何时间任何地点,以用户的时间片来运行分散的优势。即使在其他家用电子设备,休闲游戏,也可以为用户带来的以家庭为单位更多的乐趣。
1.3 论文的主要内容以及章节结构
整篇论文共分为六个部分,主要内容安排如下:
第一章 前言。在这一章节里,主要介绍本篇论文的课题背景、包括目的以及意义。这其中包括了课题的背景资料简介、国内外目前的发展现状和未来发展趋势、深入系统地介绍了本次课题研究和编写的价值及意义所在。
第二章 Android平台开发概述。这一部分是主要介绍了Android手机的发展历程,以及阐述现状、这其中包括详细介绍了Android的功能、Android系统和架构的独到之处以及Android的体系框架。
第三章 系统需求分析,是对数独游戏的前期规划进行在功能,安全性,需求各方面的详细分析与探讨,以便制作出符合用户最好的系统。
第四章 数独游戏的总体设计。是对该款数独游戏的相关模块,相关功能的策划以及系统架构的实现进行深入剖析和规划设计。
第五章 数独游戏的详细设计(包括程序代码的实现)。这一部分主要是介绍了游戏的界面的绘制、游戏菜单的编写,键盘事件的建立,数独游戏的逻辑处理以及运行调试,检验,找出问题所在,及时解决。
第六章 系统调试与运行,这一环节,是针对数独游戏代码实现后进行后期模拟环境检验,在调试过程中检验代码的可靠性,安全性,是否达到预期效果以及实现既定要求。同时在发现问题的过程中,调整思路和改变代码,力求达到最佳运行效果。 第七章 总结和展望。对该数独游戏的今后发展进行改进和优化调整,并对整篇课题论文进行深入总结和回顾,并对未来展望。
2.Android平台开发概述
2.1 Android系统概述
Android是由Google谷歌公司研发的一款手机操作系统,它是基于Linux平台的智能手机操作系统,谷歌的目标是将其打造成为基于移动互联网终端的真正开放式的移动终端平台,不但要求可以使用移动手机所需的各类工作软件,同时并在专利方面保证不侵犯他人的权利,以此促进移动互联网的进步和创新。
谷歌公司开发的Android,和开放手机的联盟合作是由包括全球30余家手机移动应用开发龙头企业在内得以组成。谷歌公司和运营商不仅达成合作伙伴关系,并保持与设备制造商和开发商长期合作,目的是为了利用其优势互补从而建立成熟的移动软件平台,其最大特点是标准化,开放性的优势。 Android是谷歌的未来业务战略的一部分,其目的是为了能够在任何地点在任何时间提供有效信息 [4] 。 结合相关书籍以及有关文献资料,我们对Android有了个初步的认识,并基本掌握了如何去搭建配置Android的有关环境和编写调试配置是否成功的HelloWorld的测验程序。同时我们需要知道在基于Android平台的一个项目里,要清楚明白哪些文件夹和文件包含相应的作用。下一节,我们将从另一个深层次去分析
Android的整体架构:
2.2 Android系统架构
要想了解Android系统构架的主要组成部分,可以通过下面这张示意图清楚掌握:
图1 Android系统架构(来源:android sdk)
可以很清楚地看到,Android的系统架构分为五个部分,依次是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。
下面将详细介绍这5个部分。
2.3 Android应用程序组件
现在我们根据组件的高低,依次来剖析各个部分。虽然SDK在这方面已经为我们设想到面面俱到,但是我们还是需要通过自己的深入研究,通过自己的见解,沿着自底向上分析各层架构,才有助于我们进一步了解Android。 2.3.1、Linux Kernel(Linux内核)
Android基于Linux 2.6提供核心系统服务,包括:内存管理、安全、网络堆栈、进程管理和驱动模型。Linux Kernel同样可以作为抽象层放置在硬件和软件之间,它通过隐藏相关具体硬件细节,与此同时,它也能为上层提供相应的统一服务。
Android系统平台是建立在Linux内核之上,在人们狭义观念里,Android系统指的就是Linux内核及以上的各层,但是从运行这个角度来剖析,Android系统是对Linux的完全依赖,如果没有Linux的支撑,Android也就无法生存下去。
Android基于Linux的最大价值是在于它强大的可移植性,Linux可以在任何系统中运行,就是因为其可以运行在各式各样的系统芯片构架和硬件中,与此同时,依附于它的Android系统,也得以遗传了它强大的可移植性的重要特性。对于计算机专业的同学来说,学过计算机网络这门专业课之后,我们都会对OSI/RM有所了解,大概了解分层的意义在于:它能使得下层提供服务而为上层提供服务的同时,它也能为上层提供统一的服务,与此同时,屏蔽本层和下层的相关差异,若本层及以下层发生了相应变化,却不会将影响波及到上层。好比Linux是一座桥梁,它让行走在上面的Android得以实现与各级底层硬件连接起来,使得它们无需直接耦合,正因如此,降低了移植的复杂性和高难度。,各层都能提供固定的SAP(Service Access Point),用专业话来说可以是各层各司其职,从而达到高内聚、低耦合。
当然本次毕业设计只是做简单的关于数独游戏的应用开发,所以对于Linux Kernel层,我们就不需要进行深入研究。
2.3.2、Android Runtime(运行时)
Android系统中的运行时(Runtime),目的就是为了实现Java在运行阶段的二次编译提供支持。
Android有一个集合,是关于核心库。它能为Java编程语言核心类库提供相关的可用性较高的功能。Java的虚拟机Dalvik和Java的核心类库共同构成了Android 的运行时。
基于Android系统的每一个应用程序,在自己的进程中都是根据Dalvik虚拟机实例得以运行。Dalvik虚拟机设计成:多个虚拟机可以在一个设备中有效地运行。 Dalvik虚拟机可以执行的文件格式是。Dex格式。是一种压缩格式,专为Dalvik的设计,非常适合这类高速系统具有有限内存和处理器。
JVM是基于堆栈是一个众多虚拟机中的一个,而Dalvik的虚拟机是基于在寄存器的车道上。事实上,这两种架构各有优缺点,相对一般,将需要更多的指令基于栈的机器,但机器基于寄存器的指令是更大的。 dx是一套Java工具。将java.class转换成 DEX格式。因为索引有时是必要的,以便优化处理,会使文件的大小将会增加至1-4倍,而且会以ODEX结尾。
2.3.3、Libraries(核心类库)
对于C/C++库的集合,这些是包含在Android里它能为Android系统中的各个组件提供帮助并可以使用。Android应用程序框架(application framework)将这些功能曝光于开发人员,是他们得以了解。下面列出一些核心库:
∙ 系统C库——这是继承了标准C系统库(libc)的BSD衍生。是作为基于嵌入式Linux
系统设备而制定的库
∙ 媒体库——基于PacketVideo的OpenCORE。该库可以支持目前当今时下常用的许多
音频、视频格式的播放和录制,同时也支持包括了静态图像文件,例如:AMR、PG、MPEG4、MP3、AAC、J PNG、H.264
∙
∙ 界面管理——管理访问不同应用包括了2D和3D图形层的界面访问 LibWebCore——这是一种Web浏览器引擎的新型模式,它可以来对Android 浏览器
进行驱动,同时可以调用内嵌的web视图。
∙
∙ SGL——是一种基本的可隐藏于2D相关图形引擎 3D库——这个是基于OpenGL ES 1.0 APIs,目的是在于对该库中的硬件3D进行优
化加速,这其中高度化的3D软件光栅加速也包含在内。
∙
∙ FreeType ——位图和矢量字体的渲染绘制 SQLite ——是一个强大,轻量级的并且适用于所有应用程序的关系数据库引擎
2.3.4、Application Framework(框架层)
在Android系统平台中,最重要的核心部分非框架层莫属,Android系统的设计思想也涵盖其中,在此之前,很多平台的打造都是基于Linux内核而建立的。但是Android做到了超越以往任何一款移动平台并因此堪称成功典范。
由多个系通服务(System Service)共同所组成的框架层,这其中涵盖了组件管理服务、通话管理服务、服务电源管理服务、窗口信息服务、地理信息等相关服务。通过系统核心进程(System Core Process)将这些服务都是寄宿在其中。当程序运行时,每一个服务都会占据一个独立线程,发送消息以及传输数据是通过进程相互间的通信机制(Inter-Process Communication,IPC)这个桥梁渠道而得以实现。[1]
开发人员将核心应用程序的框架的使用,是基于应用程序的体系结构的简化性,可以避免不必要的重复累赘。通过任何相关的应用程序都能发布它的相关功能,同时可以在其他任何应用程序使用这些功能(但是需要服从框架执行的相关安全限制)。
所有的相关应用程序其实是一组服务以及系统,这其中包括: ∙ 视图(View)——这是一种扩展性的视图集合,具有良好的丰富性。对于构建应用
程序来说,必不可少。列表、文本框、网格、按钮都包含在其中,同时还包括了内嵌的网页浏览器
∙ 内容的提供者(Content Providers)——通过应用程序访问其他相关应用程序(比如
备忘录)中的相关数据,同时也能进行数据共享。
∙ 资源管理器(Resource Manager)——这其中包含了可以访问非代码的资源,比如
本地化字符串以及布局文件或者是图形。
∙ 通知管理器(Notification Manager)——这个管理器,可以在状态栏上以自定义式
警告的模式对所有应用程序进行通知功能的自定义显示。
∙ 活动管理器(Activity Manager)——这是用来对应用程序的生命周期进行有效管理
和控制。
2.3.5、Applications(应用层)
基于java语言来开发的Android的众多应用程序中,对于游戏,对大规模的运算分析和图像处理的需要是必不可少,正因如此,开源C/C++类库因此发挥其强大的作用。通过java语言编写的程序代码,或许会出现一些执行效率过低或者是移植成本过高的问题。所以,开发人员会根据C/C++来作为实现底层模块的基础,同时利用Android提供的交叉编译工具生成的类库将Java Native Interface(JNI)接口与上层Java实现进行交互的方式以此添加到应用中去。
与此同时,开发人员将框架层进行规避,直接调用Android系统中的特定类库,由C/C++的一些接口构成的NDK,开发人员可以用它来实现更高效率的特定调用功能的系统。[1]
3.系统需求分析 3.1 需求分析概述
软件开发完成的进度好坏以及该怎么去评判,这就是需求分析的重要关键之所在。现实情况却大相径庭,由于有些用户不了解计算机的相关专业知识,同时开发人员对部分相关业务的不了解,不精通,以及受到固定思维的影响,用户和开发人员往往对某一个相同问题有着不同的理解,这会对系统的相关功能的实现造成很大困扰。因此,开发者和需求用户之间应搭建沟通桥梁,建立有效的沟通渠道,最好将开发者置身于相关业务领域,了解客户真正需求,才能确保开发出的产品达到客户最佳预期效果和实际需要。
3.1.1功能需求分析
此次数独游戏程序设计一款小游戏,是基于Android平台之下设计并与之实现的,最后将在Android模拟器中其进行调试运行。
该游戏简单容易上手而且活跃性强,具有较强的益智性,可以锻炼人们的记忆能力,以及脑力开发,提高人类的数学思维能力和强大的运算能力,同时也有一定的娱乐性,让人愉悦身心的同时,通过益智游戏从而提高大脑的启发和锻炼。尤其对青少年思维,脑力,意志都有很好的锻炼,起到事半功倍的作用。使得智能手机与游戏软件对青少年未来教育有指南针似的帮助和指导性作用。
针对Android手机,此款数独游戏在设计上具有以下几种功能:
1、重来功能
设置重来功能目的在于实现用户输入错误答案,并且因为意外差错无法解开此题
而想要重新开始本题目。
2、下一关功能
设置下一关功能目的在于是实现用户完成一关游戏后可以进入下一关游戏界面。
3、解题功能
设置解题功能主要实现用户解答不出此题时候系统提示答案。
4、重出题功能
设置重出题功能主要实现用户因为各方面原因不想解答本题或者实在解不开此
题,想要切换到另一题目。
5、难易程度选择功能
设置难易程度选择功能目的在于实现用户根据自己的实际水平来选择适合自己
难度的题目,便于提高用户的兴趣和积极性。这其中分为:简单,中等,困难三个难度。
6、退出功能
设置退出功能目的在于实现可以退出游戏界面,返回模拟器初始界面。
3.1.2安全性需求分析
由于此款游戏不涉及用户个人隐私以及任何注册要求,打开软件即可操作使用,不会涉及用户隐私泄漏等问题。
用户主要是年轻的手机用户群,玩家只需要在操作手机界面进行点击安装运行就能够进行游戏的操作,能熟练上手,通俗易懂。不涉及任何暴力情节,或者不良信息,对玩家没有任何主观性的安全问题。
3.2功能模块要求分析
图2数独游戏功能模块
根据对数独游戏功能的分析和归纳,可以大体分为游戏主模块,游戏菜单模块,帮助模块,关于模块。退出模块。后面将会逐一介绍这几个模块的特点与功能。
3.3运行环境要求分析
(1) 硬件资源要求
装载了Android系统的智能手机。
(2) 软件资源要求
本机操作系统: Windows XP。
需要安装的相关安装包和环境配置版本:
Android sdk
JDK:jdk-7u51-windows-i586。
●eclipse-java-kepler-SR1-win32.zip
4、总体设计
4.1系统设计
数独是通过运用外界工具纸、笔进行演算推理,是一种简单逻辑数字推理游戏。参与的玩家只需要根据9×9盘面上的已知数字,推理出所有剩余空缺空格的数字,使得其最后结果满足每一行、每一列和每一个粗线宫内的数字均含一到九,而且不能重复。
4.1.1游戏的功能简介
“九宫格”是数独游戏的前身,它起源于中国,发源于中国,而现如今的数独游戏面盘是个9*9的九个小格子。在运行游戏时候,系统会随机产生一个新的棋局,这总共81个格子中,会有一部分的格子中给明了相应的数字,并以此为条件,进行相应空白处格子的填写。这其中就是需要运用到逻辑运算推理。然后玩家需根据已知条件和规则要在空白空格处填入1到9的数字。并且不得重复出现,只有在满足上述游戏约束条件之后才能视为通过此局游戏。 通过上述分析即可如下所示阐明运行步骤:
1、启动游戏后,一开始便是进入第一关卡的游戏。
2、当玩家点击“Menu”,即可进入菜单界面,如图所示:
图12“Menu”按钮
3、当游戏玩家选择“解题”按钮的时候,系统会弹出提示框,提示游戏玩家是否真的要集体,再随后根据玩家的确认选择进行下一步操作,也就是公布正确答案。
4、当游戏玩家将游戏界面上的空白格子全部填写完毕的时候,数独系统会自动检验判断所填写的数字是否满足数独游戏不重复的要求,当有错误的时候,游戏界面始终会停止在这一关卡;只有当空白处得数字全部填写正确的时候,才会在游戏界面最顶端提示“通过了”进入下一关卡。
如图所示:
图13 第一关通过的提示界面
5、当游戏玩家无法解出此关卡的数度游戏时候,选择“下一关”,就会进入下一关的游戏。
6、游戏玩家选择“重出题”,会将数度游戏的空白处自动打乱,重新出题目。 7、在菜单界面中单击“退出”
即可退出数独游戏界面。
4.1.2系统模块的划分
三大部分模块的划分,是根据之前的需求分析的要求采用模块化程序设计而得出: 图14用户功能模块
图15 UI界面
图16系统模块划分
如图所示,实线连接的是用户可见的模块,这些模块是用户能通过鼠标就可以操作的基本模块。而UI模块,主要是为了呈现给用户的界面。虚线连接的是用户不可见的模块,也可以称为数据处理模块(内部实现的模块)。
4.1.3模块内部关系的说明
每一个模块的内部之间的关系都是靠内部的数据来实现互通连接的,下面的流程图以此来介绍每个模块之间的联系。
图17模块之间的联系
在游戏的内核中,包括了所有游戏的有关信息,全部类成员的相关数据,而它的各个模块,是类的方法函数用于相应的按键事件。
绘图功能(UI):是为了给游戏玩家呈现出9*9的棋盘界面,显示出游戏的相关信息以及游戏菜单等,这些都需要XMAL来实现。
只有游戏玩家点击按键时候,才会触发UI的绘图功能,与此同时,后台的编程代码会处理相应的按键事件。
AI功能的实现:主要负责游戏内部的数据处理,是数独游戏的核心,几乎所有模块功能都与此有着密不可分的联系,这其中还包括了数独填充以及数独逻辑,数独验证等。其实,AI模块是由很多松散的方法组成,各个函数实现了单一的功能,便于修改以及程序移植。
4.2游戏模块设计
图18游戏主要模块
4.2.1游戏初始化模块
这是游戏的初始化状态,需要达到的效果是简洁干净大方,能吸引玩家兴趣,同时,操作界面清楚,容易让人上手,简洁明了。所以该数独游戏在打开同时,直接进入游戏第一关卡,去除一些不必要的开机动画。
4.2.2游戏进程模块
这个游戏模块可以根据不同经验和能力的玩家制定出难易程度相对不同的游戏级别和玩法,这样能迎合各级玩家的游戏水准和要求,使得新老玩家都能有兴趣使用此游戏,并迅速上手。所以该数独游戏设计了三个游戏难度,初级,中级,高级三个方向。
4.2.3游戏菜单模块
此模块设定了可以解题、本关游戏重来、重出题、下一关,退出这五个按钮,使得游戏更加有趣,让玩家有多重选择,不让他们因题目难以解开而失去兴趣,相应为玩家考虑,适当提供解题帮助或者选择下一关游戏。
4.3类功能的描述 4.3.1共有类
主类MyGame:此类是通过扩展和继承基类Activity以此来实现功能的,应当说,这是整个应用程序的关键入口。同时,也是主要依据收到来自Handle(Handle主要作用是接受子线程发送的数据, 并因此由此数据配合主线程更新UI,比如:玩家点击一个 Button按
钮 ,Android平台会分发事件到Button按钮上,以此响应你的上述操作。)的不同消息,来实现切换到不同的界面。
4.3.2游戏界面的相关类
(1)视图MyView类
MyView是数独游戏中最主要的类之一,所有的游戏界面、九宫格模型都会在此类中包含。同时此类还会负责绘制数独游戏棋盘,数独游戏逻辑等功能。
(2)菜单栏目onCreateOptionsMenu类
onCreateOptionsMenu类是数独游戏中的菜单,这其中包括了“重出题”、“重来”、“解题”、“下一关”、“难易程度”、“退出”等功能。
(3)数字键盘onKeyDown类
onKeyDown类是数独游戏中的键盘事件,主要功能是记录游戏玩家键盘上输入的数字,并将其显示在数独游戏的棋盘上。
4.4数独游戏所需的开发模式
Activity,人机交互的界面,Activity的对象可以调用View对象从而构建出丰富多彩的界面。游戏用户在进行相应的输入操作的时候,是在数独游戏界面上进行的。而与此同时,在Activity的对象中,也会接收到相关数据,并因此通过Internet对象中的一个叫putExtra的方法存储至Internet对象里面去。然后再通过Activity开启一个叫Service或Activity的对象,进而就能将Internet中的数据从当前的Activity对象传递到另一组件中去,随后进行后台的数据处理和运算。若输入的数据需要一个数据库来存入,那么则把此数据通过Handle的对象搭起一个新的线程。在这个新的线程当中,将该数据写到数据库里。为了便于了解其开发模式,我们将通过如下所示的流程图而展示出来:
图19数独游戏所需的的开发模式 上述的流程图对数独游戏所需的开发模式进行了清晰展现,它不仅仅可以将Android平台上的及那些基本组件加以合理的利用,与此同时,在在MVC的三层架构中的程序代码也能更加符合其特性和所需要求。以便有利于程序代码的阅读浏览以及未来的游戏功能的扩充和加强,对重用的频繁度和概率性的有显著的提高。
4.5游戏体系框架设计
图20 数独游戏体系框架
5、系统实现
5.1数独游戏流程框架
图21游戏流程框架图
5.2数独算法的实现
数独游戏的关键在于,要迅速检验用户玩家所填写的数字是否正确,这一功能的流程图如下所示:
图22 数独检验功能流程图
5.2.1算法的基本逻辑在数独中的体现
我们将对数独游戏算法类进行解析,这个类基本上是数学逻辑计算,通过一定的数独算法产生所需要的特定数独数组,并为了便于供其他类方便使用而通过特定的接口来实现。
二维数组对于此类的建立来说,是至关重要的,因为要用它来表示所有数独的矩阵。要使在矩阵中的每行,每列,每一小块的数字都不重复。我们理清游戏的游戏要求,便可以理解出该算法的基本思路,其内涵在于要从数字0到9中随机任意选取,与此同时,我们还要对它在这个9*9的格子中行、列、块进行验证,判断其是否符合游戏要求。当填写符合要求的时候,就可以继续填写下一个,如果不能满足条件要求的时候,再次选择一个排除刚才那个数字的随机数,然后再进行判断。当所有九个数字都还没有找到能够满足数字的要求,则返回处理,将最后一个取出的符合条件要求的数字进行新的重新取值,直到所有的数字全部填写正确。
当我们在求解数独游戏的同时,则会运用到回溯法,所有的解会按照一定的结构进行排列,然后再进行下一次搜索。一般解空间构造成一个树状结构,具有深度优先搜索的策略,通常情况下会有以下有两种方法:
1、当如果只需要一个解的时候,找到了相关的解即可停止。
2、当要求出所有的解的时候,需要进行“数的遍历”,以致找到所有的解。
在我们的意识里,所谓的回溯法,其实就是按照一种特定的搜索方法,进行组织性,协调性,防止其不必要的穷举式搜索。她的最基本方法就是回溯搜索。本方法适用于一些相当大的组合数的解决方案。
在解决空间树等问题中,按照深度优先搜索策略的回溯法是其最优解决方案。首先从根节点开始进行搜索。当到达空间树的任意一点。所以需要确定这些结点里是否包含了该问题的与之相关的解决问题的方案。如果没有发现与之相对应的符合要求的结点,就跳过搜索该结点的相关子树。并随后逐层返回到原先的根节点。否则,就要对该子树进行深度优先搜索。
我们要搜索查找算法中基本思想,这其中的回溯法,就是关键:在已知的一问题中,通过对题意已经划定好的所有可能的边界解决区域(俗称一种相对应的可能解决),与此同时,我们需要根据已知条件得到相应的约束条件。通过在根据搜索的搜索方式时,利用深度搜索中的所有可能的解决方案,使用该方案的第一层找到一个可能解,这样的搜索解决方案,会使得结果能符合所要求的约束条件。并以此作为出发点,以便找到下一个的可能解,将搜索范围扩大到第二层。如果在第二层找到的话,就继续深入到第三层。按照上述搜索方式继续下去,直到找到所有层的全部可能解,则这个问题的就得以完整解决。如果所有可能解在第二层都不满足约束条件,则需要返回到第一层,放弃其原先的可能解,使用了第一层的下一
个可能的解(即回溯),以此类推,寻找第二层的可能解。
回溯法的优势相比于其他的穷举式的搜索方法,在于它不需要对所有层的每个可能解都进行遍历搜索,这样既费时又费力。它的高效性在于能避重就轻,能对无法满足条件的就抛弃该可能解,进而对下一个可能解进行寻找,而无需其余部分的下层解。如果约束条件在当前层次的所有可能解中都没有能实现满足的时候,则需要返回到上一层,抛弃原先的可能解,进行重新遍历搜索。
根据上面的分析,总结出一些数独的游戏规则推理,以便于我们分析数独问题相关的约束条件:
1、每一个小格子里面的数值区间范围在1-9内,不能超出这个区间;
2、每一个小格子的数字在当前所在行中不得重复,也就是说1-9内在这一行的9个空格中只能出现一次;
3、每一个小格子的数字在当前所在列中不得重复,也就是说1-9内在这一列的出现的次数只能是一次;
4、每一个小格子的数字在每一个3*3的小宫格内不能重复出现,也就是说在这小方块中,9个数字不允许重复出现两次以上。
综上所述,通过约束条件进行筛选的回溯法,在剔除掉那些不可能的解后,留下的就是该问题的至少一个以上的解。
5.3游戏初始化界面模块
5.3.1游戏界面的实现 在建立数独数据之前,程序需要一个9*9的数据例如:
"[***********][***********][***********][***********]463785129 "这样的81个数字要依次从第一行开始从左往右按顺序排列在9*9的九宫格内。
我们需要设置一个二维数组int[9][9],以便存储数据。数据随机变为0是根据游戏玩家的不同选择而造成的。
根据不同级别要求,因此我设计了两个数组,oldData保存原有数据,而data保存当前数据,对于原有数据不能进行修改和清除,对oldData中为0的数据可以进行修改和清除
将方法“easyData”设定为final关键字,目的是不允许它有子类,既不能继承。
图23 游戏界面实现代码
5.3.2在onDraw方法中绘制数据
onDraw(),是为重写绘制方法,在onDraw()方法中,主要是绘制游戏界面所需要的9*9的九宫格数组,游戏界面背景颜色,游戏所填写数字的颜色,以及每个小格子的背景颜色。程序实现代码片段如下所示:
绘制相关界面,这其中包括棋盘背景、九宫格的水平细线以及垂直线:
图24 绘制界面的实现代码
绘制数据:
图25绘制数据的实现代码
5.3.3编写按键事件
在onKeyDown类中,设置了KeyCode ,KeyEvent 和event三个变量,目的是通过KeyEvent.KeyCode来判断玩家在键盘上输入的数字是几,并通过无返回值方法setData来在棋盘上显示出相应的数字,其中,1-9是放置键盘上的输入数据,而0则是代表清除数据。程序代码片段如下:
图26键盘事件
在setData这个方法中,原有数据为零的可以清除和放置数据。
5.3.4检测游戏填充结果
根据数独游戏的游戏规则,游戏玩家需要填充81个空格之后,必须要同时满足每行,每一列的每个数字都不得重复出现两次以上,这其中包括小九宫格内的3*3的九个数字也必须不能相同。并将其作为后期游戏结果检测的重要条件,因此编写chkGameOver检查是否完成游戏。
首先是检查数独游戏程序是否结束:
图27 chkGameOver方法
其次显示游戏标题,提示玩家目前关卡数:
图28 setGameTitle方法
行检测:
首先对各行进行检测,提供了检测的行内的九个数字是否有重复数据的方法“is over()”,该方法遍历这一行中所有的九个数字,当遍历到某个数字时,检测该数字后面的数字是否出现了重复。举个例子,例如:当我们检测到第4个数字是9时,则检测第5-9个数字是否出现过9这个数字,若是出现重复,则会停止检测,游戏失败,所以此功能既可以既可以避免重复检测的浪费,同时也能避免遗漏的精确。
图29 行检测实现代码
列检测:
列检测的代码类似于对行的数据检测,但是以此同时还需要对每行进行检测,因此数独游戏程序设计了对行数据的检测方法isOver (),该检测方法的代码如下:
图30 列检测实现代码
3*3小九宫格的检测方法:
通过上述剖析,我们除了要对九宫格中的行与列进行数据重复检测以及验证结果之外,我们还需要对每一个3*3的小九宫格内的所填写的数字进行重复检测和检验正确性,这是因为数独游戏的约束条件所致,为了避免出现重复现象而不符合数独游戏规则。检测的原理其实与行,列检测相同,只是对9*9的大数组进行细分,但是需要计算出九宫格内数字的所在位置。变量i和j指定了检测九宫格的位置,数独单元格中一共有3*3个九宫格,用以下程序设计完成九宫格内对重复数字的检测:
图31检测小九宫格代码
5.4 游戏菜单模块
5.4.1基本功能完成,添加菜单功能
建立一个onCreateOptionsMenu类,这其中设置“重出题”、“重来”、“解题”、“下一关”、“难易程度”和“退出”,并使用super关键字来访问和调用onCreateOptionsMenu类的Menu成员变量。
图32 菜单功能
5.4.2添加菜单事件:
当玩家点击屏幕菜单上的任意一个按钮时候,会调用该类来处理菜单事件,在“下一关”界面中实现起来比较简单,只是需要判断游戏玩家是否真的是需要进入下一关即可。当玩家点击“退出”按钮时,会向Activity发送一个Handle消息,通知控制器切换屏幕。
图33 添加菜单事件
在菜单事件中,还根据不同按钮功能设定了以下几种私有方法:
1、showAll()
此方法是有关解题的方法她将使用easyData中相应关卡的数据,并将它依次显示在棋盘上,以此来实现解题功能。
2、msg()
此方法的作用在于对话框里的有关信息将通过此方法来显示。
3、selHard()
此方法是用来调整难易程度,根据不同选择,棋盘上的空白格子数也会随之发生变化。
4、closeGame()
此方法的目的在于达到实现对游戏界面的退出功能的实现化和作用化。
图34 菜单功能实现
6、系统运行与调试
6.1游戏测试概述
当游戏软件创建好之后,必须要进行实战检验,要对现实中所检验出的结果进行评估,以便分析其目前状态是否达到了预期目标和理想设计标准。以此同时,我们还需要进行有效的调试和操作,通过不断调整和解决所发现的相关问题,解决软件的缺陷和不足。以此提高产品的质量和性能。作为软件测试的重要组成部分,游戏测试是软件测试的所有常用的功能,但是游戏本身具有一定的特殊性,此外,游戏主要是测试包括两部分:
对于在测试这个环节,相对于整个软件开发过程来说,这是一个很重要的一个环节,它关系到整个软件的生命周期的预测以及存活性。在所有过程中的初始化操作就是要求程序员
对每个阶段的集中性检测,以此来确保相应的各个模块都能达到预期目标,各司其职。
(1)对游戏的性能测试
当下所流行的各种游戏,都是在一定程度、上结合社会发展要求,对现实世界进行一种虚拟化,角色化的模拟境况。与此同时,他还会包含了一部分人类发展到一定阶段所出现的各种特性。它也涉及了一部分人体工程学中的易操作性和娱乐性等相关特点
由于游戏在一定的程度上是模拟现实世界的一种虚拟境况,所以他不仅仅包含了人类文明社会的一部分特性,与此同时,还会涉及到操作简单可玩性,丰富的娱乐性等一些特点。因此,我将从三个部分来阐述游戏的相关测试环节:
①对游戏情节的相关测试:这是针对游戏的主要相关故事情节的主线进行铺路和全方位测试,要对情节与相关游戏人物和任务环境进行评估。
②对游戏世界的平衡测试:能力平衡和经济平衡是在游戏世界的平衡性得到了集中体现,公平竞争性是测试平衡性的目的所在和基本保证。
③对游戏文化的测试:人物的历史背景塑造,以及角色搭配,游戏场景搭建,游戏关卡主题的相关设计都是对于游戏世界的整体风格来说至关重要。
6.2测试环境
数独游戏的测试方式可以通过两种环境来实现:
1、一种是创建 Android 虚拟设备AVD ,在AVD中进行相关游戏程序代码的测试与调试,所以万事之首就是必须要创建一个AVD。Android 2.3.3 在目前的AVD虚拟设备中式最常用,也是通用性,兼容性最好的测试设备版本。
2、我们也可以以apk的文件形式将数独游戏代码导入到一部Android 的智能手机里,进行实体机的测试,所以我们必须事先准备好一部Android 手机,通过数据线与电脑连接,将eclipse里游戏文件夹的bin目录下的数独游戏文件以apk形式导入到手机里,再在手机的文件浏览器中找到相应文件,安装运行即可打开。
6.3游戏效果
首先启动数独游戏,随后点击手机桌面上一个叫“数独”游戏图标按钮,如下图所示:
图35模拟器界面
随后游戏界面将进入第一关卡游戏界面,如图所示,从而玩家可以开始进入游戏状态。
图36 游戏初始化界面
6.3.1游戏菜单栏效果:
当玩家单击“MENU”按钮时,会进入菜单界面,然后根据玩家的选择进行操作,如图所示。
当玩家单击“下一关”按钮时,游戏界面会从当前游戏关卡跳转到下一关卡界面中去,如图所示。
在菜单界面上单击“解题”按钮时候,数独游戏就会将数组里关于这一关卡的答案全部排列显示在棋盘空白的空格处。
图37 菜单栏效果
6.3.2游戏主界面初始化效果图(第一关):
图38 游戏第一关
6.3.3游戏难易程度选择效果图:
在菜单界面上点击“难易程度按钮”,会出现“简单”、“中等”、“困难”三个等级。选择不同难度的数独游戏,不同难度的速度游戏主要是棋盘上空白格子的数量的不同,因此会大大影响游戏玩家的取胜所耗费的时间和思考精力。与此同时,也提高游戏玩家的浓厚兴趣和闯关的难度性。
图39 选择游戏不同的难易程度
6.3.4游戏通关效果图:
当游戏玩家将数独游戏界面上所有的空白格子都全部填满数字时,游戏系统就会自动检验所填写的数字准确性和正确与否,如果存在错误,游戏界面不会出现通关提示;当空白处的数字全部填写正确的时候,就会出现游戏通关的界面。
图40游戏通关效果
经过调试与运行,该数独游戏运行后游戏画面基本流畅,没有相对较大问题。通过测试,以及经过游戏玩家和开发者的测试和体验,并未出现死机不能进行游戏,出现错误答案等不能正常使用该数独游戏的状况出现
7、总结与期望
这次毕业设计对于我来说,意义非凡,收获也非常的大,让我从一开始对Android世界一知半解,现在逐步了解并掌握了他的基本理论。为了这次毕业设计,我也翻阅查找了不少书籍和文献资料,从零开始,一步一步一个脚印,在结合网络视频学习中不断摸索。在该数独游戏的设计开发过程中我遇到过不少困难,比如一开始eclipse打不开这样最基本的问题,以及到后来java语言的不扎实牢固造成的语法错误。虽然这过程很不容易,也让我付出了不少汗水和时间。但是过程要比结果更重要,通过这一毕业设计,我在这其中学到了很多经验和
知识,与此同时也激发了我对Android系统的浓厚兴趣和较强的自主学习能力,让我在今后计算机职业规划发展中,会更加倾向于从事在Android系统里的各项软件研究和探索,并同时希望能自己够在这方面有更加长远的发展和深造。
当然,现阶段,我的Android游戏开发还是很基础,很浅显的,由于java语言功底的薄弱,开发出来的东西还是比较基础化,该数独游戏在我设计的现有基础上还可以继续完善,并开发出其他功能,这样不仅能够使游戏界面更加美观,而且可以附加其他功能,比如给出空格处有多项选择数字,添加9种彩色九宫格,要让这9种颜色和1-9数字的要求一样,或者9个数字以国际象棋来代替,以此来增加难度之类的功能等,这样会提高游戏的趣味性和难度性,通过创新,使得古老的数独游戏继续老枝吐新芽,让传统游戏在新时期高科技智能手机的世界里发扬光大。
参考文献:
[1] 范怀宇.Android开发精要[M].北京:机械工业出版社,2012.
[2] 朱桂英.Android网络开发技术实战详解[M].北京:电子工业出版社,2008.
[3] 余志龙.Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009.
[4] 刘斌.Java Web整合开发[M].北京:电子工业出版社,2008.
[5] 张孝祥.Java就业培训教程[M]. 北京:清华大学出版社,2007.
[6] 苏志同,石绍坤,李晋宏,手机游戏开发架构的研究[J],计算机工程与设计,2010.
[7] 杨丰盛.android应用开发揭秘[M].北京:机械工业出版社,2010.
[8] 张海藩.软件工程导论[M].北京:清华大学出版社,2003.
[9] 李宁等.Android/OPhone 开发完全讲义[M].北京:水利水电出版社,2010.
[10] 韩超,梁泉.Android系统级深入开发:移植与调试[M].北京:电子工业出版社.2011.
[11] 吴亚峰,苏亚光.Android应用案例开发大全[M].北京:人民邮电出版社,2011.
[12] 李兴华.Java开发实战经典(名师讲坛)[M].北京:清华大学出版社,2009.
[13] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.
[14] 李钟尉,周小彤,陈丹丹.Java从入门到精通[M].第二版.北京:清华大学出版社,2010.
[15] 高焕堂.Android应用框架原理与程式设计36技[M]. 北京:清华大学出版社,2008.
[16] 朱桂英.Android网络开发技术实战详解[M].北京:电子工业出版社,2012.
[17] 韩超,梁泉.Android系统级深入开发:移植与调试[M].北京:电子工业出版社,2011.
[18] John Lewis.Java Software Solutions[M].Pennsylvania: Publishing House of Electronics Industry,2007.
[19] 李苑.基于Android移动平台的警务查询系统[D].南昌:南昌大学,2009.
[20] 耿东久,索岳,基于Android手机的远程访问和控制系统[J],计算机应用,2011.
致 谢
通过这次毕业设计,我要首先感谢我的毕业设计老师XXX老师对我的大力支持和悉心指导,感谢各位老师和同学们给我提供的帮助。
在这次数月的毕业设计过程中,我从一个完全不了解Android系统的旱鸭子到现如今基本掌握其框架以及开发所需要的基本要求的菜鸟。经历了完全不懂,调试不出,编写不来的各种困难和失败,秉着从哪里跌倒就从哪里爬起来的精神。让我从中学到了自主学习的能力,以及学会面对困难,自己想办法,迎刃而解。同时,我也学会了使用图书馆各种文献资料和书籍,让自己能结合相关专业性书籍去辅助自己。
大学生涯即将结束,我也即将离开校园,背上行囊而步入社会,告别这四年的大学生活,即将为我的20余年的学生生涯划上一个圆满的句号,但是面对未来,这,仅仅才是一个未完结的逗号,我新的人生才刚刚开始。在这四年大学时光中,我学到了很多,同时也收获了很多人对我的帮助,因此,我需要在此感谢他们,感谢他们对我的帮助。
首先,最感谢的是我的指导老师何富贵老师,从毕业设计课题的学习、毕业论文的选题、相关资料的收集、论文开题报告,中期报告撰写、以及到最后的毕业论文的成稿,何富贵老师都给予了我很多的支持、相当大的关怀和最大的帮助。在我毕业设计遇到困难的之际,何富贵老师帮我出谋划策,寻找解决方案,因此让他操心受累。何富贵老师那种严谨至上的治学精神,认真负责的工作作风,循循善诱的指导我修改论文的耐心,这些都让我看在眼里,感动在心里,启迪在人生的未来长河里。何富贵老师渊博的学识、诲人不倦的教书育人的精神、秉着严谨的学术作风以及爱岗敬业的品质、孜孜不倦的友善都让我备受感动、获益匪浅,这必将有助于我在今后的人生道路上,学会不断拼搏,不怕困难,迎难而上,坚持自己最初的梦想和顽强意志,相信自己的能力。
对我而言,这次毕业设计不仅是完成学分、完成毕业任务,而且是我真正开始进入社会摸爬滚打、在职业道路上披荆斩棘的一次洗礼。它让我真正地接触到了计算机行业的实践,学习到了很多在课堂上根本学不到的技术知识,增加了实践,将理论知识运用到实际中,让书本知识变成实际可用的软件程序作品,同时开阔了我的视野。这宝贵的经历为我的大学生涯画上了完满的句号,同时也为我的未来计算机职业生涯的开始打下了坚实的基础。
我还要感谢我身边的同学、朋友,感谢他们在学业上对我的支持鼓励和帮助。
感谢我的父母,为了我的学业生活操劳,费尽心血抚养我成人,我会永远深深的爱着他们。
最后感谢评审本毕业论文的专家和老师们,感谢您的认真审阅,正因您的辛勤付出,才有了我们如今的成就,各位老师,你们辛苦了。