专科毕业设计模板- 副本1 - 图文

更新时间:2024-07-08 22:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

专科毕业设计

题 目:android欢乐数独

系 部:信息工程学院 专 业:软件技术 姓 名: 学 号:20101130107 指导教师:李红军

2012年 11月 15 日

毕业设计独创性声明

该毕业设计是我个人在导师指导下进行的研究工作及取得的研究成果。文中除了特别加以标注和致谢的地方外,不包含其他人或其它机构已经发表或撰写过的研究成果。其他同志对本研究的启发和所做的贡献均已在论文中作了明确的声明并表示了谢意。

作者签名: 日期: 年 月 日

毕业设计使用授权声明

本人完全了解青岛滨海学院有关保留、使用毕业设计的规定,即:学校有权保留送交毕业设计的复印件,允许被查阅和借阅;学校可以公布全部或部分内容,可以采用影印、缩印或其它复制手段保存该毕业设计。保密的毕业设计在解密后遵守此规定。

作者签名: 导师签名: 日期: 年 月 日

青岛滨海学院 摘要

摘 要

目前随着移动设备越来越普及以及移动设备的硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来。目前国内最常见的移动开发平台有Symbian,iPhone,Windows Phone以及当下正在逐步兴起的Android。目前为止国内已经有很多Android系统的用户。截止2010年第二季度Android系统的国内市场占有率已经过10%,在西欧以及北美智能手机市场占有率也在20%左右。可见Android系统正在崛起之中。但是对于Android系统的应用和开发在国内仍然属于起步和探索阶段。急需要大量的相关技术和人员的投入。

青岛滨海学院 摘要

目 录

引言

..........................................................................................................................1

发展趋势 ………………………………………………………………………………………1

1.Android系统框架分析 .........................................................................................3

1.1Android功能特征................................................................................................................ .4 1.2Android解剖分析..................................................................................................................5 1.3Android程序结构解析............................................................................................................6

2.类库

.........................................................7

2.1Android运行组件..................................................................................................................7 2.2 Android应用的构成和工作机制..........................................................................................8 2.3Android应用程序结构剖析………………………………………………………………...9 2.4Android应用程序结构解析………………………………………………………………...10 2.5活动..………………………………………………………………………………………10

3.游戏策划及准备工作...........................................11

3.1功能介绍…………………………………………………………………………………...12 3.2游戏功能概述...........................................................................14

4.Android平台下游戏的准备工作...............................15

4.1游戏的架构.................. .................. .........................16 4.2各类的简要介绍…………………………………………………………………………….19 4.3系统的设计实现...........................................................33

总结.................................................................34 致谢.................................................................35 参考文献.............................................................36

青岛滨海学院 摘要

青岛滨海学院毕业设计 绪论

引言

下面首先介绍一下Android系统。Android是基于Linux内核的软件平台和操作系统,是Google在2007年11月5日公布的手机系统平台,早期由Google开发,后由(Open Handset Alliance)开发。它采用了软件堆层(Software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux核心工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程式的一部分。本文对目前应用的Symbian、WindowsMobile、MacOSX和RIM等平台的现状进行了分析与比较。进而研究分析了Android平台的系统架构和组件模型,接着解析了Android中的重要API和应用构成,以Intent和生命周期的机制。在此基础上,基于Android平台设计和开发校园资讯软件。本系统界面友好、操作便捷,具有良好的可扩展性和可维护性;系统经过测试,可以稳定运行,能够满足手机用户的基本需求。

发展趋势

随着3G应用的不断开发推广,用户会越来越需要更加个性化、优质化的多媒体数据服务,用户希望能够随时、随地无缝利用3G网络进行办公、网上交易、游戏娱乐、欣赏影视节目、收听和下载音乐等。根据观察,在不久的将来,移动手机终端将会在以下若干方面具有新的发展。

首先,提供智能提醒服务,手机能够与用户实现密切配合,并监控用户的个性化设置(保持在本地或者云端),当重要时间点或关键事物需要用户注意时,手机会向用户发出“提醒”服务,服务包括日程提醒、交通状况、最佳行车路线、最佳泊位、优惠活动、实时新闻、体育赛事、天气情况、股市行情、好友活动、亲友生日等。

其次,提供虚拟现实体验,手机可以借助传感器、周边设备了解到您的身边环境,并根据收集到的信息,智能的为您提供有用的信息,如在网络世界养的宠物,可以借助音频设备表达叫声,借助马达和位置传感器等传递其跳、跃等行为信息;也可以在用户购物时,提供相关的同类产品价格参考,提醒用户附近的那个卖场更物美价廉;根据实际场景,为用户及时提供正在操控的产品的使用方法提醒。

接着,发挥物联网的优势,借助无处不在的传感器,可以感知并分享到周围世界的海量信息,这些信息将在“云端”得到整合,帮助用户及时、准确的获得气息信息、交通路况。另外借助物联网,用户间可以方便、快速的分享资源,协助和交互。如进行端到端的多人游戏、照片分享、书籍分享、音乐分享等。

然后,作为经济工具,在交通或者信息不发达的情况下,帮助用户找到最佳的市场,

1

青岛滨海学院毕业设计 绪论

获得有价值的帮助信息,帮助用户从事的经济活动的收益率。

最后,更加智能、安全的设备,随着智能手机的不断普及和更加智能,手机软件的更新、升级将会变得越发简单,并会为用户提供工具或信息,让用户有能力和权力决策那些内容可以浏览、下载或分享。在安全性上也将更加出色,能够十分有效的帮助用户进行获取到的内容的管理,保护用户的个人隐私和基于手机的金融活动如电子钱包、在线支付、在线贸易等。

2

青岛滨海学院毕业设计 绪论

1.Android系统架构研究

Android是一个包含操作系统、中介架构层及应用程序所产生出来的软件堆栈架构。由下而上,其核心为嵌入式Linux2.6作业系统,向上搭配Google为Android开发的类库及Android运行时,再配合应用程序架构,来开发各种不的应用程序。

1.1Android的功能特征

1.1.1应用程序架构:在应用程序架构内已经具备多种不同的基础组件,在开发应用程

序时,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。

1.1.2 Dalvik虚拟机器:在Android平台上所使用Java虚拟机,不是Sim公司的标准

Java虚拟机,而是使用Google自主开发的代号为Dalvik的虚拟机,它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。

1.1.3集成的浏览器:集成的浏览器是Android内建的浏览器,是以WebKit的浏览引擎

为基础所开发成的。WedKit是一个开源浏览器网页排版引擎,目前使用WebKit引擎的浏览器主要有:Safari,Midori,Epiphany等。配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。

1.1.4优化的绘图能力:在程序里可以用到的绘图功能分为2D与3D两个方面。在2D

方面,Android提供了一套特有的类库(SGL;而在3D方面则是使用OpenGLES1.0(openGL for Embedded systems)规范的类库。它们是一种非常快的图形引擎,并且支持硬件加速。

1.1.5 SQLite数据库:SQLite提供结构化的数据存取。SQLite是一款轻型的数据库,

它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。它能够支持Windows/Linux/U nix等主流的操作系统,同时能够跟很多程序语言相结合,比如php,Java等,还有ODBC接口,同样比起Mysql,PostgreSQL来讲,它的处理速度比它们都快。它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小只有250KB但支持数据库大小至2TB。它虽然很小巧,但是支持的SQL语句毫不逊色于其它开源数据库。同时它还支持事务功能和并发处理等等。SQLite也是一套开放性的关联式资料库,其特点在于轻量性方面的设计结构,更适合在手机上使用。

1.1.6多媒体的支持能力:主要用于播放媒体文件。这同时包括对音频(如播放MP3或其

他音乐文件等)和视频(如播放从网上下载的视频)的支持,并支持“播放URI地址”(Note:URI即是统一资源识别地址)模式—在网络上直接播放的流媒体。另外支持各种通

3

青岛滨海学院毕业设计 绪论

用的静态图像格式,例如:JPG、PNG、GIF等格式。

1.1.7GSM技术:Global System for Mobile Communications,即全球移动通讯系统,

俗称”全球通”,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。GSM技术是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。

1.1.8蓝牙、EDGE、3G及Wi-Fi:蓝牙是一种新型、开放、低成本、短距离的无线连接

技术,可取代短距离的电缆,实现话音和数据的无线传输。EDGE(Enhanced Data Rate for GSM,Evolution),即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和SPSK调制技术。由于8PSK可将现有GSM网络采用的GMSK调制技术的信号空间从2扩展到8,从而使每个符号所包含的信息是原来的4倍。Wi-Fi(WirelessFidelity),即无线保真技术,与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。该技术使用的是2.4GHz附近的频段,该频段目前尚属没用许可的无线频段。其目前可使用的标准有两个,分别是IEEE802.lla和IEEE802.11b。这些通讯能力也是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。

1.1.9 GPS: Global Positioning System,即全球定位系统,它是一个由覆盖全球的24颗卫星组成的

卫星系统。这个系统可以保证在任意时刻和任何地点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人。

4

青岛滨海学院毕业设计 绪论

1.2Android架构分析

在Android SDK中,定义了让开发者使用与核心应用程序相同API的权限应用程序框架是为了要简化组件的重新利用而设计的,应用程序可以发布功能为其它应用程序所使用。但是,这要受限于应用程序架构的安全机制,使用者以用同样的机制来新增、置换组件。目前所有的应用程序是由服务及系统来组成,包含有:

1.2.1一套强大和可扩展的视图系统:用来建构一个应用程序的基本组件,包了在开发

系统画面时,常用的列表、网格、文本框、按钮等控制项,甚至是内嵌的Web浏览器。

1.2.2内容提供者:使应用程序可以访问另一个应用程序的数据(如联系人数库),或者

共享它们自己的数据。

1.2.3资源管理器:提供各种非程序代码的资源让应用程序去使用。例如:本字符串、图

形文件或排版相关的布局文件。

1.2.4通知管理器:提供应用程序在状态栏中显示应用程序自定义的提示信息。 1.2.5活动管理器:管理所有应用程序的生命周期及提供常用的导航回退功能。例如:

启动应用程序要用到的资源准备及关闭应用程序时释放内存及相关资源等工作。

1.2.6视窗管理器:用来管理所有启动程序的视窗。 1.2.7位置管理器:用来管理地图服务的相关功能。

1.2.8电话管理器:用来管理用户拨打与接听电话的相关功能。

5

青岛滨海学院毕业设计 绪论

1.2.9包管理器:管理所有安装在Android系统内的包。

6

青岛滨海学院毕业设计 绪论

2.类库

2.1Android运行时组件

虽然Android是用Java语言来开发、撰写应用程序,但却不使用Java运行时组件来执行Java程序,而是使用了由Google自行研发的Android运行时组件来执行程序。Android运行时组件包括两个重要的部分,一个是核心类库,另一个是Dalvik虚拟机。

在Android中包含一些C/C++的类库,这些类库能被Android系统中不同的组件来使

用。开发者可以通过应用程序框架使用这些功能。部分核心类库列表如下:

2.1.1surface Manager:主要的功能是让开发者可以去存取/显示系统及管理的功能,

在[显示]与[存取操作]间的对应、互动以及实现无接缝的2D/3D多应用程序之间的整合。例如:在2D、2D显示上的合成、叠合动作。

2.1.23Dlibraries:主要是依openGLES1.0规范所定义的3D绘图引擎。该库使用硬件

加速(当硬件可用时),可以将硬件的3D功能做最佳化的处理显示。

2.1.3SGL:主要是处理有关显示2D方面的绘图引擎。

2.1.4Media Frame work:主要是以packetVideo公司的OpenCORE为基础所发展的多媒

体类库,该库支持回放和录制大量流行的音视频格式和静态图片。例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式

2.1.5Free Type:主要是用来显示点阵图和处理向量字形的。

2.1.6SSL:(secureSocketsuyer),中文名为“安全套接层协议层”,它是网景公司提出

的基于WEB应用的安全协议,当前版本为3.0。SSL协议指定了一种在应用程序协议(如HTTP、Telenet、NMTP和FTP等)和TCP/IP协议之间提供数据安全性分层的机制,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP胆协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Proto col):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Hand shake proto col):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。SSL协议提供的服务主要有:①认证用户和服务器,确保数据发送到正确的客户机和服务器;②加密数据以防止数据中途被窃取;③维护数据的完整性,确保数据在传输过程中不被改变。

7

青岛滨海学院毕业设计 绪论

2.1.7SQLite:SQLite是一套开放性的关联式资料库,能够被所有应用程序使用的轻量

级的关系数据库引擎。

2.1.8web Kit:是一个先进的网页浏览器引擎,被用来构建Android浏览器和内嵌的web

视图,也可以让开发者利用这个引擎来做不同的应用。

2.1.9lib c:就是一个BSD标准C类库。但是,针对Linux嵌入式装置进行过最佳化的

调整。

2.2 Android应用的构成和工作机制

对于一个Android应用程序来说,是由Activity、IntentReceiver、Service、Content Provider四部分组成,但并不是每一个Android应用程序都必须由这四部分组成。在应用程序中使用时,需要在配置文件AndroidManifest.xml中进

行配置。这个配置文件是每个Android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等。Android应用的构成和工作流程如图2-2:

图2-2 Android的构成和工作流程

2.3Android应用程序结构剖析

2.3.1Android的API

Android API主要包含了以下几个部分:

8

青岛滨海学院毕业设计 绪论

AndroidManifest.xml是系统的控制文件,它告诉系统如何处理所创建的所有应用组件(尤其是活动(Activity),服务(Service),意图接收器(Intent Receiver)和内容提供者(Content Provider))。举例来说,控制文件就是把活动和要接收的意图(Intents)连接在一起的“胶水”。

2.3.2活动

活动就是一个有生命周期的对象。一个活动就是完成某些工作的代码块,这部分工作还可能包括对用户UI界面的显示。不过这不是必须的,有些活动从不显示UI界面。

2.3.4视图

视图可以将其自身绘制到屏幕上。Android的用户界面由一系列的视图树构成。接口都是由一组以树的形式出现的视图组成的。开发者可以通过创建一个新的视图的方法来使用自定义的图形处理技术(比如开发游戏,或者是使用了不常用的用户图形窗口界面)。

2.3.5意图

意图是一个简单的消息对象,它表示程序想做某事的“意图”。比如应用程序想要显示一个网页,那么它可以通过创建一个Intent实例并将其传递给系统来表示意图浏览这个URI。系统将定位到能处理这一Intent的代码(在当前情况下就是浏览器),并运行之。意图也可以用于广播系统范围内的有效事件(例如通知事件)。

2.3.6服务

服务是运行在后台的一段代码。它可以运行在它自己的进程,也可以运行在其他应用程序的进程里,这取决于自身的需要.。其它的组件可以绑定到一个服务上来,通过远程过程调用(RPC)来调用这个方法。例如媒体播放器的服务,当用户退出媒体选择的界面时,仍然希望音乐依然可以继续播放,这时就可用服务来保证当用户界面关闭时音乐还继续播放着。

2.3.7通知

通知将以小图标的形式呈现在状态栏里,用户通过与图标的交互来接收消息。最常见的通知包括短信息、通话记录和语音邮件,但是应用程序也可以创建它们自己的通知事件。

2.3.8内容提供者

内容提供者是用来提供对设备上数据进行访问。典型的例子就是使用内容提供者来访

9

青岛滨海学院毕业设计 绪论

问联系人列表。应用程序也可以使用其它程序通过内容提供者提供的数据,同时也可以定义自己的内容提供者来向其它应用提供数据访问服务。

2.4Android应用程序结构解析

通常由以下四个组件来构建一个完整的Android应用程序。 ①活动 ②意图接收器 ③服务 ④内容提供者

然而,并不是所有的Android应用程序都必须具备上面的四个组件,可以由上面的一个或几个来组建。当决定使用以上哪些组件来构建Android应用程序时,需要将它们注册在AndroidManifest.xml文件中,这是一个XML配置文件,在这个文件中可以声明应用程序组件以及它们的特性和要求。这个配置文件是每个Android应用程序所必需的。

2.5活动

活动是以上四个组件中最常用的一个。每个活动都是Activity的子类,并实现了一些独有的功能,如管理UI显示和UI的反馈事件。一个活动就相当于应用程序的一个用户界面,由事件响应以及视图等组成。大多数的应用程序通常包括多个界面。例如:一个文本聊天应用程序,至少应该包含一个联系人列表界面、一个聊天界面、一个设置界面、一个聊天记录查询界面等等。每个界面其实都可看作是一个活动。显示一个新界面就相当于生成一个对应的活动对象。在一些情况下,活动能够返回给它的上级界面一个返回值,例如一个提供给用户选择照片的活动可以返回给它的调用者用户选择了哪个照片文件。

当一个新的活动出现时,前一个活动被中断并被放入到一个历史堆栈中。用户可以使用返回键使前一个活动重现。当一个活动不再需要时,可以将它们从历史堆栈中移除。默认情况下,Android会为每个应用程序保留从主界面开始的历史堆栈。

Android通过一个被称作意图的特殊类,来实现界面与界面之间的跳转。一个意图描述了一个应用程序想要做什么。在意图的描述结构中,含有两个重要的数据结构:动作和动作对应的数据。典型的动作类型包括MAIN、VIEW、PICK、EDIT等等,而动作对应的数据则以URI的形式表示。例如:显示一个联系人信息的界面,可以创建一个意图,并将它的动作设置成VIEW,数据设置成表示这个人信息的URI。

除此之外,还有一个被称作意图过滤器(IntentFiher)的相关类。当发生一个有效的

10

青岛滨海学院毕业设计 绪论

目的请求时,意图过滤器用来描述一个活动能够处理什么意图。如上例中所描述,想要正常显示一个联系人信息的界面,必须声明一个意图过滤器,它说明当有联系人数据要被在界面上显示时,知道如何处理它们。通常意图过滤器要被注册在AndroidManifest.xml文件中。从一个界面跳转到另一个界面是由解析各种意图实现的。例如:一个活动使用startActivity(myIntent)来调用其他活动时,系统会查找所有已经安装的应用程序的意图过滤器,并从中挑选出能够匹配myIntent意图的活动。随后,这个新的活动接收到意图(myIntent)的通知并开始运行。当startActivity方法被调用,解析意图的处理过程随之发生,这个机制有以下两个突出的优点: 活动可以通过一个以意图形式产生的请求来重用其他组件的功能。 活动可以在任何时候被一个具有等价意图过滤器的新活动所替代。 2.5.1意图接收器

当想要编写代码来对外部事件做一些处理时,可以使用意图接收器。意图接收器并不显示UI界面,它是通过NotificationManager来通知用户他们感兴趣的事件发生了。意图接收器同样可以被注册在AndroidManifest.xml文件中,同时也可以在代码中使用Context.registerReceiver()来注册自己的意图接收器。当一个意图接收器被触发时,系统会根据需要来启动应用程序。 2.5.2服务

服务是具有长生命周期并且没有用户界面的代码。 2.5.3内容提供者

在Android中,每个应用程序都是有自己的userID及在自己的进程中执行。这样做的好处是,可以保护系统及应用程序,避免被其他不正常的应用程序所影响。可以把每个进程想像成是一个黑盒子,彼此不会互相影响,连内存的资料都无法共享。如果应用程序之间想要共享数据,就需要使用用内容提供者。一个内容提供者就是一个类,它实现了一个标准的方法集合。其他的应用程序可以使用这些方法来保存和检索此内容提供者处理过的数据。

11

青岛滨海学院毕业设计 绪论

3.游戏策划及准备工作

3.1功能介绍

益智类游戏是一种比较流行的游戏,其画面大都比较简单,很少有很复杂的游戏特效,但是通常用到人工智能的算法来控制游戏的难度。而算法的优化是开发该类游戏的难点。这类游戏主要包括棋牌类游戏和智力测试类游戏,例如麻将、扫雷、五子棋、扑克牌等。数独就是益智游戏的一种,玩法简单但数字的排列方式千变万化,很多人认为数独是训练头脑的绝佳方式。本章通过讲解数独游戏在Android平台上的设计与实现,是读者了解此类游戏的开发过程,掌握使用的开发技巧,学会此类游戏的开发。

随着3G移动网络应用的推广,手机游戏的规模、复杂程度日益增强;其技术手段、

设计思想、系统体系结构都发生了深刻的变化。手机操作系统正朝着高处理能力、多功能、智能化的方向发展。近年来,网络文化市场发展很快,随着互联网的迅速普及、宽带的接入社区和家庭,我国网络游戏市场发展迅速并进入了一个高速增长期,并已经创造了较大的产值,带动了相关产业的发展。

3.2游戏功能概述

本设计说明书在整体上对数独游戏进行了简单的介绍,使读者了解数独游戏的发展,知道什么是数独游戏,以及在Android中该游戏的玩法。

3.2.1背景概述

数独的前身是“九宫格”,最早起源于中国。但当时的算法比现在的更为复杂,要求纵向、横向、斜向上的三个数字只和等于15,而不只是数字不能重复。儒家典籍《易经》中的“九宫格”也是来源于此。

到了18实际末,瑞士数学家莱昂哈德欧拉有发明了一种叫做“拉丁方块”的游戏,之后不久,美国的一家数学逻辑游戏杂志开始刊登这类游戏,此类游戏得到良好发展,之后又在日本得到了广泛的传播。2004年,第一个“数独”游戏被刊登上了英国《泰晤士报》的封面,此时开始数独游戏才真正为世界所知晓。

由于此类游戏操作简单,不需要特定的语言基础,也不需要进行数字运算且可玩性高、锻炼思维、开发大脑,所以很快风靡全球。之后由其衍生的游戏也越来越多,例如杀手数独、角线数独等。

3.2.2功能简介

12

青岛滨海学院毕业设计 绪论

数独游戏的规则很简单,只需要在空格初填入1~9的数字,并保证每个数字在每个

九宫格内只能出现一次,且每个数字在每一行、每一列也只能出现一次,而一半的游戏过程是系统随机生成一个棋局,然后玩家需要在空白处填上相应的数字使其满足游戏的规则。该游戏运行步骤如下:

3.2.2.1.启动游戏后首先进入的便是欢迎界面,效果如图16.1所示,在欢迎界面中“点击屏幕继续··········”会时有时无,达到提示的效果。

3.2.2.2.在游戏界面单单击屏幕,便进入菜单界面,如图16.2所示。

3.2.2.3.在菜单界面单击“关于游戏”才当可进入“关于”界面,如图16.3所示,在\关于\界面中介绍了游戏的目标平台及开发日期。

3.2.2.4.在菜单界面单击“帮助游戏”菜单可进入“帮助界面,如图16.4所示在“帮助”界面介绍了游戏的基本规则。

3.2.2.4.在菜单界面单击“开始游戏”菜单可进入游戏界面,如图16.5所示。 3.2.2.5.党在游戏过程中单击“暂停”按钮时,便进入暂停状态,如图16.6所示。 3.2.2.6.在游戏过程中随时可以通过换题按钮在更换题目。

3.2.2.7.当玩家单击放弃按钮时,会提示玩家需要退出游戏,然后根据玩家的选择进行操作。

3.2.2.8.当玩家单击提示按钮时,界面上会出现一个红心表示当前可以提示玩家输入数字,此时在单击空白处,便会自动填上正确答案。

3.2.2.9.当玩家将界面中所有的空白全部填满数字时,系统会自动判断所填写的数字正确与否,当有错误时,会出现任图所示的游戏失败界面,党全部填写正确时,会出现如图所示的游戏胜利界面。

3.2.2.10.在胜利或者失败状态时,玩家可以通过点击屏幕任意位置返回欢迎界面。 3.2.2.11.在菜单界面单击退出游戏便可退出游戏。

提示:因为考虑到市面上很多google phone没有键盘,而屏幕普遍较大,所以在游戏中采用全触控笔操作,以提高玩家对游戏的体验。

3.3.1游戏的策划: 人类如果经常动用大脑,便可让自身的逻辑和抽象思维能力得

到增长,因此,玩数独游戏就是一个增长智慧的好办法,通过数独题米的解答,可以让头脑变得更聪明,用户可以吧她作为锻炼逻辑思维及策略绿的工具,在手机上的实现便可以时时刻刻的开发思维,锻炼头脑,

数独的推理性强,一些数学的思想、推理、假设、反正等都会用到,每个提米各不

13

青岛滨海学院毕业设计 绪论

相同,不可能用一种方法解决所有问题,这也是数独的魅力所在。

开发这个游戏的目的是为读者在Android平台上进行游戏开发提供一个指导方案,二不是声场商业化的游戏,读者可以以此为范例开发出更好、更具玩性的数独游戏。

14

青岛滨海学院毕业设计 绪论

4.Android平台下游戏的准备工作

游戏的准备工作通常根据游戏的策划来制作游戏所有的图片、声音等。因为本游戏并没有添加音效设置,所以只需要搜集或制作游戏过程中所有得到的图片资源即可,本游戏用到的图片文件资源。

4.1游戏的架构

在正式开放代码之前,首先需要对该游戏的设计框架进行简要介绍,以帮助读者更好的理解游戏的开放过程,希望读者能够仔细阅读本节的内容,在整体上了解本游戏。这会为之后的开发带来事半功倍的效果。

接下来将通过游戏的运行过程介绍各类在游戏中的作用,具体运行的步骤如下:

4.1.1启动游戏后,首先在KLSDActivity中初始化WelcomeView,然后将用户界面切换

到欢迎动画WelcomeView.

4.1.2而在WelcomeView中会启动WelcomeViewDrawThread与WelcomeGoThread来刷新

界面和生成欢迎动画。

4.1.3当玩家单击”帮助”菜单式,会创建HelpView,是显示”帮助”界面。 4.1.4当玩家单击”关于”菜单式,会创建AboutView显示”关于”界面。

4.1.5党单击”开始游戏”时则正式进入游戏界面GamneView,同时启动

GameViewDrawThread来刷新界面。

4.2各类的简要介绍

为了让读者更好的理解后面的代码,下面将对游戏的各个累逐一进行简要说明,关于这些类的详细代码将在后面的章节中相继给出。

为了让读者更好地理解后面的代码,下面将对游戏中的各个类逐一 简要说明。关于这些累的详细代码将在后面的章节中相继给出。

4.2.1共有类

SudukuActivity类

该类是通过集成和扩展类Activity来实现的,是整个应用程序的入口,主要是根据收到的Handler消息的不同切换到不同的界面。

4.2.2欢迎界面相关类

该类为欢迎界面的实现类,主要负责欢迎动画界面的绘制,是欢迎界面的前台显示的实战Android变成——手把手教你作出商用软件。

15

青岛滨海学院毕业设计 绪论

View,根据后台数据的不同绘制不同效果的动画。 4.2.2.1WelcomeViewDrawThread类

该类为欢迎动画界面的服务线程,主要负责欢迎动画的生成,通过改变表示当前帧的索引值达到动画的效果。 4.2.2.2关于界面AboutView类

该类是游戏帮助界面的实现类,主要负责游戏帮助界面的绘制。

4.2.3游戏界面相关类

GameView类

GameView类是游戏中最主要的一个类。游戏规则、游戏模型都包含在此类当中,同时该类还负责绘制游戏的画面、接收玩家的响应。 4.2.3.1GameViewDrawthread类

GameViewDrawthread类负责定时的刷帧操作。 4.2.3.2刷新时间县城TimeThread类

该线程的实现非常简单,只是定时改变游戏模型中的实间值,并不负责其他事件的处理。

4.2.3.3数字键盘渲染线程DrawKeythread类 该线程的作用是数字键盘图片头明度即可。 4.2.3.4数独生成器ShuDuSuanFa类

该类是个普通的Java类,不继承任何类,只为游戏随机提供存放熟读数字的二维数组,该类所采用算法的优劣决定了该游戏可玩性的好坏。

4.3系统的设计实现

4.3.1结构设计

16

青岛滨海学院毕业设计 绪论

图 设计流程图

4.3.2设计思想

4.3.2.1.按照程序运行的顺序介绍各个类的作用以及整体的运行框架,步骤如下:启动游戏,首先被创建的是游戏的主界面,而在主界面如图。

17

青岛滨海学院毕业设计 绪论

图 界面

4.3.2.2应用程序的每个屏幕的显示都要通过继承和扩展基类Activity类来实现,钟重写Activity类的onCreat()方法,在onCreat()方法中做游戏的初始化工作,该类代码以下:

public class KLSDActivity extends Activity {

WelcomeView welcomeView;//欢迎动画界面的引用 GameView gameView;//游戏界面的引用 AboutView aboutView;//关于界面 HelpView helpView;//帮助界面 Handler myHandler = new Handler(){//用来更新UI线程中的控件 public void handleMessage(Message msg) { if(msg.what == 1){//欢迎界面发送的消息 if(welcomeView != null){ welcomeView = null; } initGameView(); KLSDActivity.this.setContentView(gameView); }else if(msg.what == 2){//游戏胜利或者失败时点击屏幕 if(gameView != null){ gameView = null; }

18

青岛滨海学院毕业设计 绪论

initWelcomeView();//初始化欢迎界面 KLSDActivity.this.setContentView(welcomeView);//切换到欢迎界面 }else if(msg.what == 3){ initAboutView(); KLSDActivity.this.setContentView(aboutView);//切换到关于界面 }else if(msg.what == 4){ initHelpView(); KLSDActivity.this.setContentView(helpView);//切换到帮助界面 } } };

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN); initWelcomeView();//初始化欢迎界面 this.setContentView(welcomeView);//切换到欢迎界面 }

public void initWelcomeView(){//初始化欢迎界面 welcomeView = new WelcomeView(this); }

public void initGameView(){//初始化游戏界面 gameView = new GameView(this); }

public void initAboutView(){//初始化关于界面 aboutView = new AboutView(this); }

public void initHelpView(){//初始化帮助界面 helpView = new HelpView(this);

}}

4.3.3.3当用户单击“关于”菜单时,将进入帮助界面,菜单按钮时,新界面进入。

19

青岛滨海学院毕业设计 绪论

4.3.3.4当用户单击“帮助”菜单时,将进入帮助界面,该界面实现较简单,只需将图片绘制到指定位置,然后绘制以下”确定”按钮即可,代码如下

20

青岛滨海学院毕业设计 绪论

public class ShuDuSuanFa{ int[][] n = new int[9][9];//存储数字的数组

int[] num = {1,2,3,4,5,6,7,8,9};//生成随机数字的源数组,随机数字从该数组中产生 public boolean checkLine(int col){// 检查列是否符合要求 for(int j = 0;j < 8;j++){ if(n[j][col] == 0){ continue; } for(int k =j + 1;k< 9;k++){ if(n[j][col] == n[k][col]){ return false;} } } return true; } public boolean checkNine(int row,int col){//检查3X3区域是否符合要求 int j = row/3*3;//获得左上角的坐标 int k = col/3*3; for(int i = 0;i < 8;i++){//循环比较 if(n[j + i/3][k + i % 3] == 0){ continue; } for(int m = i+ 1;m < 9;m++){ if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){ return false }}} return true; }

public boolean checkRow(int row){//检查行是否符合要求 for(int j = 0;j < 8;j++){ if(n[row][j] == 0){ continue; } for(int k =j + 1;k < 9;k++){ if(n[row][j] == n[row][k]){

21

青岛滨海学院毕业设计 绪论

return false;}} } return true; } public int generateNum(int row,int col,int time){//产生1-9之间的随机数字 if(time == 0){//第一次尝试时,初始化随机数字源数组 for(int i = 0;i < 9;i++){ num[i] = i + 1; }} //第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回 if(time == 9){ return 0;} //不是第一次填充 //生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字 int ranNum = (int)(Math.random()*(9-time)); //把数字放置在数组倒数第time个位置, int temp = num[8 - ranNum]; num[8 - ranNum] = num[ranNum]; num[ranNum] = temp; return num[8 - ranNum]; } public int[][] getShuDu(){//生成数字 for(int i = 0;i < 9;i++){ int time = 0;//尝试填充的数字次数 for(int j = 0;j < 9;j++){//填充数字 n[i][j] = generateNum(i,j,time); //如果返回值为0,则代表卡住,退回处理 if(n[i][j] == 0){ if(j > 0){//不是第一列,则倒退一列 j-=2; continue; }else{//是第一列,则倒退到上一行的最后一列 i--; j = 8; continue; } } if(isCorret(i,j)){//成功 time = 0; }else{ time++; j--; } } } return n; } public boolean isCorret(int row,int col){//是否满足行、列和九宫区域不重复的要求

return (checkRow(row)&checkLine(col)&checkNine(row,col)); }

}

4.3.3.5当用户单击“开始”菜单时,将进入帮助界面,菜单按钮时,新界面进入。游戏开始:此界面含有暂停、提示、换题、放弃。

22

青岛滨海学院毕业设计 绪论

图 游戏开始

public class GameView extends SurfaceView implements SurfaceHolder.Callback{ KLSDActivity activity;//activity的引用 int alpha = 100;//透明度 float span = (float) 1;//难度(1-10) int status = 0 ; //0游戏中,1暂停中, 2游戏胜利, 3游戏失败 int time=0;//时间 boolean tishi;//是否提示 Bitmap background;//大背景

Bitmap small_backgroud;//背景方格 Bitmap stop;//暂停按钮 Bitmap change;//换题按钮 Bitmap drop;//放弃按钮 Bitmap help;//提示按钮 Bitmap go_on;//暂停图像

Bitmap keyDown;//选中后单元格样式 Bitmap win;//胜利 Bitmap fail;//失败

Bitmap select;//选中的单元格

23

青岛滨海学院毕业设计 绪论

Bitmap timeBitmap;//时间中间的冒号 Bitmap heart;//有提示时候画的 Bitmap exit;//是否退出图片

Bitmap key_background;//数字按键背景 Bitmap key_bitmap;//小数字键盘

Bitmap[] number_bitmap = new Bitmap[10];//默认的数字图片 Bitmap[] number_input = new Bitmap[10];//输入的数字图片 Bitmap[] time_bitmap = new Bitmap[10];//时间 Paint paint;

boolean drawkey = false;

int[][] num;//用来装生成的数字即正确答案 int[][] inputNum;//用来存放输入的数字 int[][] outputNum;//用来存放系统的数字

float scale = (float) 0.8;//数字键盘上数字缩放的比例

Bitmap[] small_number;int r = 39;//数字键盘小圆圈的半径 int keyx;int keyy;//数字键盘的位置

int downx;int downy;ShuDuSuanFa sdsf;//生成数独的算法类 TimeThread tt;//时间线程

GameViewDrawThread gameViewDrawThread;public GameView(KLSDActivity activity) {super(activity);this.activity = activity;getHolder().addCallback(this);//添加Callback接口的实现 init();

gameViewDrawThread = new GameViewDrawThread(this); } public void init(){ paint = new Paint();//初始化画笔 background = BitmapFactory.decodeResource(getResources(), R.drawable.background); //初始化背景小方格图元 small_backgroud= BitmapFactory.decodeResource(getResources(), R.drawable.small_background); //初始化下面的四个按钮 stop = BitmapFactory.decodeResource(getResources(), R.drawable.stop1);//停止 change = BitmapFactory.decodeResource(getResources(), R.drawable.change1);//换题 drop = BitmapFactory.decodeResource(getResources(), R.drawable.drop1);//放弃 help = BitmapFactory.decodeResource(getResources(), R.drawable.help1);//提示 key_background = BitmapFactory.decodeResource(getResources(), R.drawable.key_background);

4.3.3.6当用户单击“暂停”菜单时,就进入“暂停中”。。。。。

24

青岛滨海学院毕业设计 绪论

KLSDActivity activity;//activity的引用

WelcomeViewDrawThread welcomeViewDrawThread;//刷帧线程 WelcomeViewGoThread welcomeViewGoThread;//动画生成线程

int[] bitmapsID = new int[]{//图片ID

Bitmap[] bitmaps;//图片数组

Bitmap[] menuBitmap = new Bitmap[4]; int drawIndex = 0;//当前绘制第几帧

boolean drawString = false;//是否绘制文字 int status = 0;//0欢迎状态,1菜单状态

Paint paint;//画笔 Paint paint2;

public WelcomeView(KLSDActivity activity) {//构造器

super(activity);

this.activity = activity;//得到activity的引用

getHolder().addCallback(this);//添加Callback接口的实现

initBitmap();//调用初始化方法

welcomeViewDrawThread = new WelcomeViewDrawThread(this);

25

青岛滨海学院毕业设计 绪论

welcomeViewGoThread = new WelcomeViewGoThread(this);

public void initBitmap(){//初始化图片方法

paint = new Paint(); paint2 = new Paint(); paint2.setAlpha(125);

}

paint.setColor(Color.WHITE);

paint.setAntiAlias(true);//打开抗锯齿

paint.setTextSize(18);

bitmaps = new Bitmap[bitmapsID.length]; for(int i=0; i

bitmaps[i] = BitmapFactory.decodeResource(getResources(), bitmapsID[i]);}

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.menu);

for(int i=0; i

menuBitmap[i] = Bitmap.createBitmap(bitmap, 0,

(bitmap.getHeight()/menuBitmap.length)*i,

bitmap.getWidth(),

}

(bitmap.getHeight()/menuBitmap.length)); bitmap = null;//释放掉大图

}

protected void onDraw(Canvas canvas) {//绘制方法

super.onDraw(canvas);

canvas.drawColor(Color.BLACK);//清背景

canvas.drawBitmap(bitmaps[drawIndex], 0, 100, paint);

if(status == 0){ if(drawString){

canvas.drawText(\点击屏幕继续...\

}

}else if(status == 1){//菜单状态时 canvas.drawRect(0, 0, 320, 480, paint2); for(int i=0; i

canvas.drawBitmap(menuBitmap[i], 60, 130+50*i, null);} } }

public boolean onTouchEvent(MotionEvent event) {//屏幕监听方法 if(event.getAction() == MotionEvent.ACTION_DOWN){//屏幕被按下事件

double x = event.getX(); double y = event.getY();

if(status == 0){

26

status = 1;

青岛滨海学院毕业设计 绪论

}else if(status == 1){

if(x>60 && x<260 && y>130 && y<160){//开始游戏

activity.myHandler.sendEmptyMessage(1);

}else if(x>60 && x<260 && y>180 && y<210){//关于游戏

activity.myHandler.sendEmptyMessage(3);

}else if(x>60 && x<260 && y>230 && y<260){//帮助游戏

activity.myHandler.sendEmptyMessage(4);

}else if(x>60 && x<260 && y>280 && y<310){//退出游戏

System.exit(0);//直接退出游戏} }

}

return super.onTouchEvent(event); }

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3){}

public void surfaceCreated(SurfaceHolder arg0) { welcomeViewDrawThread.setFlag(true);//设置循环标志位

welcomeViewGoThread.setFlag(true);

welcomeViewDrawThread.start();//启动线程 welcomeViewGoThread.start();//启动线程

}

public void surfaceDestroyed(SurfaceHolder arg0) { boolean retry = true;//循环标志位

welcomeViewDrawThread.setFlag(false);//设置循环标志位

welcomeViewGoThread.setFlag(false);

while (retry) {//循环

try {

welcomeViewDrawThread.join();//得到线程结束 welcomeViewGoThread.join();//得到线程结束 retry = false;

}

catch (Exception e) {//不断地循环,直到刷帧线程结束

e.printStackTrace(); } } }}

4.3.3.7当用户单击“换题”菜单时,将进入帮助界面,菜单按钮时,新界面进入。

27

青岛滨海学院毕业设计 绪论

public class WelcomeViewGoThread extends Thread{ WelcomeView welcomeView;//welcomeView的引用 private int sleepSpan = 150; private boolean flag = true;//循环标记位 public WelcomeViewGoThread(WelcomeView welcomeView) {//构造器 this.welcomeView = welcomeView;//得到welcomeView的引用 } public void run() {//重写的run方法法 while (flag) {//循环 welcomeView.drawIndex++;//自加 if(welcomeView.drawIndex>welcomeView.bitmapsID.length-1){ welcomeView.drawIndex = welcomeView.bitmapsID.length-10; } if(welcomeView.drawIndex%5 == 0){ welcomeView.drawString = !welcomeView.drawString; } try{ Thread.sleep(sleepSpan);//睡眠 }catch(Exception e){ e.printStackTrace();//打印异常信息 } } } public void setFlag(boolean flag){//循环标志位的设置方法 this.flag = flag; }}

4.3.3.8当用户单击“放弃”菜单时,将进入帮助界面,菜单按钮时,重新开始。

28

青岛滨海学院毕业设计 绪论

29

青岛滨海学院毕业设计 绪论

canvas.drawBitmap(stop, 150,380, paint);

canvas.drawBitmap(change, 230,380, paint); canvas.drawBitmap(drop, 150,420, paint); canvas.drawBitmap(help, 230,420, paint); if(status == 2){//游戏胜利 tt.flag = false; canvas.drawBitmap(win, 40, 160, paint); }else if(status == 3){//游戏失败 tt.flag = false; canvas.drawBitmap(fail, 80, 180, paint); }else if(status == 4){//是否退出 canvas.drawBitmap(exit, 70, 180, paint); }else if(status == 0){//游戏中 if(tishi == true){ canvas.drawBitmap(heart, 10, 340, paint); } //画全部数字 tt.flag = true; int x; int y;

for(int i = 0;i < 9;i++){

for(int j = 0;j < 9;j++){ x = 16+28*j; y = 35+29*i; if(j>=3&&j<6){ x += 20; } if(j>=6){ x += 42; } if(i>=3&&i<6){ y += 18; }

30

青岛滨海学院毕业设计 绪论

if(i>=6){ y += 34; } canvas.drawBitmap(number_bitmap[outputNum[i][j]], x, y, paint); } } //画用户输入的数字

for(int i = 0;i < 9;i++){

for(int j = 0;j < 9;j++){ x = 16+28*j; y = 35+29*i; if(j>=3&&j<6){ x += 20; } if(j>=6){ x += 42; } if(i>=3&&i<6){ y += 18; } if(i>=6){ y += 34; } canvas.drawBitmap(number_input[inputNum[i][j]], x, y, paint);

}

4.3.1计时器线程的开发

TimeThread类的实现比较简单,只需每一秒更改以下GameView中表示时间的属性即可,代码如下:

public class TimeThread extends Thread{ GameView gameView;//声明GameView的引用 boolean flag=true;//循环标志位 public TimeThread(GameView gameView){//构造器 this.gameView=gameView;//得到GameView的引用 } public void run(){//重写的run方法 while(flag){ gameView.time++;//时间自加 try{ Thread.sleep(1000);//睡眠一秒种 }catch(Exception e){//捕获异常 e.printStackTrace();//打印异常信息 } } }

}

4.3.2数独生成器开发

本节将对数组的生成器ShuDuSuanFa进行开发,该类基本上是数学计算,通过一定的算法产生的需要的数独数组,通过特定的接口供应其他类使用。

该类产生的数组是矩阵图,是矩阵图的每一行、每列、每块都没有重富的数字,算法的简单思路是先取出一个0-9的数字,然后检查其搜在的行、列、块是否要符合要求,当填充符合是要继续填充下一个,而当不符合时,再次随机取出一个没有取出的数字,

31

青岛滨海学院毕业设计 绪论

在判断。接下来对类进行详细,步骤如下:

ublic class ShuDuSuanFa{ int[][] n = new int[9][9];//存储数字的数组

int[] num = {1,2,3,4,5,6,7,8,9};//生成随机数字的源数组,随机数字从该数组中产生 public boolean checkLine(int col){// 检查列是否符合要求 for(int j = 0;j < 8;j++){ if(n[j][col] == 0){ continue; } for(int k =j + 1;k< 9;k++){ if(n[j][col] == n[k][col]){ return false; } } } return true; } public boolean checkNine(int row,int col){//检查3X3区域是否符合要求 int j = row/3*3;//获得左上角的坐标 int k = col/3*3; for(int i = 0;i < 8;i++){//循环比较 if(n[j + i/3][k + i % 3] == 0){ continue; } for(int m = i+ 1;m < 9;m++){ if(n[j + i/3][k + i % 3] == n[j + m/3][k + m % 3]){ return false; } } } return true; }

public boolean checkRow(int row){//检查行是否符合要求 for(int j = 0;j < 8;j++){ if(n[row][j] == 0){ continue; } for(int k =j + 1;k < 9;k++){ if(n[row][j] == n[row][k]){ return false; } } } return true; } public int generateNum(int row,int col,int time){//产生1-9之间的随机数字 if(time == 0){//第一次尝试时,初始化随机数字源数组 for(int i = 0;i < 9;i++){ num[i] = i + 1; } } //第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回 if(time == 9){ return 0; } //不是第一次填充 //生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字 int ranNum = (int)(Math.random()*(9-time)); //把数字放置在数组倒数第time个位置,

32

青岛滨海学院毕业设计 绪论

int temp = num[8 - ranNum]; num[8 - ranNum] = num[ranNum]; num[ranNum] = temp; return num[8 - ranNum]; } public int[][] getShuDu(){//生成数字 for(int i = 0;i < 9;i++){ int time = 0;//尝试填充的数字次数 for(int j = 0;j < 9;j++){//填充数字 n[i][j] = generateNum(i,j,time); //如果返回值为0,则代表卡住,退回处理 if(n[i][j] == 0){ if(j > 0){//不是第一列,则倒退一列 j-=2; continue; }else{//是第一列,则倒退到上一行的最后一列 i--; j = 8; continue; } } if(isCorret(i,j)){//成功 time = 0; }else{ time++; j--; } } } return n; } public boolean isCorret(int row,int col){//是否满足行、列和九宫区域不重复的要求

return (checkRow(row)&checkLine(col)&checkNine(row,col));

}

33

青岛滨海学院毕业设计 绪论

5.总结

5.1游戏的优化与改进

本游戏的基本功能已经开发完毕,但仍有很多方面可以进行优化和改进,有能力的读者可以继续对本游戏进行提升,可以提升的地方如下:

5.1.1音效的添加

在玩家眼中,好的游戏总是有声有色丰富多彩的,离开了生动的音效,有戏的体验就会大打折扣,所以对音效的处理时游戏开发中必不可少的。本游戏中,并没有添加对音效的处理,有能力的玩家可以再适当的地方添加上音效,一提升玩家的体验。

5.1.2玩家的定制

游戏应该开发成尽可能地定制,因为玩家的水平不一,过于困难或者过于简单都会使游戏

失去吸引力。本游戏中,应该添加上游戏难度的选择功能,使玩家根据自己的情况选择

不同的等级进行游戏,这样才更合理。

提示:如果能将玩家的定制结果保存起来,不用每次运行游戏重新设置,会让游戏更加人性化。

5.1.3成绩的存储

如果能在游戏的最后加上游戏成绩的存储于排行,更会大大提高玩家对本游戏的体验,Android的存储技术在前面的章节已经讲解过,读者可以参考前面的讲解,自行开发完成此功能。

经过一个一月期的努力,Android平台手机软件终于完成了。由于对JAVA浓厚的兴趣引发了我对Android的好奇心,从一开始什么都不懂一直摸索完成了这个软件。

在这个过程中,我学会了很多知识,比如Android环境的搭建、Intent、Activity、Service、ContentProvider、SQLite等,但我学会的最重要的一点是,利用现有的资源去解决问题,在图书馆、在网络上寻找答案。

虽然,这个软件目前运行良好,但是我认为代码的健壮行还很差,在整个工程的构思方面也不足,用户操作界面还不够灵活,这些问题还需要今后逐一解决。与此同时,这个软件还可以进一步扩展,例如“新闻模块”、“信息分享”等,使功能更加强大,带给用户更好的体验与生活的便捷。

34

青岛滨海学院毕业设计 绪论

致 谢

在这次毕业设计的过程中。我得到了许多人的帮助,在毕业设计论文之际,我想向曾给我帮助的老师极其同学衷心得感谢。

回想整个设计过程,虽有不易,却让我除去浮躁。经历了思考和启示,不仅提高动手能力即自学能力。还知道了我的不知足之处,还让我更加深入体会课程设计的精髓和意义,因此倍感珍惜。

首先我要感谢我的指导老师李红军,在毕业设计中给予我的指导,提供我帮助、支持、和提出包裹意见,这是我能顺利完成这次毕业设计主要原因,更重要的是技术难题。让我把游戏做的更加完善,在此期间。我不仅学到了许多新的知识,而且还开阔了我的视野,提高了自己的设计能力,使我们的信任给了很多锻炼的机会。

其次。我也要感谢我得同学,他们也为我解决了不少明白设计的难题,他们给我无私的帮助和鼓励,给予的大量帮助和有意讨论让我从他们身上学到了很多东西,他们是我学习,工作和生活上的伙伴。也是面对困难和挑战是的战友。同时也感谢学院为我提供了良好的做设计的环境和实践机会,在大一到大三这段时光。我已经经历了很多实践设计。无一不是学校给我们的机会,让我们得得确确从看书的理论达到了实践的高度。

最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。本设计在指导教师的细心指导之下完成。本毕业设计从选题到完成,几易其稿,每一步都是在指导老师的指导下完成的,倾注了指导老师大量的心血,再次我向我的指导老师表示深切的谢意与祝福

35

本文来源:https://www.bwwdw.com/article/gyf.html

Top