基于Android平台五子棋游戏的设计与实现_第1页
基于Android平台五子棋游戏的设计与实现_第2页
基于Android平台五子棋游戏的设计与实现_第3页
基于Android平台五子棋游戏的设计与实现_第4页
基于Android平台五子棋游戏的设计与实现_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

基于Android平台五子棋游戏的设计与实现摘要:随着移动互联时代的到来以及智能手机的普及,人们的生活娱乐方式也跟着时代的脚步逐渐向移动端发展。Android平台凭借其开放性及稳定性吸引了大量的用户和开发者,称为了目前用户最多、发展最快的移动终端操作系统。本文着重于研究基于Android操作系统的手机游戏,拟将中国传统的现实类小游戏五子棋迁移到移动端。通过对该五子棋游戏的设计与开发,进一步的了解Android操作系统。本游戏有三个模块,分别是游戏开始界面,游戏运行界面和游戏结束选择界面,分别实现游戏的各个功能。由于Java语言能更好的兼容Android操作系统,本文采用Java语言进行开发,配合Eclipse开发工具,开发出功能完善,界面美观的五子棋游戏。本次基于Android的五子棋游戏采用了MVC框架模式,将业务逻辑,数据,界面显示分离开来,把五子棋的核心算法即业务逻辑聚集到一起,使界面和用户交互聚集在一起,降低代码耦合度,提高了程序设计的效率。关键词:五子棋游戏;Android;MVC框架模式一、绪论(一)课题的选题背景随着移动互联时代的到来,智能手机已经成为人们生活中必不可少的一种通讯工具。智能手机的发展之路迅速而快捷,其发展状况可谓是日新月异。在如此快速前行的路上,应运而生的Android操作系统仅经过几年的发展,就已经占据了很大市场。Android系统的普及促使越来越多的开发人员投入Android开发之中。但早期Android刚推出时,许多大的游戏厂商却对它望而却步。持这种观望态度的主要原因就是Android版本更新的速度太快,兼容性存在问题。但这种情况在2010年以后得到解决,随着Android版本的稳定以及游戏产业的蓬勃发展,大牌厂商开始进入Android平台,为带来了高端的游戏体验。同时,三星、索尼也正在积极的研发基于Android平台的游戏手机,这一切都标志着Android游戏的春天来临。事实证明,对这种种迹象的预测是正确的。五年过后的现在,各种游戏公司开始就Android游戏展开布局,手机游戏再次以其便携性成为人们喜欢的休闲活动,成功地挑战了传统PC端游戏,成为当前游戏发展的主力。国际上有Gameloft、Gamevil、EA等公司着手研发;国内除了老牌的传统游戏公司,像腾讯,完美世界,盛大等,还新生了一批专业研发移动端游的公司,像顽石互动,触控科技等。Android平台以其优越性成功的吸引了众多游戏公司及独立开发者的青睐。在Android游戏风靡世界的征途上,许多经典游戏都做出了卓越的贡献。《愤怒的小鸟》、《水果忍者》、《找你妹》、《神庙逃亡》、《捕鱼达人》等等,这些耳熟能详的游戏名字在Android游戏发展史上留下了浓墨重彩的一笔。与此同时,随着高通、英伟达等硬件厂商对Android游戏市场的关注,以及OpenGL对Android渲染优化的支持,Android游戏的品质也因为发展平台的扩充而越来越显上乘化。画质细腻,场景唯美的大型3D手机游戏也陆续出现。先是由TrendyEntertainment公司用虚幻3引擎开发的《地牢守护者》横空出世,在当年的Android手游中大放异彩。后来又陆续出现《细胞分裂5》、《刺客信条》、《地牢猎手》、《FIFA10》、《阿凡达》、《天下HD》等基于Android的高品质3D手游。这一切的发展都见证着Android游戏的蓬勃生命力。(二)课题的目的和意义随着现代生活节奏的加快,越来越多的人感觉到生活的压力,对一成不变的生活方式感到烦闷,因此需要一些调节来暂缓节奏,舒缓心情。本设计通过开发基于Android平台的五子棋游戏,实现不同难度的人机对弈,能够达到休闲的目的。在休闲之余还能益智,给快节奏的生活带来一些乐趣。由于五子棋的策略性,可以有效地锻炼思维严密程度,训练逻辑及思维延展性,一举两得。五子棋游戏看似简单,但开发过程中用到的搜索算法却与人工智能运算相关。人工智能是当前计算机发展的前沿学科,研究的是使用各种算法使机器能够像人一样听说读写,甚至是思考。而本次五子棋游戏的开发使用的搜索算法属于人工智能学科中的博弈分支,它通过推理技术和搜索方法来实现电脑AI,通过对这些算法的使用,本游戏实现了人机对弈,在博弈过程中,可以发现智能模拟的不足,促进对智能算法的进一步研究,因此本课题有一定的学术意义。(三)课题的研究的主要目标和内容本设计的主要目标是设计与实现基于Android平台的五子棋游戏。该游戏用该实现:用户打开应用后,进入主界面,显示开始游戏、游戏设置和帮助。主要可分为欢迎模块、游戏模块和退出模块。以人机对弈为游戏主体,实现人与电脑AI的对弈。电脑与玩家各执黑子白子,轮流下棋。直到有一方连成五子即为赢棋,游戏结束。在进行游戏的同时,会播放背景音乐。(四)系统开发环境及相关技术1.Android简介Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open

Handset

Alliance)开发。它采用了软件堆层(software

stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。Android的系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。Android开发四大组件分别是:活动(Activity):用于表现功能。服务(Service):后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(ContentProvider):支持在多个应用中存储和读取数据,相当于数据库[4]。2.Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。Eclipse只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse最初是由IBM公司开发的替代商业软件VisualAgeforJava的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。2003年,Eclipse3.0选择OSGi服务平台规范为运行时架构。2007年6月,稳定版3.3发布;2008年6月发布代号为Ganymede的3.4版;2009年6月发布代号为Galileo的3.5版;2010年6月发布代号为Helios的3.6版;2011年6月发布代号为Indigo的3.7版;2012年6月发布代号为Juno的4.2版;2013年6月发布代号为Kepler的4.3版;2014年6月发布代号为Luna的4.4版;2015年6月项目要发布代号为Mars的4.5版。Eclipse是著名的跨平台的自由集成开发环境(IDE),最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse原本只是一个框架平台,提供插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,允许构建与Eclipse环境无缝集成的工具,众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。Eclipse中的每样东西都是插件,Eclipse提供插件,为用户提供一致和统一的集成开发环境,使所有的工具开发人员都具有同等的发挥场所。

Eclipse主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具。

EclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到EclipsePlatform中的工具。EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以CPL发布,第三方组件有各自自身的许可协议。Eclipse项目具有3个子项目,分别为平台,开发工具箱,外部插件开发环境。这些子项目又细分成更多子项目。例如平台子项目包含数个组件,如Compare、Help与Search。JDT子项目包括三个组件:UserInterface(UI)、核心(Core)及排错(Debug)。3.Java简介Java是由SunMicrosystems公司在1995年正式推出的Java面向对象程序设计语言和Java平台的总称。由JamesGosling和同事们共同研发。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。SUN的工程师敏锐地察觉到HTML文档的死板将Web变成了一潭死水,这对于那些痴迷于Web浏览器的人来说是致命的,他们迫切的想通过Web进行交互。于是从1994年起,SUN工程师们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本,从此Java开始风靡。一方面,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速。在全球云计算和移动互联网的产业环境下,Java具备了显著优势和广阔前景。Java由四个部分组成“Java编程语言,Java文件格式,Java虚拟机,Java应用程序接口。其中,Java虚拟机是Java语言能够跨平台的保证,JDK也是非常重要的开发工具。Java主要分为三个体系,分别是标准版的JavaSE,企业版的JavaEE和微型版的JavaME。Java语言之所以能够对C++语言造成很大的冲击,除了它的跨平台之外,还因为它是一种简单的面对对象的编程语言。它以其安全,结构中立,可移植性得到编程人员的青睐。另外一个原因就是Java平台内嵌的API能缩短应用系统的开发周期并降低成本,其各种组件形成了一个独特的组件体系结构,它独立于平台,并与各个开源框架配合发展,这一切特性都推动了Java的迅猛发展。4.JDK简介JDK(JavaDevelopmentKit)是Java开发工具的简称。在前面已经提到过它,但在安装并配置它以前,需要更加深入地了解它。它是由Sun公司针对Java开发人员发布的免费软件开发工具包。自从Java推出以来,JDK已经成为使用最广泛的一套Java开发工具。2006年,Sun公司宣布将要发布基于GPL协议的开源JDK,这个决定使JDK成为开源软件。在此基础之上,Sun公司最终促成了GPL协议的OpenJDK的发布。JDK中包括很多开发、调试Java程序的工具。javac:即为Java编译器。用来将写好的后缀名为.java的源代码文件逐个编译成后缀名为.class的字节码文件。这是Java开发中必不可少的一个程序,开发过程中用的最多的程序之一。java:它是Java字节码的解释程序。它可以解释并执行后缀名为.class的字节码文件,前面由javac编译好的程序就是由它来执行的。事实上,无论是用控制台编译还是用Eclipse,Java程序最终都是由这个程序来解释并执行的。jdb:它的全名为:javadebugger,是用来调试Java程序代码的。javadoc:这是一个自动生成文档的工具,它可以把Java源代码中的注释语句自动整理成文档。jar:打包工具,Java的字节码文件是以后缀.class结尾的,当程序文件少的时候容易管理,可是随着程序规模的增大,它的文件也会相应增多。为了方便管理,Java提供了将类文件进行合并的jar工具。它可以把许多功能相关的类文件合并为一个后缀为.jar的文件,减少了文件数量,使类文件的管理变得更为有序。JDK并不是只有一个版本,各公司推出的JDK在某些地方略有不同。不过,这些不同并不会程序本身的运行造成什么影响,它们差别只在性能以及平台上而已。除Sun推出的官方JDK以外,其他公司的JDK主要有下面几个:基于GNU的开源JDK--GCJ(TheGNUCompilerforJava),可用在Linux系统上。IBM公司的J9JDK,可用在AIX、Linux、Windows等主流系统上。Oracle公司推出的JRockitJDK,适用于Windows、Linux及Solaris系统。5.AndroidSDKTools简介AndroidSDK(softwaredevelopmentkit)Android软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。AndroidSDKTools是Android专属的软件开发工具包,其中包括Android模拟器,用于在计算机上虚拟移动设备,进行设计和调试程序。若想在Eclipse中开发Android应用,AndroidSDKTools必不可少。6.MVC框架MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。(1)模型(Model):表示程序运行的核心;(2)视图(View):显示数据;(3)控制器(Controller):处理数据。MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC的应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。(五)系统开发平台及运行环境配置1.系统开发平台系统开发环境及工具操作系统:Win7开发工具:Eclipse(2)运行环境操作系统:Android2.2及以上版本。2.系统开发环境配置(1)JDK配置首先需要到Oracle官方网站下载开发所需的JDK,也就是Java开发环境。下载完毕后解压到一个文件目录下,记住这个目录,配置变量时要用到这个目录。本机的目录是:C:\ProgramFiles\Java\jdk1.7.0_67然后右键点击计算机→属性→系统属性设置→高级→环境变量,如图1.1:图1.1环境变量找到系统变量,新建一个JAVA_HOME变量,填写变量值为JDK的安装目录。在系统变量中寻找PATH变量,选择编辑,在PATH下方变量值文本框中输入;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(前面的分号不能省略,如果原来PATH变量末尾值有分号,则不用输入。)图1.2PATH设置在系统变量中新建CLASSPATH变量,此处变量值文本框中则需要填写上

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)。检验是否配置成功,运行cmd输入java-version,若显示如图,则证明配置成功图1.3检测配置(2)AndroidSDK配置打开Eclipse,点击菜单Window→preferences进入首选项设置界面:图1.4路径选择在Loaction选项填上AndroidSDK的安装目录。点击OK后就可进入安装界面了,这个安装和更新的过程需要持续一段时间,静静等待即可。安装成功后,就可以设置虚拟机来调试程序了。(3)Eclipse配置打开Eclipse,在菜单栏选择help→InstallNewSoftWare,出现对话框:图1.5添加环境工具点击Add按钮,名字写为Android,输入/android/eclipse/,点击Next将出现界面如下:图1.6选择工具然后直接点击Next,而后一直点击确定,就可以到安装插件的页面,然后重新启动Eclipse,就可以进行正常的AndroidApplication开发了。(4)虚拟设备配置安装过工具后,即可在虚拟设备上进行测试。选中项目文件,右键RunAs,选择虚拟设备。若果没有的话,需要创建一个。选择完成后,将会出现虚拟机界面,Android程序便可直接在PC端运行了:图1.7虚拟设备二、系统的可行性分析(一)经济可行性分析本游戏使用开源的Eclipse工具及Java语言编写,所用到的JDK和AndroidSDK等相关工具均属于免费,可在相关网站上直接下载。与本课题有关的参考资料可由网上查阅或到图书馆查阅。开发过程中,除了测试需要人力外,整个软件开发过程仅需一人,不需消耗过多人力资源。资金方面除了网上查阅电子文档需要交纳极少的费用外,几乎没有其它支出。综上所述,本次软件开发成本是比较低的,从经济上讲完全是可行的。(二)技术可行性分析技术可行性分析需要考虑很多因素,主要从技术方面对本软件的开发做一个详细的分析。包括软件开发的相应技术,硬件级别和开发环境版本等。目前拥有的技术足以完成本次软件开发,硬件级别与软件版本也能够跟的上开发的需要,开发环境也足以支撑本次程序的开发、调试及运行。本游戏采用Java语言开发,Windows7操作系统,Eclipse工具。三者结合使本次游戏开发具有很多优势,比如运行迅速,内存占用低等。所以,在技术方面完全可以达到要求。(三)操作可行性分析就开发者而言,由于本次五子棋游戏重点实现人机对弈功能,相关核心算法使用剪枝算法对棋盘进行搜索,得到最优解,而后决定落子地方。电脑AI十分智能,使用搜索算法可以达到很高的智商,能够使玩家有一种棋逢对手的感觉。并且能在下棋的过程中提高玩家的下棋水平。对玩家而言,本游戏操作简单易懂,容易上手。点击开始游戏后直接进入游戏界面开始轮流下子,双方有任意一方连成五子,本局游戏结束。弹出对话框选择重新游戏还是返回主界面。三、需求分析(一)系统的功能模块的概述和分析基于Android平台的五子棋游戏设计框架采用了MVC模式,将业务逻辑,数据和界面显示分离开,可以理清开发思路,缩短开发周期。本游戏的目的就是开发出可在Android平台运行的五子棋游戏,用户进入界面后,可以选择开始游戏,游戏设置和帮助三个按钮。点击开始游戏直接进行人机对弈,点击游戏设置,则可以选择难度,点击帮助按钮,则可以显示游戏规则,开发者信息等。该游戏功能完善,具有良好清新的界面,可以给用户带来不错的游戏体验。(二)系统功能模块设计1.系统组成本系统分为三大块,分别是开始游戏,游戏设置,和帮助。根据系统功能分析,可以画出系统的功能模块图3.1所示:五子棋游戏帮助游戏设置开始游戏五子棋游戏帮助游戏设置开始游戏图3.1主界面模块图2.子模块设计对弈模块:该模块描述了人机对弈的设计流程,直接的显示出了本游戏的主题逻辑。重新开始开始游戏人机对弈胜负回主界面重新开始开始游戏人机对弈胜负回主界面图3.2对弈流程图四、系统实现(一)开发工程概述在Eclipse中建立Android工程,并为之命名为Five1.0,本工程中共有八个类,分别实现不同功能,如图,其中:ChessStatus类是用来定义一个枚举类型,放置棋盘落子点状态的。ChessType类是用来存放棋子类型的类。ComputerPlayer类是用来控制电脑AI的类。GameView类是用来显示游戏视图的类。MainActivity类是该工程的主活动类。ScoreTable类是计分板,用来辅助电脑AI进行落子判定。Screen类用来控制控制屏幕比例的类。StartActivity类是游戏开始的起始类。图4.1系统类图(二)开始界面实现过程启动游戏,进入程序的主界面,在游戏的主界面中可以通过点击不同的按钮选择相应的功能,一下是游戏主界面显示:图4.2开始界面实现开始界面的主要代码如下:<ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:background="@drawable/luo"/><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="54dp"android:text="黑白五子棋"android:textAppearance="?android:attr/textAppearanceLarge"android:textColor="#545454"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:text="游戏设置"/><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/button2"android:layout_alignRight="@+id/button2"android:layout_below="@+id/button2"android:layout_marginTop="48dp"android:text="帮助"/><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/button2"android:layout_alignLeft="@+id/button2"android:layout_marginBottom="22dp"android:text="开始游戏"/>(三)对弈界面实现过程对弈界面是本游戏的重要界面,在此界面中电脑与玩家轮流落子,呈现出博弈的智慧。1.棋盘实现图4.3棋盘界面棋盘界面如上图,该界面的实现代码:(1)加载棋盘背景: publicGameView(Contextcontext){ super(context); this.context=context; this.setBackgroundResource(R.drawable.bg);(2)绘制棋盘线条: PADDING_LEFT=((screenWidth)/(COLS-1))/2; PADDING_TOP=((screenHeight)/(ROWS-1))/2; PADDING=PADDING_LEFT<PADDING_TOP?PADDING_LEFT:PADDING_TOP; ROW_MARGIN=((screenHeight-PADDING*2))/(ROWS-1); COL_MARGIN=((screenWidth-PADDING*2))/(COLS-1); MARGIN=ROW_MARGIN<COL_MARGIN?ROW_MARGIN:COL_MARGIN; PADDING_LEFT=(screenWidth-(COLS-1)*MARGIN)/2; PADDING_TOP=(screenHeight-(ROWS-1)*MARGIN)/2; initChess();protectedvoidonDraw(Canvascanvas){ super.onDraw(canvas); Paintpaint=newPaint(); paint.setColor(Color.WHITE); //打印行 for(inti=0;i<ROWS;i++){ canvas.drawLine(PADDING_LEFT,i*MARGIN+PADDING_TOP,(COLS-1) *MARGIN+PADDING_LEFT,i*MARGIN+PADDING_TOP,paint); } //打印列 for(inti=0;i<COLS;i++){ canvas.drawLine(PADDING_LEFT+i*MARGIN,PADDING_TOP, PADDING_LEFT+i*MARGIN,MARGIN*(ROWS-1) +PADDING_TOP,paint); }2.落子实现当游戏开始后,系统会默认玩家一方执白棋落子,而后电脑一方执黑棋落子。双方下棋直到任意一方连成五子。界面如图:图4.4下棋界面此功能实现主要代码为:(1)重新开始方法,初始化棋子:publicvoidreStart(){ initChess(); gameOver=false; }(2)打印棋子 for(intr=0;r<ROWS;r++){ for(intc=0;c<COLS;c++){ //System.out.print(chessMap[r][c]+""); if(chessMap[r][c]==ChessType.NONE) continue; if(chessMap[r][c]==ChessType.BLACK){ paint.setColor(Color.BLACK); canvas.drawCircle(r*MARGIN+PADDING_LEFT,c*MARGIN +PADDING_TOP,MARGIN/2,paint); }elseif(chessMap[r][c]==ChessType.WHITE){ paint.setColor(Color.WHITE); canvas.drawCircle(r*MARGIN+PADDING_LEFT,c*MARGIN +PADDING_TOP,MARGIN/2,paint); } }3.判断胜负每一步下棋,系统都会判定是否有相同颜色的五子连在一起,若没有,则游戏继续进行。若有,则游戏进入结束界面,并根据检测结果提示获胜方。图4.5判断胜负该功能的实现代码如下:publicbooleanhasWin(intr,intc){ ChessTypechessType=chessMap[r][c]; System.out.println(chessType); intcount=1;(1)纵向搜索,检测是否有相同五子连成一线: for(inti=r+1;i<r+5;i++){ if(i>=GameView.ROWS) break; if(chessMap[i][c]==chessType){ count++; }else break; } for(inti=r-1;i>r-5;i--){ if(i<0) break; if(chessMap[i][c]==chessType) count++; else break; } //System.out.println(count+""+"1"); if(count>=5) returntrue;(2)横向搜索,检测是否有相同五子连成一线: count=1; for(inti=c+1;i<c+5;i++){ if(i>=GameView.COLS) break; if(chessMap[r][i]==chessType) count++; else break; } for(inti=c-1;i>c-5;i--){ if(i<0) break; if(chessMap[r][i]==chessType) count++; else break; } //System.out.println(count+""+"2"); if(count>=5) returntrue;(3)反斜向搜索,检测是否有相同五子连成一线: count=1; for(inti=r+1,j=c+1;i<r+5;i++,j++){ if(i>=GameView.ROWS||j>=GameView.COLS){ break; } if(chessMap[i][j]==chessType) count++; else break; } for(inti=r-1,j=c-1;i>r-5;i--,j--){ if(i<0||j<0) break; if(chessMap[i][j]==chessType) count++; else break; } //System.out.println(count+""+"3"); if(count>=5) returntrue;(4)斜向搜索,检测是否有相同五子连成一线: count=1; for(inti=r+1,j=c-1;i<r+5;i++,j--){ if(i>=GameView.ROWS||j<0) break; if(chessMap[i][j]==chessType) count++; else break; } for(inti=r-1,j=c+1;i>r-5;i--,j++){ if(i<0||j>=GameView.COLS) break; if(chessMap[i][j]==chessType) count++; else break; } //System.out.println(count+""+"4"); if(count>=5) returntrue; returnfalse; }4.重新开始此时再次点击屏幕,则会出现重新开始界面。点击重新开始,可以重新开始本局游戏。图4.6重新开始该功能的实现代码如下:publicvoidreStart(){ initChess(); gameOver=false; } newAlertDialog.Builder(context) .setTitle("提示") .setMessage("游戏已结束,是否重新开始?") .setPositiveButton("确定",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ reStart(); } }) .setNegativeButton("取消",null).show(); } this.invalidate();returnsuper.onTouchEvent(event);5.棋子类在算法中,将棋子分为三种状态,分别是活、死和半活状态,为系统的评分系统做准备。实现代码如下:publicenumChessStatus{ ALIVE, DIED, HALFLIVE}棋盘上的棋子分为三种,一种是白色,一种是黑色,另外一种是空,所以这三种状态用代码表示如下:enumChessType{NONE, WHITE, BLACK}6.辅助评分类此类是用来辅助α-β剪枝算法的判定计算,用来计算下一步棋子的权重,并依此来选择下一步的落子点,提高AI智能程度。其实现代码如下:publicclassScoreTable{ privateScoreTable(){} publicfinalstaticintFIVE=100;//成5publicfinalstaticintDOUBLE_ALIVE_FOUR=99;//双活4(分析对手用)publicfinalstaticintALIVE_FOUR_AND_DEAD_FOUR=98;//活4死4(对手分析用)publicfinalstaticintALIVE_FOUR_AND_ALIVE_THREE=96;//活4活3(分析对手用)publicfinalstaticintALIVE_FOUR_AND_DEAD_THREE=95;//活4死3(分析对手用)publicfinalstaticintALIVE_FOUR_AND_ALIVE_TWO=94;//活4活2publicfinalstaticintALIVE_FOUR=93;//活4publicfinalstaticintDOUBLE_DEAD_FOUR=92;//双死4publicfinalstaticintDEAD_FOUR_AND_ALIVE_THREE=91;//死4活3publicfinalstaticintDEAD_FOUR_AND_ALIVE_TWO=90;//死4活2publicfinalstaticintDOUBLE_ALIVE_THREE=80;//双活3publicfinalstaticintALIVE_THREE_AND_DEAD_THREE=70;//活死3publicfinalstaticintHALF_ALIVE_FOUR=65;//半活4(类似○○○形),优先级小于活4publicfinalstaticintALIVE_THREE=60;//活3publicfinalstaticintDEAD_FOUR=50;//死4publicfinalstaticintDOUBLE_ALIVE_TWO=40;//双活2publicfinalstaticintDEAD_THREE=30;//死3publicfinalstaticintALIVE_TWO=20;//活2publicfinalstaticintDEAD_TWO=10;//死2publicfinalstaticintSINGLE=0;//单个}7.开始控制类该类用来控制游戏开始的方式及进入游戏主体的逻辑。主要代码如下:publicclassStartActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_start); findViewById(R.id.button1).setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Loading(); } }); } privatevoidLoading(){ Intentintent=newIntent(); intent.setClass(StartActivity.this,MainActivity.class); startActivity(intent); StartActivity.this.finish(); }8.主要交互类用来控制游戏界面交互相关事件。主要代码如下:publicclassMainActivityextendsActivity{ privateScreenscreen; privateGameViewgameView=null; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); this.getScreen();//得到屏幕的大小 gameView=newGameView(this); setContentView(gameView); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. //getMenuInflater().inflate(R.menu.main,menu); menu.add("重新开始"); menu.add("退出"); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ if(item.getTitle().equals("重新开始")){ gameView.reStart(); }elseif(item.getTitle().equals("退出")){ finish(); } returnsuper.onOptionsItemSelected(item); }五、系统测试(一)软件测试在此游戏的各模块基本功能都已实现后,开始进行软件测试,以求能够保证程序完整运行的同时,还能够经受住时间的检验。1.软件测试简介软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度、完全度和质量的软件过程。2.软件测试原则1.测试应该尽早进行,最好在需求阶段就开始介入,往往需求分析会与客户要求产生差异,这是软件开发过程中的最大错误。2.由于自我认知的差异,编程人员应该避免检查测试自己的程序,软件测试应该由第三方来负责,以用户的身份进行测试。3.设计测试用例时应考虑到各种情况。例如,合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。4.应该重点注意测试中的群集现象。5.对错误结果要进行一个确认过程。一般由A测试出来的错误,一定要由B来确认。严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。6.制定严格的测试计划,设定测试用例。一定要制定测试计划,选合适的测试用例,并且要有指导性。测试时间安排尽量宽松,不要希望在极短的时间内完成一个高水平的测试。7.妥善保存测试计划、测试用例、出错统计、测试日志和分析报告的更新,为以后软件维护提供方便,Android游戏更是应该从各个方面进行测试,以保证游戏质量。3.软件测试目标1.发现一些可以通过测试避免的开发风险。2.实施测试来降低所发现的风险。3.确定测试何时可以结束。4.在开发项目的过程中将测试看作是一个标准项目。4.软件测试过程第一步:对要执行测试的产品项目进行分析,确定测试策略,制定测试计划。该计划被审核批准后转向第二步。测试工作启动前一定要确定正确的测试策略和指导方针,这些是后期开展工作的基础。只有将本次的测试目标和要求分析清楚,才能决定测试资源的投入。第二步:设计测试用例。设计测试用例要根据测试需求和测试策略来进行,进度压力不大时,应该设计的详细,如果进度、成本压力较大,则应该保证测试用例覆盖到关键性的测试需求。该用例被批准后转向第三步。第三步:如果满足“启动准则”,那么执行测试。执行测试主要是搭建测试环境,执行测试用例。执行测试时要进行进度控制、项目协调等工作。第四步:提交缺陷。这里要进行缺陷审核和验证等工作。第五步:消除软件缺陷。通常情况下,开发经理需要审核缺陷,并进行缺陷分配。程序员修改自己负责的缺陷。在程序员修改完成后,进入到回归测试阶段。如果满足“完成准则”,那么正常结束测试。第六步:撰写测试报告。对测试进行分析,总结本次的经验教训,在下一次的工作中改。软件测试过程管理,主要包括软件测试是什么样的过程,如何评价一个软件测试过程,如何进行配置管理和测试风险分析以及测试成本的管理,GoogleSDK中专门集成了一种测试技术,用来检测Android程序的稳定性。5.测试步骤(1)模块测试(2)子系统测试(3)系统测试(4)验收测试(5)平行运行(二)测试方法1.白盒测试白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。2.黑盒测试黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程

温馨提示

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

最新文档

评论

0/150

提交评论