版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Android的五子棋游戏设计与实现
毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:
学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期:年月日导师签名:日期:年月日
注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神□优□良□中□及格□不及格2、学生掌握专业知识、技能的扎实程度□优□良□中□及格□不及格3、学生综合运用所学知识和专业技能分析和解决问题的能力□优□良□中□及格□不及格4、研究方法的科学性;技术线路的可行性;设计方案的合理性□优□良□中□及格□不及格5、完成毕业论文(设计)期间的出勤情况□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)指导教师:(签名)单位:(盖章)年月日
评阅教师评阅书评阅教师评价:一、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格二、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)评阅教师:(签名)单位:(盖章)年月日教研室(或答辩小组)及教学系意见教研室(或答辩小组)评价:一、答辩过程1、毕业论文(设计)的基本要点和见解的叙述情况□优□良□中□及格□不及格2、对答辩问题的反应、理解、表达情况□优□良□中□及格□不及格3、学生答辩过程中的精神状态□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格评定成绩:□优□良□中□及格□不及格教研室主任(或答辩小组组长):(签名)年月日教学系意见:系主任:(签名)年月日摘要现代科技的飞跃发展,3G智能手机为我们带来了很多便利,给我们提供了一个高效的平台,在社会各界得到越来越广泛的应用。因此,本文围绕一个“基于Android平台的五子棋游戏设计与开发”程序的设计和应用系统的开发课题为背景,详细介绍了在Android平台上以Java为语言编写游戏的过程。五子棋游戏的开发不仅是一个简单游戏的编写过程,更重要的是在系统分析和设计阶段所做的工作。该程序在设计过程中严格遵循软件工程学的方法,用分阶段的生命周期计划严格管理,并主要讲述了程序的总体设计、详细设计阶段,对程序进行需求迭代,不断修正和改进,利用SQlite、SharedPreferences等数据存储功能,直到形成一个完善的可行性系统.界面美观、大方,方便的操作与良好的视觉感应共同构成了“基于Android平台的五子棋游戏设计与开发”的设计。关键词:Android;Java;数据存储;软件工程;五子棋BackgammongamedesignbasedonAndroidAbstractModerntechnologydevelopsrapidlyinoursociety.Itmakesourlivesmoreconvinientandprovidesanefficientplatformforus.Recently,the3GSmartphonebecomesmoreandmorepopular.Therefore,mythesiswilltalkabouttheprogressofthegameswhichisprogramedbytheJavalanguage.MypaperisbasedonthetasksontheprogramdesignandtheapplicationsystemwhichisbasedontheQuintetgamedesignanddevelopmentbuiltontheAndroid.ThedevelopmentoftheQuintetgameisnotjustaprogressofprograming.What’smore,weneedtopaymoreattentiontotheworkontheperiodofsystematicanalysisanddesign.Theprogramfollowsthesoftwareengineeringstrictlyandnarratesthemajordesignandsection.Thisprogrammailytalkabouttheperiodofthesystemdesignandthedetaileddesign.Andalsoitwillstudyonthebugfixingandimprovements.ByusingthesomefuctiongofdataloggingsuchastheSQlite,SharedPreferences,itbuildapracticablesystem.TheniceandexpertinterfaceandgoodvisualintroductionformthedesignwhichisbasedonthedesigninganddevelopmentofAndroidplatformQuintetgame.Keywords:Android;Java;Datastorage;softwareengineering;backgammon目录摘要 iAbstract ii1绪论 11.1课题研究的背景 11.2国内发展状况 11.3相关知识的介绍 21.3.1开发工具简介 21.3.2数据存储简介 31.4系统运行配置 31.5论文主要工作 32Android的系统研究 52.1Android的构架 52.1.1Android构架综述 52.1.2Android应用程序框架层 62.1.3Android应用程序层 72.1.4应用程序组件 72.2Android嵌入有米广告 83需求分析 103.1功能需求 103.2性能需求 103.3可行性研究 103.3.1经济可行性 103.3.2技术可行性 114概要设计 124.1系统功能结构及流程图 124.2数据存储设计 125详细设计 145.1主界面详细设计 145.2游戏开始模块详细设计 155.2.1背景音乐和音效、嵌入广告 155.2.2三大难度算法的设计及输赢的判断 155.3游戏说明模块详细设计 195.4最高纪录模块详细设计 195.5游戏设置模块详细设计 206游戏的实现 226.1背景音乐和音效的实现 226.2嵌入广告的实现 236.3三大难度的实现 236.3.1简单 236.3.2中等 246.3.3较难 256.4游戏输赢判断的实现 26结论 28参考文献 29致谢 30外文文献 311绪论1.1课题研究的背景随着计算机与网络技术的日益发达,同时也进入了高效的信息化时代,说起手机,没有一个人会感到陌生。近几年来一个名词一直影响着许许多多的手机用户,它就是智能手机。智能手机凭借其强大的功能吸引住了许多用户的眼球,因为有了广大的用户基础,智能手机也风靡一时。说起智能手机,除了他有一颗强大的CPU和其他一些较高配置的硬件外,其真正的智能还要归功于其不可缺少的智能操作系统。随着3G的到来,无线带宽越来越高,使得更多内容丰富的应用程序部署在手机上成为可能,比如视频通话、视频点播、移动互联网等。为了承载这些数据应用及快速部署,手机功能将越来越智能越来越开放。手机游戏也就应运而生,每个手机上都有手机游戏,游戏是人们娱乐的一种方式。Android平台下的手机游戏更是受顾客的亲睐,手机游戏不仅玩起来比较方便,还有助于开发我们的思维,使大家在娱乐的同时也增长了见识,拓展了思维。五子棋对自己的思维及协调能力有益,能使我们注意力集中,耐心也有明显的提升,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。1.2国内发展状况随着3G时代的到来,在这个新的研究领域中,我国在世界上处于较为领先的地位,我国电信业正处在高速发展的阶段,特别是新业务、新服务在打造品牌、创建市场的时期,对电信产业的结构调整必须充分的考虑成本。由我国自主研发并获政府支持的TD-SCDMA制式技术,在频谱利用率、对业务支持具有灵活性等独特优势。这种全称为TimeDivision-SynchronousCDMA(时分同步CDMA)的技术,其空中接口采用了四种多址技术:TDMA,CDMA,FDMA,SDMA(智能天线)。综合利用四种技术资源分配时在不同角度上的自由度,得到可以动态调整的最优资源分配。克服由覆盖半径随用户数目的增加而收缩造成的呼吸效应和当手机靠近基站功率必定过剩而且形成有害的电磁辐射所造成的远近效应,并且实现了动态信道分配。而分别由欧洲和美韩所倡导的WCDMA和CDMA2000也各具优势。我过拥有庞大的手机用户群体,为游戏产业的发展奠定了良好的用户基础。手机游戏的真正生命力,是成为最终吸引用户的关键所在。通过色彩艳丽的画面或奇特的游戏名称来吸引用户。3G手机游戏开发周期相对比较短,资金投入小,用户广泛统一;载体方便,很容易在市场上推广;如需收费,也合理方便。游戏可以锻炼思维及协调能力,能使我们注意力和耐心有所提高,培养我们的逻辑思维能力,对智力以及记忆力都很有帮助。1.3相关知识的介绍本游戏采用当前很热的Android系统,以Java语言为基础的2D手机游戏。用户游戏界面通过手机终端来实现,较强的人际交互。这样就大大简化了用户的操作,该游戏为免费游戏,用户可以放心使用。此外,本系统采用了SharedPreferences作为应用程序的数据存储,用来存储简单的配置信息,简单快捷,占用系统资源少。背景音乐采用媒体播放功能实现,控制也比较方便。1.3.1开发工具简介本系统的开发环境是JDK1.6+MyEclipse8.5+AndroidSDK,使用的语言是Java语言。JDK(JavaDevelopmentKit)是SunMicrosystems公司为Java开发人员设计的产品。从Java诞生以来,JDK已经成为使用最广泛JavaSDK。JDK是整个Java的核心内容,包括了Java运行环境,Java工具和Java基础的类库三部分。从Sun的JDK1.5开始,提供了一些非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的Java集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,Spring,CSS,Javascript,SQL,Hibernate。AndroidSDK是软件开发工具包(softwaredevelopmentkit)。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件工具的集合。因此AndroidSDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。1.3.2数据存储简介SharedPreferences存储方式,它是Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户名和密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入。最高纪录则用此存储方式进行存储。SQlite存储方式,它是Android平台上集成的一个嵌入式关系型数据库。SQLite3支持
NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)
等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。但有一种情况例外:定义为INTEGERPRIMARYKEY的字段只能存储64位整数,当向这种字段中保存除整数以外的数据时,将会产生错误。另外,
SQLite
在解析CREATETABLE
语句时,会忽略
CREATETABLE
语句中跟在字段名后面的数据类型信息。1.4系统运行配置操作系统:Android2.1以上。开发包:JDK1.6、AndroidSDK。数据存储:SharedPreferences、SQlite。1.5论文主要工作此游戏主要是采用Android的View框架编写,部分框架运用Android中的其他组件。主要运用了算法来实现对棋局的分析,棋盘输赢的判定。UI方面:此游戏当进入游戏的界面时,调用的是一个用相对布局-AbsoluteLayout的XML布局文件。其中包括了一个IamgeView和4个Button.分别实现了不同的功能。第一个Button是进入新游戏,点击按钮进入新游戏,来选择对手。第二个Button是帮助,用了一个TextView来说明怎样来进行游戏。第三个Button是游戏的关于,用了一个AlertDialog来介绍了一下游戏的这个游戏的好处。第四个Button是游戏的退出按钮。在游戏中,我用画线来不满了整个的手机屏幕,在上面用了TextView来进行了文字的说明和提示。本篇论文,主要目的是为了探讨更加深入的理解Android,为移动终端上的游戏软件的打造提供一个思路
2Android的系统研究2.1Android的构架2.1.1Android构架综述Android是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。作为一个层次结构的软件集,一定有一个层次的系统构架,下图为Android的构架图: 图2.1Android系统构架从图2.1中明显的可以看出该系统从下到上包括Linux内核层、Libraries和运行时环境层、应用程序框架层、应用程序层四层结构。在Android的最下层的操作系统基于Linux2.6内核,往上的中间件包括Libraries和运行时环境层和应用程序框架层两个层次,最上层则是应用程序层。 在Android构架中,可以很明显的看到,底层的Linux内核则采用的是C语言,libraries采用C或者C++,但是应用程序层、应用程序框架层和运行时环境中的Android核心库采用Java语言编写,也就是说Android虽然底层用的是C或者C++但是应用程序的开发则用的是Java。Google采用这样的模式可能是因为相对于C或者C++,Java的开发周期更短的缘故,这样的话就能在短时间内为Android提供大量的应用软件。我们知道,作为一个智能手机平台,只有拥有了大量的源源不断的应用程序作为支持,才能受人们的欢迎,从而才能占领市场。之前Nokia的s60第三版就是一个很好的例子,因此NokiaS60v3的系统才被世人所熟知,并且曾经在智能手机行业占有很大的市场。而另一个例子就是Linux系统,在所有操作系统中,稳定性和性能上能够和Linux抗衡的系统不多吧,但是在智能手机市场上为什么Linux却可以说是一败涂地,其原因也和其第三方应用少是脱不了关系的。2.1.2Android应用程序框架层应用程序框架层是处于AndroidRuntime和库函数层于应用程序层之间,该层使用开发语言的是Java语言。应用程序框架是能够让开发者完全访问核心应用程序所使用的API(ApplicationProgrammingInterface,应用程序编程接口),该框架能够让组件软件重用的工做简单化。同时该框架中的任何一个功能模块都是等价的,任何一个应用程序都可以发布其功能模块,该功能模块可以替代当前的任意一个功能模块,但前提是必须遵循框架的安全限制,另外,其他的任意应用程序能够使用这个发布的功能模块。这样的设计就使Android的构件重用率提高了。在每一个应用程序背后,应用程序框架为其提供了一系列的服务。这些服务包括:①一个丰富并且可扩展的视图,通过这个视图我们可以使用它提供的一些包括按钮、文本框、列表、网格等甚至可嵌入的web浏览器的应用程序来构造我们的应用程序。②内容提供器(contentproviders),有了内容提供器,一个应用程序可以共享它自己的数据或者访问另外一个应用程序中共享的数据。③资源管理器(resourcemanager),使用资源管理器,我们在应用程序中能够访问到一些如图形、布局文件等一些非代码资源。④通知管理器(notificationmanager),给程序员提供了一个可以在程序状态栏中显示自定义提示信息的管理器。⑤活动管理器(activitymanager),提供常用导航功能用来管理应用程序生命周期的服务。通过这些应用程序框架层提供的服务程序员能够方便的开发一个界面优秀功能强大易于共享的的应用程序。2.1.3Android应用程序层应用程序层包括了如名片管理、Googlemaps、浏览器等本地应用程序(nativeapps),如QQ、MSN、QuickOffice等第三方应用程序(thirdpartapps),以及developerapps。同样,该层的应用程序也都使用Java语言进行开发的。2.1.4应用程序组件
Android的一个主要特点是,一个应用程序可以利用其他应用程序的元素(假设这些应用程序允许的话)。例如,如果你的应用程序需要显示一个图像的滚动列表,且其他应用程序已经开发了一个合适的滚动条并可以提供给别的应用程序用,你可以调用这个滚动条来工作,而不用自己开发一个。你的应用程序不用并入其他应用程序的代码或链接到它。相反,当需求产生时它只是启动其他应用程序块。
对于这个工作,当应用程序的任何部分被请求时,系统必须能够启动一个应用程序的进程,并实例化该部分的Java对象。因此,不像其他大多数系统的应用程序,Android应用程序没有一个单一的入口点(例如,没有main()函数)。相反,系统能够实例化和运行需要几个必要的组件。有四种类型的组件:
活动(Activities)
服务(Services)
广播接收者(Broadcast
receivers)
内容提供者(Content
providers)
然而,并不是所有的应用程序都必须包含上面的四个部分,你的应用程序可以由上面的一个或几个来组建。当你决定使用以上哪些组件来构建Android应用程序时,你应该将它们列在AndroidManifest.xml文件中,在这个文件中你可以声明应用程序组件以及它们的特性和要求。关于AndroidManifest.xml在Android开发之旅:HelloWorld项目的目录结构的1.6、AndroidManifest.xml简单介绍了一下,可以参考一下。
2.2Android嵌入有米广告优蜜科技是业界领先的移动信息服务提供商,拥有国内领先的手机广告平台-有米广告,总部设在广州,并在北京、美国加州设有分公司。优蜜科技拥有国内顶尖的运营和研发团队,管理层汇集高盛、美林证券、百度等知名企业精英,公司自成立以来,一直全心专注于移动互联网研究,与中国移动、中国电信等知名企业的紧密合作,更是凸显了优蜜科技超越同行的非凡价值。“优蜜”的“优”体现我们“服务客户,用户第一,创造价值”的经营理念,“蜜”表示公司内部要像蜜蜂一样各尽其职,团结一致,为公司的发展和持续领跑不懈努力。优蜜科技拥有全国最大的手机应用广告平台——有米传媒手机广告平台(以下简称有米广告)。有米广告拥有自主核心技术及完整知识产权,在用户特征识别、客户端防作弊、广告精准投放、广告智能投放等关键领域远远领先同业。有米广告以7亿手机用户为广告受众,不仅为数以万计的企业广告主提供精准的产品营销和品牌推广服务,还为应用开发者创造出源源不断的收益。截至2010年5月5日,有米广告的市场占有率超过98%。“有米”是国内领先的移动应用广告平台。该平台称是国内首家移动应用广告平台,话说也是,在国内基本上无线广告都是wap广告,即在wap网站上面投放广告。这种广告投放方式,在客户端上表现能力不强,除非像iPhone和android手机这个网络功能比较强悍的手机能做出比较炫的效果,其他手机平台基本上都是一条文字描述,然后点击就跳转到宣传页面或是下载页面。这种形式的广告,你用手机上网那是到处都可见到。话说也已经习惯了、免疫了。
有米这个广告平台支持在android、Symbian、WindowsMobile和j2me这个四个手机系统的应用程序中嵌入广告,话说这个四个平台手机也覆盖了国内绝大部分的手机了吧,单纯是Symbian手机就占了60%多了。看来这个平台还真符合国情。不过Symbian大部分手机都是键盘机,不知这个点击广告它是如何处理的,毕竟不能单靠展示广告的费用吧,这个CPM太低了!看了它Symbiansdk文档中的示例图,好像还提供了一个快捷键来专门点击广告,看来有米广告还考虑得真全面。
有米广告的广告可以根据应用程序类别、应用程序平台、投放广告地区、目标移动设备、性别、年龄段、屏幕分辨率、投放时间、每天最多投放次数进行投放广告,看来这个平台的精准营销策略做得不错!
深思一下,有米广告可以解决这一问题,开发者可以在自己免费的软件嵌入广告,这就是一个收入来源,同时,还能提高你继续开发下一个软件的动力,在这个过程中,也可以提高自己的编程技术、理解用户体验的重要性、也能培养自己的商业眼光。而在这提升的过程中,开发者根本不需要任何成本。至于用户,免费的软件中嵌入一些广告,开始是会比较厌烦,久而久之也就和在wap上投放广告一样习惯了、免疫了。我想,用户也能理解和体谅开发者的辛苦。你说,做程序员容易吗?整天加班、日日夜夜不停得编写程序。因此,也就有了“程序员是IT界的民工”之说。
对于有米广告这种移动应用广告平台,我确实很看好,我也相信它是移动互联网领域的一大趋势。对于android、Symbian、WM、j2me这个四个手机平台的开发者都可以去试试这个平台。
3需求分析3.1功能需求五子棋分为五个模块:开始游戏、游戏说明、最高纪录、游戏设置、退出游戏。1.开始游戏:①.点击进入游戏。2.游戏说明:①.五子棋游戏规则的说明及操作说明。3.最高纪录:①.纪录不同难度获胜的最短时间,可清空。4.游戏设置:①.音效设置:开启/关闭音效、背景音乐的开/关。②.难度设置:简单,中等,较难。5.退出游戏:①.退出游戏。3.2性能需求1.硬件环境:PC2.软件环境:WindowsXP、Android2.1以上3.3可行性研究3.3.1经济可行性该软件为免费软件,不收取任何费用。开发周期相对较短,能有效的利用开发人员。3.3.2技术可行性运用Android智能手机的平台,开发人员具有一定的Android知识,熟悉的算法基础。智能手机拥有扎实的硬件平台以及较好的操作系统;该游戏能在手机上正常运行;操作简单,方便,为游戏玩家提供了一个良好的游戏平台。
4概要设计4.1系统功能结构及流程图根据系统功能的要求,可以将系统分解成几个功能模块来分别设计。系统结构如图4.1所示:Android五子棋Android五子棋开始游戏游戏说明最高纪录游戏设置退出游戏图4.1系统结构图4.2数据存储设计根据系统所做的需求分析和系统设计,SharedPreferences为最有效的存储方式。它用来存储一些简单配置信息的一种机制,比SQlite更高效。SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存,它是什么样的处理方式呢?
SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml处理时Dalvik会通过自带底层的本地XMLParser解析,比如XMLpull方式,这样对于内存资源占用比较好。这种方式应该是用起来最简单的Android读写外部数据的方法了。他的用法基本上和J2SE(java.util.prefs.Preferences)中的用法一样,以一种简单、透明的方式来保存一些用户个性化设置的字体、颜色、位置等参数信息。一般的应用程序都会提供“设置”或者“首选项”的这样的界面,那么这些设置最后就可以通过Preferences来保存,而程序员不需要知道它到底以什么形式保存的,保存在了什么地方。当然,如果你愿意保存其他的东西,也没有什么限制。只是在性能上不知道会有什么问题。在Android系统中,这些信息以XML文件的形式保存在
/data/data/PACKAGE_NAME/shared_prefs
目录下。2个activity之间的数据传递除了可以通过intent来传递,还可以使用SharedPreferences来共享数据的方式SharedPreferences用法很简单.在A中设置Java代码Editorsharedata=getSharedPreferences("data",0).edit();sharedata.putString("item","hellogetSharedPreferences");mit();B中获取Java代码SharedPreferencessharedata=getSharedPreferences("data",0);Stringdata=sharedata.getString("item",null);Log.v("cola","data="+data);
5详细设计系统详细设计是对每个模块功能的具体设计,包括界面、功能模块和设计要点等内容。5.1主界面详细设计游戏主界面如图5.1所示:图5.1游戏主界面点击‘开始游戏’时,可直接进入游戏;‘游戏说明’为相关的介绍以及游戏操作;‘最高纪录’记录不同难度等级的最高成绩;‘游戏设置’为设置游戏背景音乐、音效、以及难度;‘退出游戏’为退出整个游戏。5.2游戏开始模块详细设计进入游戏后,按照操作可直接玩该五子棋游戏。图5.2是游戏界面的截图。图5.2游戏界面5.2.1背景音乐和音效、嵌入广告背景音乐和音效对一个游戏来说也是必不可少的。背景音乐开则进入游戏开始播放背景音乐,背景音乐关则相反。嵌入广告:广告在游戏中也是一个重要的决定因素,不仅仅可以提高自己的编程技术,还可以增加用户的体验、也能培养自己的商业眼光。5.2.2三大难度算法的设计及输赢的判断本设计中难度的设置是极为重要的阶段,不同难度的设置对玩家要求也各有不同。游戏流程如图5.3所示。判断开始判断开始胜负庄家胜玩家胜庄家下棋玩家下棋YNYYNN结束开始图5.3游戏流程图三大难度的算法设计,算法的主体思想分三个步骤:第一步:根据双方的当前的形势循环地假设性的分别给自己和对方下一子(在某个范围内下子),并判断此棋子能带来的形势上的变化,如能不能冲4,能不能形成庄家或玩家双3等,第二步:根据上一步结果,组合每一步棋子所带来的所有结果(如某一步棋子可能形成我方1个活3,1个冲4等),包括庄家和玩家的。第三步:根据用户给的规则对上一步结果进行排序,并选子(有进攻形、防守形规则)。简单:简单难度的实现,庄家不防守,在离玩家最近下棋棋子最近的8个位置上的空位上方随机下棋。中等:中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋”以及“四冲”时,防守;否则选择自己最长连棋并且可下棋的空位下棋。流程图如图5.4所示:玩家活四玩家活四防守进攻YNYYNN玩家四冲庄家活四庄家活三玩家活三庄家四冲YNY、YNY下棋N结束开始图5.4中等难度流程图 较难:较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活4棋,找双活3棋子,不行就找半活4,再不行就找单活3,双活2的攻守模式。流程图如图5.5所示:玩家活四玩家活四防守下棋YNYYNN玩家四冲玩家单活三制造活四玩家活三制造双活三YNY、YNYN制造四冲制造单活三制造双活二制造单活二NNNYYY开始结束图5.5较难难度流程图庄家与玩家的胜负判断:每走一步,调用判断方法。其思路为:首先有一个组的集合,就是横、竖、斜三个方向,每5格一组,这个可以根据宽高计算出来。循环这个集合。如果有同色连接5个,那么为胜同时将五格中已有4个同色并且剩余一格未操作的,放入一个集合内,若上一步没有结果,那么判断这个集合,如果有这个集合有两条以上,并且未操作格坐标不为同一个,那么同样为胜。5.3游戏说明模块详细设计游戏说明是游戏中不可或缺的部分,给玩家提供了简单的游戏玩法和明了的操作。图5.6是游戏说明界面截图。图5.6游戏说明5.4最高纪录模块详细设计最高纪录为纪录3个不同难度的最好成绩,也可清空最高纪录。图5.7是最高纪录截图,图5.8是清空最高纪录截图。图5.7最高纪录截图图5.8清空最高纪录截图5.5游戏设置模块详细设计游戏设置模块分为背景音乐开/关、音效开/关、难度选择。图5.9是设置界面截图,图5.10是背景音乐开关截图,图5.11是音效开关截图,图5.12是难度选择截图。图5.9设置界面截图图5.10背景音乐开关截图图5.11音效开关截图图5.12难度截图
6游戏的实现6.1背景音乐和音效的实现背景音乐和音效的实现,先创建播放文件,然后通过准备,播放,停止的模式来播放背景音乐和音效。部分代码如下:player=MediaPlayer.create(this,R.raw.bmusic);soundplayer=MediaPlayer.create(this,R.raw.soundmusic);if(play){//背景音乐 try{ player.prepare(); }catch(IllegalStateExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } player.start(); }else player.stop();if(sonudplay){//音效 try{ soundplayer.prepare(); }catch(IllegalStateExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } soundplayer.start(); }else soundplayer.stop();6.2嵌入广告的实现嵌入广告的实现,首先对其初始化,然后设置广告的基本信息,包括长度、高度、背景等。部分代码如下:static{//初始化 AdManager.init("f7b9d91818b3bada","58ac2c52e8a5df23",31,false,2.1); } publicvoidyoumi(){ //初始化广告视图 AdViewadView=newAdView(this,Color.GRAY,Color.WHITE,100); //设置监听者(可以不设置,对获取广告没有影响) adView.setAdListener(this); FrameLayout.LayoutParamsparams=newFrameLayout.LayoutParams( FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); //设置广告出现的位置(悬浮于底部) params.bottomMargin=0; params.gravity=Gravity.BOTTOM; //将广告视图加入Activity中 addContentView(adView,params); }6.3三大难度的实现6.3.1简单简单难度的实现,只有当庄家为活四的时候才进攻,其他情况离玩家最近下棋棋子最近的8个位置上的空位上随机下棋。部分伪代码如下:if(庄家下棋){if(庄家活四){ 下棋 } else{ 离玩家最近下棋棋子最近的8个位置上的空位上随机下棋 } return;}6.3.2中等中等难度的实现,庄家只防守,少攻击。当玩家有“三活棋”以及“四冲”时,防守;否则选择自己最长连棋并且可下棋的空位下棋。部分伪代码如下:if(庄家下棋){ //遍历玩家的棋子,在玩家的棋中加入合适的棋子,再判断if(玩家活四){ 防守 return; } elseif(玩家双活三){ 防守 return; } elseif(玩家四冲){ 防守 return; } else{//遍历自己的棋子if(庄家活四){ 防守 } elseif(庄家四冲){ 进攻 } elseif(庄家活三){ 进攻 } else{ 下棋 } } return;}6.3.3较难较难难度的实现,庄家有强烈的防守,有猛烈的攻击。双方都不可以制造活4棋,找双活3棋子,不行就找半活4,再不行就找单活3,双活2的攻守模式。部分伪代码如下:if(庄家下棋){ //遍历玩家的棋子,在玩家的棋中加入合适的棋子,再判断 if(玩家活四){ 防守 return; } elseif(玩家双活三){ 防守 return; } elseif(玩家四冲){ 防守 return; } elseif(玩家单活三){ 防守 return; } //遍历自己的棋子,加入合适一棋子,再判断 if(制造活四){ 下棋 } elseif(制造双活三){ 下棋 } elseif(制造四冲){ 下棋 } elseif(制造单活三){ 下棋 } elseif(制造双活二){ 下棋 } elseif(制造单活二){ 下棋 } return;}6.4游戏输赢判断的实现游戏输赢的实现,每走一步,调用判断方法。其思路为:首先有一个组的集合,就是横、竖、斜三个方向,每5格一组,这个可以根据宽高计算出来。循环这个集合。如果有同色连接5个,那么为胜同时将五格中已有4个同色并且剩余一格未操作的,放入一个集合内,若上一步没有结果,那么判断这个集合,如果有这个集合有两条以上,并且未操作格坐标不为同一个,那么同样为胜。部分代码如下:publicbooleanisWin(introw,intcolumn,intcurChess){ booleanisWin=false; if(this.isHorizontalWin(row,column,curChess) ||this.isVerticalWin(row,column,curChess) ||this.isLeftObliqueDownWin(row,column,curChess) ||this.isLeftObliqueUpWin(row,column,curChess)){ isWin=true; } returnisWin; } publicbooleanisHorizontalWin(introw,intcolumn,intcur){ booleanisWin=false; intch=0; for(intx=row;x>=40;x-=30){ if(curChess[x][column]==cur){ ch++; Log.e("iswinch",""+ch); }else break; } for(intx=row+30;x<=280;x+=30){ if(curChess[x][column]==cur){ ch++; Log.e("iswinch",""+ch); }else break; } if(ch>=5) isWin=true; Log.e("iswin",""+isWin); returnisWin;我的五子棋判断输赢的算法是比较容易想到的。将判断方向分为四个方向,即:水平向右,竖直向下,斜向右下,斜向左下。我用一个二维数组来存放数据表达棋盘交点处的状态,是否有棋子,是什么棋子。将数组全部初始化为0,而鼠标点击棋盘后会将对应交点数组里的数改变。以改变为1表示放置的是黑子,以改变为-1表示放置的是白子。然后在水平向右,竖直向下,斜向右下这三个方向从左上方的第一个棋子开始一层层做循环来判断是否连成五子。而斜向左下这个方向从右上第一个棋子一层层做循环来判断。我觉得这里是最容易出问题的地方,因为数组初始化的位置容易搞错,还有数组一不小心就会越界。我觉得我的这个五子棋还不是很完善。如还没有加入人机对战,没有解决小棋盘外还可以落子的问题,还有其实悔棋的功能还没有实现。不过我会在有充分的时间是完善。
结论经过这一段时间的不断探索,自己对Android的研究,对Android游戏有了进一步的了解和学习。这段时间的不懈努力,五子棋游戏已经完成,达到了预期的要求。一个完整的Android五子棋游戏完成了。在本游戏的设计与实现的过程中主要讲述了一个较完整的五子棋的系统设计部分,包括功能模块设计、广告设计等。系统设计为整个游戏构建了框架,各个功能模块实现各个细节部分。难,中,易三种游戏难度的选择,游戏界面美观大方,音效以及背景音乐的控制,均已实现。游戏难度的实现虽然比较麻烦,但是在自己的不懈努力和指导老师的帮助下,都顺利的完成了。系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的相关功能,从而实现Android五子棋。在这个毕业设计的每个阶段都能使我学到新的东西,虽然也有一些不足之处,但是每一个不足之处都是我值得思考的问题,这将对我以后的发展很有帮助。随着3G智能机的普及,人们对游戏的要求也越来越高,人机对战的实现往往是不够的。现在网络越来越好,网络双人对战也是一个很不错的研究方向。
参考文献[1](美)威尔顿,麦可匹克.JAVAScript入门经典(第3版).施宏斌译.北京:清华大学出版社,2009[2](美)BruceEckel.JAVA编程思想[M].陈昊鹏译.北京:机械工业出版社,2007[3](美)ThomasPetchel.《JAVA2游戏编程》.北京:清华大学出版社,2005[4]张孝祥.JAVA就业培训教程[M].北京:清华大学出版社,2003[5]宏伟,何丰泉.《五子棋连珠棋初步》.哈尔滨科技出版社.1999[6]孔令德.毕业设计案例教程—从系统开发到论文写作[M].北京国防工业出版社,2007
[7]吴其庆编著.JAVA程序设计实例教程.北京:冶金工业出版社,2006
[8]赵文靖编著.JAVA程序设计基础与上机指导.北京:清华大学出版社,2006
[9]赵毅主编.跨平台程序设计语言——JAVA.西安:西安电子科技大学出版社,2006
[10]王克宏
著.JAVA技术教程(基础篇).北京:高等教育出版社,2002.04
[11]孙燕
主编.JAVA2入门与实例教程.北京:中国铁道出版社,2003.01
致谢在撰写本文过程中,得到了很多老师同学的帮助,给他们以诚挚的谢意。该设计是在赵涓涓老师的指导下完成的。从上学期的开题、分析到撰稿和修改等整个论文撰写,赵老师都给予了我细心的指导和比较全面的建议。在此,我向赵老师表达崇高的敬意和衷心的感谢!赵老师,您辛苦了!谢谢您。在大学生活期间,有曾经帮助过我的老师们,谢谢你们;谢谢我身边的同学和朋友,是你们给我了无微不至的帮助和关怀,谢谢你们。四年求学期间是你们给了我帮助,我才能有今天。每一部分知识的积累都与你们的帮助密不可分,我的今天都是你们给我的!再次感谢所有帮助我的老师和同学们!!!谢谢
外文文献ActivityandTaskDesignThisdocumentdescribescoreprinciplesoftheAndroidapplicationframework,fromahigh-level,user-centricperspectiveusefultointeractionandapplicationdesignersaswellasapplicationdevelopers.Itillustratesactivitiesandtaskswithexamples,anddescribessomeoftheirunderlyingprinciplesandmechanisms,suchasnavigation,multitasking,activityre-use,intents,andtheactivitystack.ThedocumentalsohighlightsdesigndecisionsthatareavailabletoyouandwhatcontroltheygiveyouovertheUIofyourapplication.ThisdocumentdrawsexamplesfromseveralAndroidapplications,includingdefaultapplications(suchasDialer)andGoogleapplications(suchasMaps).YoucantryouttheexamplesyourselfintheAndroidemulatororonanAndroid-powereddevice.Ifyouareusingadevice,notethatyourdevicemaynotofferalloftheexampleapplicationsusedinthisdocument.Applications,Activities,ActivityStackandTasksFourfundamentalconceptsintheAndroidsystemthatarehelpfulforyoutounderstandare:ApplicationsActivitiesActivityStackTasksApplicationsAnAndroidapplicationtypicallyconsistsofoneormorerelated,looselyboundactivitiesfortheusertointeractwith,typicallybundledupinasinglefile(withan.apksuffix).Androidshipswitharichsetofapplicationsthatmayincludeemail,calendar,browser,maps,textmessaging,contacts,camera,dialer,musicplayer,settingsandothers.AndroidhasanapplicationlauncheravailableattheHomescreen,typicallyinaslidingdrawerwhichdisplaysapplicationsasicons,whichtheusercanpicktostartanapplication.ActivitiesActivitiesarethemainbuildingblocksofAndroidapplications.Whenyoucreateanapplication,youcanassembleitfromactivitiesthatyoucreateandfromactivitiesyoure-usefromotherapplications.Theseactivitiesareboundatruntime,sothatnewlyinstalledapplicationscantakeadvantageofalreadyinstalledactivities.Onceassembled,activitiesworktogethertoformacohesiveuserinterface.Anactivityhasadistinctvisualuserinterfacedesignedaroundasingle,well-boundedpurpose,suchasviewing,editing,dialingthephone,takingaphoto,searching,sendingdata,startingavoicecommand,orperformingsomeothertypeofuseraction.Anyapplicationthatpresentsanythingonthedisplaymusthaveatleastoneactivityresponsibleforthatdisplay.WhenusinganAndroiddevice,astheusermovesthroughtheuserinterfacetheystartactivitiesoneaftertheother,totallyoblivioustotheunderlyingbehavior—tothemtheexperienceshouldbeseamless,activityafteractivity,taskaftertask.Anactivityhandlesaparticulartypeofcontent(data)andacceptsasetofrelateduseractions.Eachactivityhasalifecyclethatisindependentoftheotheractivitiesinitsapplicationortask—eachactivityislaunched(started)independently,andtheuserorsystemcanstart,run,pause,resume,stopandrestartitasneeded.Becauseofthisindependence,activitiescanbere-usedandreplacedbyotheractivitiesinavarietyofways.Anactivityisthemostprominentoffourcomponentsofanapplication.Theothercomponentsareservice,contentproviderandbroadcastreceiver.ActivityStackAstheusermovesfromactivitytoactivity,acrossapplications,theAndroidsystemkeepsalinearnavigationhistoryofactivitiestheuserhasvisited.Thisistheactivitystack,alsoknownasthebackstack.Ingeneral,whenauserstartsanewactivity,itisaddedtotheactivitystack,sothatpressingBACKdisplaysthepreviousactivityonthestack.However,theusercannotusetheBACKkeytogobackfurtherthanthelastvisittoHome.Theaddingofanactivitytothecurrentstackhappenswhetherornotthatactivitybeginsanewtask(aslongasthattaskwasstartedwithoutgoingHome),sogoingbackcanlettheusergobacktoactivitiesinprevioustasks.TheusercangettotasksearlierthanthemostrecentHomebyselectingitsrootactivityfromtheapplicationlauncher,ashortcut,orthe"Recenttasks"screen.Activitiesaretheonlythingsthatcanbeaddedtotheactivitystack—views,windows,menus,anddialogscannot.Thatis,whendesigningthenavigation,ifyouhavescreenAandyouwanttheusertobeablegotoasubsequentscreenBandthenusetheBACKkeytogobacktoscreenA,thenthescreenAneedstobeimplementedasanactivity.TheoneexceptiontothisruleisifyourapplicationtakescontroloftheBACKkeyandmanagesthenavigationitself.TasksAtaskisthesequenceofactivitiestheuserfollowstoaccomplishanobjective,regardlessofwhichapplicationstheactivitiesbelongto.Untilanewtaskisexplicitlyspecified(see"InterruptingtheTask"),allactivitiestheuserstartsareconsideredtobepartofthecurrenttask.It'snotablethattheseactivitiescanbeinanyapplication—thatis,allinthesameapplicationorindifferentones.Thatis,ataskthatstartsoutincontactscancontinue,bychoosinganemailaddress,toanemailactivityandthen,byattachingafile,toapicturegallerytopickfrom.Contacts,emailandpicturegalleryareallseparateapplications.Theactivitythatstartsataskiscalledtherootactivity.Itisoften,butnotnecessarily,startedfromtheapplicationlauncher,Homescreenshortcutor"Recenttasks"switcher(alongpressonHomeonsomedevices).Theusercanreturntoataskbychoosingtheiconforitsrootactivitythesamewaytheystartedthetask.Onceinsideatask,theBACKkeygoestopreviousactivitiesinthattask.Theactivitystackismadeupofoneormoretasks.Herearesomeexamplesoftasks:SendatextmessagewithanattachmentViewaYouTubevideoandshareitbyemailwithsomeoneelseInterruptingtheTask-Animportantpropertyofataskisthattheusercaninterruptwhatthey'redoing(theirtask)toperformadifferenttask,thenareabletoreturntowheretheyleftofftocompletetheoriginaltask.Theideaisthatuserscanrunmultipletaskssimultaneouslyandswitchbetweenthem.Therearetwoprimarywaystojumpofftothatothertask—inbothcasestheusershouldbeabletoreturntowheretheywerebeforetheinterruption:Userisinterruptedbyanotification–anotificationappearsandtheuserwantstoactonitUserdecidingtoperformanothertask–userjustpressesHomeandstartsanapplicationOfcourse,thereareexceptionstotherules.Beyondthetwowaysjustmentioned,thereisathirdwaytostartatask,andthatisbystartinganactivitythatdefinesitselfasanewtask.MapsandBrowseraretwoapplicationsthatdothis.Forexample,choosinganad
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年机器人在广告宣传中的应用
- 急诊科中暑护理与治疗措施
- 线头反应护理案例
- 呼吸内科肺部感染抗生素治疗
- 2026中国资源循环集团有限公司春季校园招聘备考题库及参考答案详解【研优卷】
- 生活常识科普小知识
- 北京金隅砂浆公司招聘考试真题2024
- 2026江苏扬州高邮高新招商发展有限公司招聘招商专员5人备考题库【必考】附答案详解
- 异位妊娠休克护理
- 2026浙江宁波报业传媒集团有限公司招聘编辑1人备考题库附答案详解(研优卷)
- 2026年湖北生态工程职业技术学院单招综合素质考试题库带答案详解
- 标准化考试题库管理及维护方案
- 2019电力系统继电保护事故案例分析
- 生成式人工智能在初中历史课堂互动教学中的实践与反思教学研究课题报告
- 2026年1月浙江省高考首考英语试卷真题完整版(含答案+听力)
- 2025年研究生政治复试笔试题库及答案
- 2024+EACTS+指南:成人心脏手术围手术期用药
- 2026届新高考高中英语语法填空题66篇(含答案解析)
- 2026年时事政治测试题库附参考答案(培优)
- 2025年风电叶片回收十年市场规模报告
- NCCN临床实践指南:头颈部肿瘤(2026.V1)解读课件
评论
0/150
提交评论