毕业论文-基于android平台的手机数独游戏设计_第1页
毕业论文-基于android平台的手机数独游戏设计_第2页
毕业论文-基于android平台的手机数独游戏设计_第3页
毕业论文-基于android平台的手机数独游戏设计_第4页
毕业论文-基于android平台的手机数独游戏设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

2013届毕业设计论文题目基于ANDROID数独游戏设计2013年6月摘要移动互联网时代的到来极大的改变了我们的生活,而ANDROID是一种以LINUX为基础的开放源码操作系统迅速占领了智能机操作系统,所以在ANDROID环境下开发显得尤为必要。ANDROID是开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,ANDROID平台具有无限的吸引力。本文就在分析讨论ANDROID手机软件开发技术原理的基础上,为用户开发出基于ANDROID平台的数独游戏的软件。通过对ANDROID系统架构和应用开发进行初步研究,设计一款数独游戏。在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的开机动画,菜单界面、屏幕绘制、时间控制、布局算法等进行了设计。本文详细介绍了在ANDROID平台上以JAVA为语言编写游戏的过程,最终实现了一个界面友好、操作简单的手机益智游戏。关键词ANDROID数独智能机THEDESIGNOFSUDOKUGAMEBASEDONANDROIDABSTRACTARRIVALOFTHEMOBILEINTERNETERAHASGREATLYCHANGEDOURLIVES,ANDANDROIDISALINUXBASEDSYSTEMQUICKLYOCCUPIEDTHESMARTPHONEOPERATIONSYSTEM,ANDROIDDEVELOPMENTISPARTICULARLYNECESSARYUNDERTHECIRCUMSTANCESANDROIDSBIGGESTFEATUREISITSOPENARCHITECTURE,NOTONLYHASAVERYGOODDEVELOPMENTANDDEBUGGINGENVIRONMENT,BUTALSOSUPPORTSAVARIETYOFSCALABLEUSEREXPERIENCE,INCLUDINGRICHGRAPHICALCOMPONENTS,MULTIMEDIASUPPORT,ANDPOWERFULBROWSERTHEREFORE,FORSOFTWAREPROFESSIONALS,ANDROIDPLATFORMHASUNLIMITEDAPPEALINTHISTHESIS,THEANALYSISANDDISCUSSIONOFANDROIDMOBILEPHONESOFTWAREDEVELOPMENTTECHNOLOGYPROVIDEUSERSWITHBETTERPLATFORMTOTHESUDOKUBASEDONANDROIDMETEOROLOGICALSOFTWARETHROUGHTHEANDROIDSYSTEMSTRUCTUREANDAPPLICATIONDEVELOPMENTFORPRELIMINARYRESEARCH,WEDESIGNEDASUDOKUGAMEINTHESYSTEMBASEDONTHEANALYSISOFTHEDETAILEDREQUIREMENTS,WEDESIGNTHEGAMEINTHEGAMEMENUINTERFACE,THESCREENRENDERING,TIMECONTROLANDLAYOUTALGORITHMTHISTHESISDESCRIBESTHEWHOLEDEVELOPMENTPROCESSOFANDROIDBASEDSMARTPHONEGAMEUSINGGOOGLEANDROIDSDKFINALLY,WEHAVETHESOFTWAREWITHFRIENDLYINTERFACEANDSIMPLEOPERATIONKEYWORDSANDROIDSUDOKUSMARTPHONE目录摘要IABSTRACTII第一章绪论111研究背景1111手机游戏的发展以及特征1112数独游戏背景212ANDROID手机游戏的市场价值213本文主要工作及章节结构3第二章ANDROID平台概述421ANDROID系统简介422ANDROID系统特性423ANDROID操作系统框架结构5231应用程序6232应用程序框架6233库与运行环境7234内核724ANDROID应用程序构成8241ACTIVITY8242BROADCASTRECEIVER9243SERVICE10244CONTENTPROVIDER1025ANDROID应用程序的生命周期11第三章数独游戏的设计1331游戏功能简介1332游戏策划以及准备工作1433游戏的架构16331各类的介绍16332游戏的框架简介18第四章基于ANDROID平台数独游戏的实现1941欢迎界面的设计和实现19411主类KLSDACTIVITY实现19412欢迎界面WELCOMEVIEW类的实现20413WELCOMEVIEWDRAWTHREAD类和WELCOMEVIEWGOTHREAD类的实现21414HELPVIEW类和ABOUTVIEW类的实现2242游戏界面相关类的实现23421游戏界面GAMEVIEW的实现24422时间线程TIMETHREAD的实现2543数独算法类的实现25431数独算法基本逻辑26432检测填充结果2744游戏的测试和运行29441游戏测试概述29442测试环境30443游戏运行结果31第五章总结和展望3551总结3552展望35参考文献36致谢37第一章绪论11研究背景111手机游戏的发展以及特征手机游戏,是指用户运行在移动终端的应用程序,具有网络连接功能,能够满足用户随时随地进行游行的需求,它需要一定的硬件环境和一定的系统环境作为其运行的基础。手机游戏吸引用户最大的特点就是其便利性,由于其是移动终端,所以用户可以随时随地进行游戏。正是因为其便利性,手机游戏市场有了很大的发展。在美国,手机游戏作为美国手机用户最喜欢的移动应用之一,在IPHONE和ANDROID等智能终端推出后发展迅速。手机游戏常见的特征可以总结如下1庞大的潜在用户群全球在使用的移动电话已经超过10亿部,而且这个数字每天都在不断增加。在除美国之外的各个发达国家,手机用户都比计算机用户多。手机游戏潜在的市场比其他任何平台,比如PLAYSTATION和GAMEBOY都要大。2便携性与移动性在控制台游戏时代,GAMEBOY热销的一个原因就是便携性人们可以随时随地沉浸在自己喜欢的游戏中,还可以随时随地抢购自己喜欢的装备或宠物。和游戏控制台或者PC相比,手机虽然可能不是一个理想的游戏设备,但毕竟人们总是随时随身携带,这样手机游戏很可能成为人们消遣时间的首选。手机便携性、移动性的特征更能满足用户随时随地玩游戏的需求,用户利用排队、等车的时间进行游戏,手机游戏碎片化的特性凸显。调查显示,298的用户在用手机玩游戏以后电脑端玩游戏的时间减少,手机游戏已经开始抢夺电脑游戏时间。224的用户手机游戏时间越来越长,仅有10的用户时间变短,手机游戏已逐渐成为一种普遍的娱乐方式。3支持网络因为手机是网络设备,在一定限制因素下可以实现多人在线游戏。随着移动网络的发展,移动游戏也越来越多的被大家接受,对于之前长期通知市场的掌机来说造成了不少的冲击。市场研究公司IDC和APPANNIE报告显示2013年第一季度IOS和ANDROID平台游戏业务营收是掌机的3倍。112数独游戏背景数独的前身为“九宫格”,最早起源于中国。但当时的算法比现在的更为复杂,要求纵向、横向、斜向上的三个数字之和等于15,而不是数字不能重复。儒家典籍易经中的“九宫图”也是来源于此。到了18世纪末,瑞士数学家莱昂哈德欧文又发明了一种叫做“拉丁方块”的游戏,之后不久,美国的一家数字逻辑游戏杂志开始刊登这类游戏,使此类游戏得到良好发展,之后又在日本得到了广泛的传播。2004年,第一个“数独”游戏被刊登上了英国泰晤士报的封面,此时开始数独游戏才真正为世界所知晓。数独游戏的规则很简单,只需要在空格处填写19的数字,并保证每个数字在每个九宫格内只出现一次,而一般的游戏过程是系统随机生成一个棋局,然后玩家需要在空白处填上相应的数字使其满足游戏规则。由于此类游戏操作简单,不需要特定的语言基础,也不需要进行数字运算且可玩性高、锻炼思维、开发大脑,所以很快风靡全球。12ANDROID手机游戏的市场价值ANDROID是GOOGLE开发的基于LINUX平台的开源手机操作系统。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍2。GOOGLE与开放手机联盟合作开发了ANDROID,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和TMOBILE在内的30多家技术和无线应用的领军企业组成。GOOGLE通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。ANDROID平台上的游戏相比应用软件,不需要进行严格的市场细分,不需要针对目标用户量身定制。这是因为游戏玩家的核心需求是统一的,那就是娱乐与打发时间乃至更高层面的竞技需求和群体认同需求,这种需求附着于特定的社会发展阶段,不受地域的限制,甚至于能够穿透文化壁垒。因此,绝大多数种类的游戏都具备传染性与普适性,每一个售出的游戏都将会点燃周围潜在玩家的激情,最终吞噬整个需求市场。由此可知,几乎每一个ANDROID手机用户都是游戏的需求者,都是潜在的顾客,现今的1000多万ANDROID用户不过是冰山一角,随着ANDROID手机市场进一步壮大,游戏的市场容量将具备更大的增长空间3。13本文主要工作及章节结构整篇论文共分为六个部分,其主要内容安排如下第一章引言。介绍论文的研究背景、目的和意义。包括课题的背景资料简介、国内外研究现状和发展趋势、深入地介绍了课题研究的价值。第二章ANDROID平台概述。这部分主要是介绍了智能手机系统现状、ANDROID的功能特征、ANDROID系统的特点以及ANDROID的体系结构。第三章数独游戏的设计。对游戏相关策划,功能以及架构进行介绍。第四章数独游戏的实现。这部分主要介绍了游戏的界面、游戏中的逻辑处理以及该游戏今后的改进和优化。第五章总结和展望。对整篇论文加以总结与回顾以及对未来的展望。第二章ANDROID平台概述本章将介绍ANDROID这个基于LINUX开发平台,首先我们会介绍ANDROID操作系统,然后讲述其特性,接着讲述其系统框架,其次我们会重点介绍其应用程序的构成模块,最后会介绍其生命周期。21ANDROID系统简介ANDROID是谷歌公司发布的手机操作系统,它是基于LINUX平台的开源手机操作系统,谷歌公司将要把其打造为基于移动终端的真正开放的移动软件平台,不仅拥有移动电话所需要的工作软件,而且在专利权方面能够不侵犯他人权利去推动移动互联网的创新。谷歌公司为了开发ANDROID,与开放手机联盟进行了合作,手机开放联盟由全球30多家移动开发和手机应用的领先企业组成。谷歌公司不仅仅和运营商达成了合作关系、而且与设备制造商以及开发商保持长期合作,目的就在于利用其优势建立移动软件平台,其特点是标准化、开放式的。ANDROID是谷歌公司未来企业战略的一部分,其目的是为了在任何时候任何地点能够提供信息4。22ANDROID系统特性ANDROID系统特性如下所示1应用框架ANDROID系统组件,用于开发流程,两个特性可重用性和可替代性。2DALVIK虚拟机在ANDROID系统中,DALVIK虚拟机是一种JAVA虚拟机,是GOOGLE公司自主开发,其代号为DALVIK,占用资源比较小,运行效率比较高。3集成浏览器引擎WEBKIT,其特性是开源。4优化图形强大的自定义二维图形库。基于OPENGLES10标准的3D图形功能,在移动3D开发中有着至关重要的地位。5SQLITE数据库SQLITE提供结构化的数据存储。它是一款轻型免费的且开源的数据库,设计目标是嵌入式的。它具备占用资源低、需要的内存空间少、处理速度较快,并且还支持事务处理功能等优点。6多媒体支持支持各种通用的音视频和静态图像格式MPEG4、MP3、JPG、PNG、GIF、AAC、H264、AMR。7GSM技术依赖硬件GLOBALSYSTEMFORMOBILECOMMUNICATIONS,全球移动通讯系统,俗称全球通,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。8蓝牙,EDGE,3G,ANDWIFI依赖硬件蓝牙和WIFI都是一种短距离的无线连接技术,在短距离内可以实现话音和数据的无线传输。EDGEENHANCEDDATARATEFORGSMEVOLUTION,是增强型数据速率GSM演进技术。9CAMERA,GPS,COMPASS,ANDACCELEROMETER依赖硬件GPSGLOBALPOSITIONINGSYSTEM,即全球定位系统。它是一个由覆盖全球的24颗卫星组成的卫星系统。COMPASS是一个开放源代码的JAVA搜索引擎框架。10强大的开发环境包括一个设备模拟器,调试工具,内存和性能检测,以及ECLIPSE11IDE的开发插件。ECLIPSE集成开发环境。23ANDROID操作系统框架结构ANDROID作为一个开源的移动设备的平台,其软件层次结构自上而下分为四个层次,分别是应用程序APPLICATION、应用程序框架APPLICATIONFRAMEWORK、各种库LIBRARIES和ANDROID运行环境RUNTIME、LINUX内核LINUXKERNEL。图21GOOGLE手机操作系统平台ANDROID的架构模型231应用程序突破传统思维,提供更好的用户体验。ANDROID将会移植一系列的核心应用,包括EMAIL客户端,SMS程序,日历,GPS地图,浏览器,联系人等等。所有的应用程序都是由JAVA语言完成的。应用程序是无界限的,可以在平等条件下创建,还可以轻松地嵌入WEB,可以并行运行5。232应用程序框架ANDROID应用程序由一个或多个组件组成,ANDROID的应用程序框架为应用程序层的开发者提供APIS,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供的首先包含了UI程序中所需要的各种控件例如VIEWS视图组件包括LISTS列表,GRIDS栅格,TEXTBOXES文本框,BUTTONS按钮等。甚至一个嵌入式的WEB浏览器。一个ANDROID的应用程序可以利用应用程序框架中的以下几个部分ACTIVITY活动,BROADCASTRECEIVER广播接收者,SERVICE服务,CONTENTPROVIDER内容提供者233库与运行环境ANDROID包含一套C/C库,能被系统中不同的组件使用。这些功能通过ANDROID应用框架展现给开发人员。下面列出一些核心库1SYSTEMCLIBRARY从BSD继承来的标准C系统函数库,也是系统中最为底层的库,是专门为基于嵌入式LINUX的设备制定的。2MEDIAFRAMEWORK该库支持多种常用的音频、视频格式的回放和录制,同时支持静态图片文件,包括MPEG4、H264、MP3、AAC、AMR、JPG和PNG等。3SURFACEMANAGER用于管理不同应用对图形显示子系统和2D和3D图形层的访问。4WEBKIT一个时尚的WEB浏览器引擎,为ANDROID浏览器和内嵌的WEBVIEW提供实现。5SGL隐藏的2D图形引擎。63DLIBRARIES基于OPENGLES10APIS实现的库,该库可以使用硬件3D加速,或者高度优化的3D软加速。7FREETYPE位图和向量模式的字体绘制。8SQLITE一个强大的,轻量的关系型数据库引擎,用于所有的应用。ANDROID运行时ANDROID包含一组核心库,提供了JAVA语言核心库内的大部分功能。ANDROID运行环境主要指的是虚拟机技术DALVIK。DALVIK虚拟机依赖LINUXKERNEL来实现一些潜在功能,例如线程和底层内存管理。DALVIK虚拟机和一般JAVA虚拟机JAVAVM不同,它执行的不是JAVA标准的字节码而是DALVIK可执行格式DEX中执行文件,该格式的文件经过优化占用很小的内存。在执行的过程中,每一个应用程序即一个进程LINUX的一个PROCESS。二者最大的区别在于JAVAVM是以基于栈的虚拟机STACKBASED,而DALVIK是基于寄存器的虚拟机REGISTERBASED6。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。每个ANDROID应用程序都在DALVIKVM的一个实例中运行,这个实例驻留在一个由LINUX内核管理的进程中。234内核ANDROID使用LINUX26内核来提供系统的核心服务,例如安全机制,内存管理,进程管理,网络堆栈。ANDROID更多的是需要一些与移动设备相关的驱动程序。其主要的驱动有显示驱动DISPLAYDRIVER、FLASH内存驱动FLASHMEMORYDRIVER、照相机驱动CAMERADRIVER、音频驱动AUDIODRIVER、WIFI驱动CAMERADRIVER、键盘驱动KEYBOARDDRIVER、蓝牙驱动BLUETOOTHDRIVER、BINDERIPC驱动ANDROID一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能7。24ANDROID应用程序构成ANDROID应用程序与其他很多计算机平台的应用程序不同,他们没有唯一的启动入口,一个ANDROID应用程序是由多个不同组件组合而成,组件间通过INTENT实现通信。ANDROID系统的基本组件包括ACTIVITY、SERVICE、BROADCASTRECEIVER和CONTENTPROVIDER等,要实现组件间通信,还需要INTENT消息组件。并不是每个ANDROID应用程序都必须具备这四个组件,很多时候只需要这四种中的某几种就可以了。除此之外,应用程序的所有组件还都必须在ANDROIDMANIFESTXML中声明8。这是一个XML配置文件,这个配置文件用于定义应用程序的组件、组件的功能及必要条件等。这个配置文件是任何一个ANDROID应用程序所必需的。241ACTIVITYACTIVITY可以说是开发人员最常用的组件,同时也属于ANDROID最基本的组成部分之一。ANDROID程序中,一般一个ACTIVITY代表手机屏幕上的一屏。举例来说,如果将手机比作一个浏览器,那么一个ACTIVITY就相当于一个网页。在ACTIVITY中,可以添加多个视图,然后为这些视图添加一些事件处理。这些视图可以是按钮、文本框、列表等。可以看到,ACTIVITY的概念和网页的概念相当类似。一般一个ANDROID应用是由多个ACTIVITY组成,同时这些ACTIVITY相互之间可以进行跳转,例如,按下某个ACTIVITY中的BUTTON按钮后,可能会跳转到一个其他的ACTIVITY。不过和网页跳转稍有不同,ACTIVITY之间的跳转可以有返回值,例如,在ACTIVITYA跳转到ACTIVITYB后,那么当ACTIVITYB运行结束时,可能会返回给ACTIVITYA一个值。在多个ACTIVITY交流的过程中,这种返回机制是相当实用的。当用户进入一个新的屏幕时,之前的屏幕会转入暂停状态,并且保存在历史堆栈中。正是由于历史堆栈的存在,用户可以通过返回操作,返回到之前打开过的所有屏幕。ANDROID默认的是将应用程序从开始到当前的每一个屏幕都保存到堆栈中,不过与此同时,ANDROID还提供了很方便的机制,让开发人员自定义某个屏幕是否需要保存到历史堆栈。ACTIVITY的跳转实现,必须借助于INTENT类。因此INTENT在ANDROID应用中占据的地位是极其重要的。简单来说,一个INTENT就是对一个将要执行的操作请求的抽象描述。INTENT的描述,主要包含有两个数据结构动作ACTION和动作对应的数据DATA。动作有很多种,系统中最常见的动作类型有MAIN表明该ACTIVITY是应用程序的入口、VIEW、PICK、EDIT等等;而动作对应的数据一般以URI的形式表示,例如要查看某一个网页,则需要创建INTENT,它的动作类型为VIEW,对应的数据应该是该网页的网址。值得一提的是,有一个类叫INTENTFILTER,它是INTENT的相关类。如果说INTENT是一个有效的操作请求,那么一个INTENTFILER则用于描述一个ACTIVITY或者INTENTRECEIVER等能够接收哪些INTENT的请求。比如系统浏览器的ACTIVITY用于查看某一个网页,那么它用于接收INTENT的INTENTFILTER,要定义类型为VIEW的动作并且能够过滤表示一个网页网址的URI。通常INTENTFILTER要被注册在ANDROIDMANIFESTXML文件中。ACTIVITY之间的跳转正是通过解析各种INTENT来实现的。例如一个ACTIVITY调用STARTACTIVITYINTENT方法,希望跳转到其他的ACTIVITY时,会触发系统的INTENT解析过程,在所有安装的应用程序中已注册的INTENTFILTER中查找,并最终挑选出能够匹配INTENT的ACTIVITY。然后这个新的ACTIVITY因为接收到INTENT的请求而开始运行,完成ACTIVITY的跳转。这种跳转机制提供了两个关键好处1操作请求被INTENT封装起来,方便ACTIVITY重复利用。2相互跳转的多个ACTIVITY之间实现了松耦合。只要INTENTFILIER保持不变,一个CTIVITY可以随意修改,而不用担心其他ACTIVITY找不到它。242BROADCASTRECEIVER应用程序可以通过BROADCASTRECEIVER监听一个外部的事件,并做出响应。例如,当应用程序需要对电话呼入这个外部事件做出反应时,可以利用BROADCASTRECEIVER进行处理。再如,当一个后台下载任务成功的事件发生时,需要提示用户下载完成,仍然可以利用BROADCASTRECEIVER来进行处理。BROADCASTRECEIVER不能生成UI,也就是说对于用户来说是透明的,用户是看不到的。BROADCASTRECEIVER只能通过NOTIFICATIONMANAGER来通知用户这些事件发生了。BROADCASTRECEIVER既可以在ANDROIDMANIFESTXML中注册,也可以在运行时的代码中使用CONTEXTREGISTERRECEIVER进行注册。注册完成之后,当事件来临的时候,即使程序没有启动,系统依然可以根据定义,自动启动程序。各种应用也可以通过使用CONTEXTSENDBROADCAST将它们自己的INTENTBROADCAST广播给其他应用程序。243SERVICESERVICE是一种程序,它可以运行很长时间,但是它却没有用户界面,不可交互,而且不能自己运行。它需要通过某一个ACTIVITY或者其他的CONTEXT对象来调用12。最常见的例子,比如说用户正在运行一个音乐播放器的程序,此时如果想浏览网页,那么,在用户导航到ANDROID的浏览器以后,虽然进入了浏览器屏幕,但是歌曲的播放并没有停止,而是在后台继续播放着。其实播放的动作正是由播放音乐的SERVICE执行着。当然,如果需要的话,SERVICE也是可以停止。通过STARTSERVICEINTENTSERVICE可以启动一个SERVICE,通过CONTEXTBINDSERVICE可以绑定一个SERVICE。244CONTENTPROVIDER对于数据存储,ANDROID与其他的操作系统有一点不太一样,即数据在ANDROID程序中都是私有的,这些数据包括文件类型和数据库类型以及其他类型的数据。这样系统和应用程序的数据就各自独立起来,以避免受到某些不正常程序或是病毒的影响。不过这并不代表各应用程序之间就因此而无法进行数据交换了。当某个应用程序希望与其它的应用共享其数据时,ANDROID提供的CONTENTPROVIDER就可以发挥作用了。在实现CONTENTPROVIDER的抽象接口以后,程序便可以将自己的数据暴露出去,其他程序只要有权限,就可以通过这一套标准而统一的接口,读取或是删除该程序的数据13。25ANDROID应用程序的生命周期ANDROID应用程序一个完整的生命周期是从应用程序的创建到结束的全过程,与其他系统不同,ANDROID应用程序的生命周期是不受进程本身控制的,而是由ANDROID系统来决定的,ANDROID系统会根据应用程序对用户的重要性及当前系统的负载来决定生命周期的长短。ANDROID系统的各个进程重要程度如图22所示。前台进程可见进程服务进程后台进程空进程关键优先级高优先级低优先级图22ANDROID应用程序进程优先级1前台进程,是ANDROID系统中最重要的进程,是与用户正在进行交互的进程。有以下四种情况ACTIVITY正在与用户进行交互;进程被ACTIVITY调用,而且这个进程正在与用户进行交互;进程服务正在执行声明中的回调函数,如ONCREATE、ONSTART、ONDESTROY;进程的BROADCASTRECEIVER在执行ONRECEIVE函数。ANDROID系统在多个前台进程同时运行时,可能会出现资源不足的情况,此时会清除部分前台进程,以保证主要的用户界面能够及时响应。2可见进程,是指部分应用程序界面能够被用户看见,却不在前台与用户进行交互,不影响界面事件的进程。如果应用程序进程包含一个服务,且这个服务正被用户可见的ACTIVITY调用,则此进程同样被视为可见进程。ANDROID进程一般存在少量的可见进程,只有在特殊情况下,ANDROID系统才会为保证前台进程的资源而清除可见进程。3服务进程,服务进程是指包含已启动服务的进程。该进程没有用户界面并在后台长期运行。除非ANDROID系统不能保证前台进程和可见进程所必要的资源,否则不会强行清除服务进程。4后台进程,后台进程是指不包括任何已经启动的服务,而且没有任何用户可见的ACTIVITY的进程。ANDROID系统中一般存在数量较多的后台进程,在系统资源紧张时系统将会优先清除用户较长时间没有见到的后台进程。5空进程,空进程是不包含任何活跃组件的进程,空进程在系统紧张时会被首先清除。但为了提高ANDROID应用程序的启动速度,ANDROID系统会将空进程保存在系统内存用,在用户重新启动该程序时,空进程会被重新使用。当两个应用程序具有相同的优先级时,处于较低优先级且运行时间最长的进程将会首先被终止。进程的优先级也受到进程间依赖性的影响,如果一个应用程序依赖于第二个应用程序所提供的服务或者内容提供器,那么第二个应用程序至少会拥有与它所支持的这个应用程序相同的优先级。进程的优先级取决于所有组件中优先级最高的部分,进程的优先级会根据其他进程的依赖关系而变化。第三章数独游戏的设计31游戏功能简介数独游戏的规则很简单,只需在空格处填入19的数字,并保证每个数字在每个九宫格内只能出现一次,且每个数字在每一行、每一列也只能出现一次,而一般的游戏过程是系统随机生成一个棋局,然后玩家需要在空白处填上相应的数字使其满足游戏规则。游戏框架如下图所示点击图标开机动画计时区域提示暂停游戏区域退出游戏功能区域开始游戏菜单界面帮助游戏关于游戏退出换题图31游戏框架图该游戏的运行步骤如下。1启动游戏后首先进入的便是欢迎界面的动画,在欢迎界面中,“点击屏幕继续”闪动,达到提示的效果。2在游戏界面点击屏幕,便进入菜单界面。3在菜单界面单击“关于游戏”菜单可进入“关于”界面,在“关于”界面中介绍了该游戏的目标平台及开发日期。4在菜单界面单击“帮助游戏”菜单可进入“帮助”界面,在“帮助”界面介绍了游戏的基本规则。5在菜单界面单击“开始游戏”菜单可进入游戏界面。6当在游戏过程中单击“暂停”按钮时,便进入暂停状态。7在游戏过程中随时可以通过“换题”按钮来更换题目。8当玩家单击“放弃”按钮时,会提示玩家是否真的需要退出游戏,然后根据玩家的选择进行操作。9当玩家单击“提示”按钮时,界面上会出现一个红心表示当前可以提示玩家输入数字,此时再单击空白处,便会自动填上正确答案。10当玩家将界面中所有的空白全部填满数字时,系统会自动判断所填写的数字正确与否,当有错误时,会出现游戏失败界面;当全部填写正确时,会出现游戏胜利界面。11在胜利或者失败状态时,玩家可以通过点击屏幕任意位置返回欢迎界面。12在菜单界面单击“退出游戏”便可退出该游戏。32游戏策划以及准备工作321欢迎界面的策划欢迎界面的主要实现的是开机动画以及菜单选项的功能。在开机动画上准备实现动态效果,利用图片刷帧进行实现。在菜单界面实现游戏的功能选择,菜单界面就是一张图片,鼠标点击相应的区域实现相应的功能。在这里运用到坐标系,如下图所示图32菜单界面手机屏幕分辨率是480320,所以横纵坐标如图所示。当点击的区域坐落于60WELCOMEVIEWBITMAPSIDLENGTH1WELCOMEVIEWDRAWINDEXWELCOMEVIEWBITMAPSIDLENGTH10IFWELCOMEVIEWDRAWINDEX50WELCOMEVIEWDRAWSTRINGWELCOMEVIEWDRAWSTRINGTRYTHREADSLEEPSLEEPSPAN/睡眠CATCHEXCEPTIONEEPRINTSTACKTRACE/打印异常信息分析该类的RUN()方法,控制DRAWINDEX的值,每次循环将欢迎界面的DRAWINDEX加1,然后判断是否到达数组的最后,当到达最后时,将其减10,然后继续进行循环。同时,判断DRAWINDEX是否为5,这样每循环5次改变DRAWSTRING的值,从而实现文字的闪动效果。414HELPVIEW类和ABOUTVIEW类的实现游戏中关于游戏帮助和游戏说明,我们分别通过HELPVIEW类和ABOUTVIEW类的实现。HELPVIEW类和ABOUTVIEW类都是通过ONDRAW方法来绘制界面。由于这两个类在很大程度上是相似的,所以下面只分析HELPVIEW类,代码如下所示PUBLICHELPVIEWKLSDACTIVITYACTIVITYSUPERACTIVITYTHISACTIVITYACTIVITY/得到ACTIVITY的引用SURFACEHOLDERTHISGETHOLDER/获得SURFACEHOLDERGETHOLDERADDCALLBACKTHIS/添加CALLBACK接口的实现HELPBITMAPBITMAPFACTORYDECODERESOURCEGETRESOURCES,RDRAWABLEHELPPUBLICVOIDONDRAWCANVASCANVAS/绘制方法CANVASDRAWCOLORCOLORWHITE/背景色CANVASDRAWBITMAPHELPBITMAP,0,0,NULL/绘制图片PUBLICBOOLEANONTOUCHEVENTMOTIONEVENTEVENT/键盘监听方法IFEVENTGETACTIONMOTIONEVENTACTION_DOWN/屏幕被按下DOUBLEXEVENTGETXDOUBLEYEVENTGETY/得到坐标IFX270RETURNSUPERONTOUCHEVENTEVENTPUBLICHELPVIEWKLSDACTIVITYACTIVITY为“帮助”界面的构造器,在构造器中先得到ACTIVITY以及SURFACEHOLDER的引用,然后添加CALLBACK接口的实现并对图片资源进行初始化。ONDRAW()为重写的绘制方法,在该方法中,首先绘制白色背景,然后将帮助界面的背景图片绘制到指定位置。ONTOUCHEVENT()为重写的键盘监听方法,当玩家点击屏幕时,会调用该方法来处理玩家的屏幕事件,在“帮助”界面中该方法实现比较简单,只是判断玩家点击的是否为返回按钮即可。当玩家点击返回按钮时,需要向ACTIVITY发送HANDLER消息通知控制器切换屏幕。42游戏界面相关类的实现游戏界面实现游戏展示,计时界面展示,以及功能按键。流程图如下图所示开始生成数独填数区域换题提示提示暂停计时暂停填数检测退出结束是否是否是否是否图42游戏界面流程图421游戏界面GAMEVIEW的实现首先理解下GAMEVIEW的运行思路,GAMEVIEW在初始化时候读取相关图片信息,包括背景图片,数独背景框图片等等,在初始化同时,启动GAMEVIEWDRAWTHREAD线程进行刷帧,TIMETHREAD线程来更新界面中的时间。当玩家点击背景框空白位置,需要绘制数字键盘时,会启动DRAWKEYTHREAD线程绘制数字键盘。当玩家点击按钮时候,相关方法会被调用。以上的过程都需要KLSDACTIVITY的参与管理。GAMEVIEW同样继承自SURFACEVIEW类,其关键也是实现ONDRAW方法。ONDRAW方法分别绘制游戏界面背景图片,数字背景框,选题提示等等按钮,时间显示区域等。DRAWKEY方法实现了数字键盘的绘制,保证在点击空白框时候有圆盘数字选框出现。通过SURFACECREATED()和SURFACEDESTROYED()两个方法负责相关线程的启动和调用工作。422时间线程TIMETHREAD的实现TIMETHREAD线程主要用来更新界面中的时间,作为数独游戏玩家计时功能,代码如下PUBLICCLASSTIMETHREADEXTENDSTHREADGAMEVIEWGAMEVIEW/声明GAMEVIEW的引用BOOLEANFLAGTRUE/循环标志位PUBLICTIMETHREADGAMEVIEWGAMEVIEW/构造器THISGAMEVIEWGAMEVIEW/得到GAMEVIEW的引用PUBLICVOIDRUN/重写的RUN方法WHILEFLAGGAMEVIEWTIME/时间自加TRYTHREADSLEEP1000/睡眠一秒种CATCHEXCEPTIONE/捕获异常EPRINTSTACKTRACE/打印异常信息TIMETHREAD类的实现比较简单,只需每隔一秒钟通过GAMEVIEWTIME自加更改一下GAMEVIEW中表示时间的属性即可。PUBLICTIMETHREADGAMEVIEWGAMEVIEW为时间线程的构造器,在构造器中先得到GAMEVIEW的引用。然后重写RUN方法,通过时间的自加,实现一秒钟功能。43数独算法类的实现数独算法类主要实现数独的生成以及填入数字的检测功能,流程图如下开始生成数独填入数字符合规则游戏成功结束是否图43WELCOMEVIEW类功能流程图431数独算法基本逻辑本节将对数独算法类SHUDUSUANFAJAVA进行解释,该类基本上是数学计算,通过一定的算法产生所需要的数独数组,通过特定的接口供其他类使用。该类的目的是创建一个二维数组来表示数独矩阵。使矩阵的每行、每列、每块都没有重复的数字。算法的简单思路是先随机取出一个09的数字,然后检查其所在的行、列、块是否都符合要求。当符合要求时继续填充下一个,而当不符合要求时,再次随机取出一个没有取出过的数字,再判断。当9个数字都取出过后还没有找到符合要求的数字时,进行回退处理,即将最后一个取出的符合要求的数字进行重新取值,直到所有数字全部填充完毕。在求解数独时候,运用到回溯法,将所有的解(问题的解空间)按照一定结构排列,再进行搜索。一般解空间构造成为为树状结构,用深度优先的策略搜索,一般有两种方式1只需要一个解的话,找到解即停止。2需要求出所有解,则需做“树的遍历”找到所有解。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法是一种搜索算法,其基本思路是在一个问题中,根据题意给出的边界条件划定出所有可能解的范围(称为可能解),根据题意确定出约束条件。利用程序顺次在所有可能解中搜索时按照深度搜索的方式进行。即在第一层选定一个满足约束条件的解,然后以该可能解为出发点,搜索第二层的一个可能解(试探)。如果搜索到第二层的一个可能解,则继续搜索第三层得一个可能解。依次类推,直到所有层得可能解都被找到,则得到了该问题的一个完整解。如果第二层所有的肯可能解都不满足约束条件,则返回第一层,放弃原有的可能解,使用第一层的下一个可能解(回溯)。一次类推,寻找第二层的一个可能解。回溯法相对于其他穷举的特点在于,不必把问题的每一层的所有可能解都遍历一遍,只要当前的可能解不满足约束条件就抛弃该解,寻求下一个可能解,而不必求解其余的下层解。当当前层得所有可能解都不满足约束条件,则回溯到上一层,抛弃上一层的当前可能解。从以上分析中结合数独问题的规则,得出数独问题的约束条件为每一格的数值范围仅限19每一格内的数字在当前行不允许重复每一格内的数字在当前列不允许重复每一格内的数字在当前小宫格内不允许重复由此,回溯法通过约束条件的筛选,在所有解中除掉不可能的解,从而获得问题的一个或者全部解。432检测填充结果根据数独游戏的规则,玩家填充81个宫格之后,要满足所有行,所有列和所有小九宫格内不能出现重复的数字,并以此为条件进行检测。列检测首先对各列进行检测,提供了检测列内9个数字是否有重复数据的方法CHECKLINE,该方法以此遍历列中的9个数字,当遍历到某个数字时,检测该数字后面的数字是否出现重复。比如,当检测到第3个数字是7时,则检测第49个数字是否出现7,如果出现重复则停止检测,只有既可以避免重复检测,又可以避免遗漏。PUBLICBOOLEANCHECKLINEINTCOL/检查列是否符合要求FORINTJ0J8JIFNJCOL0CONTINUEFORINTKJ1K9KIFNJCOLNKCOLRETURNFALSERETURNTRUE行检测类似于对列数据的检测,还需要对每行进行检测,因此程序提供了对行数据的检测方法CHECKROW,该方法代码如下PUBLICBOOLEANCHECKROWINTROW/检查行是否符合要求FORINTJ0J8JIFNROWJ0CONTINUEFORINTKJ1K9KIFNROWJNROWKRETURNFALSERETURNTRUE小九宫格检测除了对行和列的重复数据检测之外,还需要对小九宫格内的所有数字进行检测,避免出现重复现象。检测原理与行,列检测相同,但需要计算九宫格内数字的位置。ROW和COL指定了检

温馨提示

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

评论

0/150

提交评论