软件技术移动应用开发毕业设计 基于安卓的五子棋游戏.docx
- 文档编号:10133619
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:29
- 大小:281.83KB
软件技术移动应用开发毕业设计 基于安卓的五子棋游戏.docx
《软件技术移动应用开发毕业设计 基于安卓的五子棋游戏.docx》由会员分享,可在线阅读,更多相关《软件技术移动应用开发毕业设计 基于安卓的五子棋游戏.docx(29页珍藏版)》请在冰豆网上搜索。
软件技术移动应用开发毕业设计基于安卓的五子棋游戏
信息职业技术学院
毕业设计论文
作者学号
系部计算机与软件学院
专业软件技术(移动应用开发)
题目基于安卓的五子棋游戏
指导教师
评阅教师
完成时间:
2015年5月10日
毕业设计(论文)中文摘要
题目:
基于安卓的五子棋游戏
摘要:
近年来,随着安卓手机的普及,安卓游戏成为广大用户关注的方向。
五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏,主要完成人机对战的功能。
本文结合五子棋这个游戏的特点,将阐述单机版五子棋算法设计,突出人工智能在博弈方面的应用,而选五子棋游戏的开发则是利用计算机来实现它的人工智能,从而培养我们从事软件开发方面的能力。
在本程序中,主要使用eclipse开发工具,使用Java开发语言进行五子棋游戏的设计。
关键词:
安卓游戏五子棋人机对战
毕业设计(论文)外文摘要
Title:
BasedontheAndroidofgobanggame
Abstract:
Inrecentyears,withthepopularityofAndroidphone,Androidgameswillcausedirectionofcustomersattention.Gobangasachessathletics,isverypopularincivil.Inordertobecomefamiliarwiththegamerulesandtechniques,andthestudyofsimpleartificialintelligence,soIdecidedtouseJavatodevelopgobanggame,mainlycompletethefunctionofman-machinebattle.
Inthisprogram,combatingthefeaturesofgobanggame,willelaboratethealgorithmdesignofgobang,andprominenttheartificialintelligenceintheapplicationofthegame,andchoosingthegobanggamedevelopmentisusingcomputertorealizeitsartificialintelligence,andtrainingourabilityinsoftwaredevelopment.
Inthisprogram,IuseeclipsedevelopmenttoolandJavalanguagetodesigngobanggame.
keywords:
Androidgamesgobangman-machinebattle
目录
1引言1
1.1安卓游戏1
1.2课题背景2
1.3我的主要工作2
2项目概述与需求分析3
2.1项目概述3
2.2需求分析3
3概要设计4
3.1五子棋解释4
3.2五子棋的基本规则5
3.3五子棋的相关术语5
3.4程序设计分析5
3.5数据流图6
4详细设计6
4.1用例图6
4.2类图8
4.3棋盘界面设计10
4.4核心实现代码12
5运行测试16
5.1程序测试16
5.2测试方法和测试用例18
5.3测试结论18
5.4运行效果图18
结论20
致谢21
参考文献21
1引言
1.1安卓游戏
运行在安卓系统平台的游戏,运行在安卓平台的游戏深受大家的喜爱。
现在,Android游戏不但可以运行于智能手机,也可以运行在平板电脑上。
1.1.1安卓游戏发展趋势
将向专业化、大规模化方向发展,随着各平台对OpenGLES支持能力的大力加强,使得开发复杂的3D场景游戏成为可能。
更多显示芯片对Android的支持,硬件性能将不再成为制约专业化游戏发展的瓶颈。
越来越多在PC、PSP、PS3、XBOX360等各游戏平台占有领先地位的专业游戏公司将向Android等手机平台领域快速渗透,使得游戏的规划更加向专业化方向发展。
将向网络化方向发展,随着各平台对无线通信网络、WIFI网络、蓝牙网络的良好支持,游戏将创新出更好的游戏性和用户本验。
网络游戏,多人游戏,联机对战等将进一步强化玩家对游戏的粘着度,并且容易通过对道具等的控制产生营利模式。
玩家之间对交互能力的需求也会促成未来的游戏向网络化发展进程的加快。
将向休闲化、时间片化方向发展,移动设备的随身性使是休闲小游戏将得到快速的发展。
移动设备对分散时间的利用促进了游戏向时间片化发展,即一个游戏可以随时开始,随时结束,充分利用用户分散的时间片来运行。
1.1.2开发安卓游戏的意义
由于安卓平台前景广阔,作为安卓平台的应用,即安卓游戏的快速发展,是大势所趋,必然趋势,所以安卓深受广大群众的喜爱。
有需求就有供应,游戏开发商在开源的安卓平台上,尽情的发挥他们的想象力,带给我们一款又一款好玩且爱不释手的游戏。
比如水果忍者、植物大战僵尸和赛车系列游戏,属于安卓发烧友的装机必备的小游戏。
对于如此之高的安卓系统市场占有率,那么安卓手机的游戏又有何理由不火呢?
因此,我们坚信安卓游戏会越来越受到广大朋友的宠爱,且越来越来的安卓游戏也会进入我们的视野里。
1.2课题背景
五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为连珠,英译为Renju,英文称只为Gobang或FIR(FiveinaRow的缩写),亦有连五子、五子连、串珠、五幕、五目碰等多种称谓。
五子棋起源于古代中国,发展在日本,风靡于欧洲。
对于它于围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。
在中国的文化里,倍受人们的青睐。
人世纪初五子棋传入欧洲并速度风靡全球。
通过一系列的变化,使五子棋这一简单的游戏复杂化、规模化,而最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。
1.3我的主要工作
本次开发使用Android开发平台的eclipse开发工具进行开发,使用Java语言开发的一款游戏。
通过对该游戏程序的编写,还可以巩固我们对以上各种知识的掌握和理解。
对于五子棋游戏,首先我要解决的是游戏界面问题,因为一个清晰美观的界面可以让别人对我们所设计出来的游戏产生好感,一开始考虑界面的设计,界面包括,棋盘,也就是棋子绘制的范围,提示信息,即显示出下棋结果的提示语,还有棋子。
为了区分开来,分为黑白两种。
我设计玩家执白子,电脑执黑子。
所以把界面分成三个部分:
一个是棋盘类,也是主要的类,一个是消息面板的类,还有一个就是控制面板的类。
这样一来,我们就可以对他们进行单独的操作了,而且组织他们也比较方便,我们可以根据自己的风格,自己的喜好来组织他们,把整个界面做的美观清晰。
而且对他们进行操作也不影响其他组件。
有了以上的准备就可以把棋盘绘制出来了,然后就是下棋了,计算机要自己选择一个合适的位置来下棋,也就是说每次自己下完棋之后就要有一个控制变量来控制自能不能下棋。
人可以随意的下子,可是计算机就要计算在那个位置下子了。
这里由计算机下子的算法来确定,对弈的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,对弈只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。
2项目概述与需求分析
2.1项目概述
2.1.1项目开发目标
该款五子棋游戏功能虽然简单,但最主要的还是实现了人与智能电脑对战的模式,所以从这个角度来说,该款游戏需要能很好的设计出电脑的智能。
虽然程序不复杂,但要在满足玩家的基本要求的情况下,电脑有一定的智能,能给于新手一定的帮助。
另外,通过研究五子棋游戏,帮助更好的运用自身所学,将理论付诸于程序设计中。
2.1.2项目开发意义
该五子棋落子的坐标系统的意义是让我们学生深入理解,认识到Java语言在程序设计中的重要作用。
通过本次程序开发,让我们更加熟练的掌握Java编程。
另外,五子棋游戏的规则,简单来说就是五子连线,这其中分为横、竖、斜三种模式。
那么,需要我们对坐标进行深入研究。
同时也让我们对开发工具eclipse熟练掌握并提高学生动手编程的能力开发工具。
2.1.3开发工具
eclipse平台下,Java开发语言,Android2.1-update1虚拟环境。
2.2需求分析
2.2.1功能需求分析
该五子棋游戏比较简单,进入界面,不会有提示的,且主要是人机对战,是由人先开局,电脑会智能的选择该在哪处下子,并会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。
故每次玩家在棋盘上点击鼠标,需要实现界面出现棋子,而电脑需要立即作出回复,在最适合的地方落子。
因此,可以将本程序需要实现的功能,概括如下:
1.判断该坐标是否在棋盘之外,如果不是,记录下该坐标值以进行下一步操作。
2.判断该位置是否已有棋子,没有的话用类graphics.Paint画出棋子,并记录下棋盘的状态。
3.判断该颜色棋子的上下左右是否满足连续五个,是的话提醒相应玩家获胜,不是的话,更换玩家,监听事件处理结束。
4.对于玩家的更换是程序自动的,每次用户点击鼠标后,都会变换为电脑,从而画出对应黑方白方的棋子供玩家查看。
2.2.2性能需求分析
使用eclipse开发工具,使用Java开发语言,在Android2.1-update1的虚拟环境下进行编程开发,需要套用android-7才能使程序进行运行。
另外,需要计算出电脑每次需要落子的位置,不仅要阻止玩家的五子连线机会,还要主动发起攻势。
必要的情况下,需要用户掌握一定的五子棋规则及技巧,避免由于盲目落子,造成个人的失败。
但作为用户自己设计的智能电脑玩家,需要由主要的参数来控制落子位置,这就要求对棋盘上的坐标进行仔细的研究。
如图2-1显示程序开发环境。
图2-1开发环境
3概要设计
3.1五子棋解释
引用《辞海》中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。
”。
五子棋的名称:
日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为FIR(FiveInARow的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect5、mo-rphion。
捷克语piskvorky,韩语omok、韩国人还称之为情侣棋。
3.2五子棋的基本规则
1.五子棋行棋时,玩家执白棋先下第一子,而后黑棋在棋盘合适的位置落子。
接着黑白双方相互顺序子。
2.最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。
3.如下至最终一子仍不分胜负则定为平局。
3.3五子棋的相关术语
阳线:
棋盘上可见的纵横直线
阴线:
棋盘上无实线连接的隐形斜线
五连:
棋盘上形成5个同色的棋子的连
活四:
在棋盘某一条阳线或阴线上有同色4子不间隔的紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧紧相连
冲四:
除活四外的在下一招,便可形成五连,并且存在五连的可能性
活三:
在棋盘某一条阳线或阴线上有同色3子不间隔的紧紧相连,且在此3子两端延长线上各有一个无子的交叉点与此3子紧紧相连
活二:
在棋盘上,再走一步可成活三的点
眠三:
在棋盘上,再走一步可成冲四的点
眠二:
在走一步可成眠三的点
3.4程序设计分析
1.绘制棋盘,14条横线,14条竖线,在直线交点处下棋子。
2.界面中的棋盘通过onDraw函数进行绘制,而黑白子通过引用图片显示在棋盘上。
3.白子先行,黑白交替下子。
边框的的交接点无法落子,故棋盘实际可以进行落子的范围为12×12格。
4.玩家落子之后,电脑需要判定棋盘的某一位置是否有棋子,并在棋盘上,选择一个最佳位置落子。
5.当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。
棋局结束后,任何一方均不能继续操作。
3.5数据流图
该五子棋的主要程序流图如图3-1所示。
图3-1程序流程图
图3-1显示当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。
棋局结束后,任何一方均不能继续操作。
4详细设计
4.1用例图
用例图就是由主角、用例以及它们之间的关系构成的图。
该图说明了用例模型中的关系。
可以将用例图组织到用例包中,并归用例包所有,让特定包中仅显示互为关联关系的内容。
用例图由参与者(Actor)、用例(UseCase)、系统边界、箭头组成,用画图的方法来完成。
参与者不是特指人,是指系统以外的,在使用系统或与系统交互中所扮演的角色。
因此参与者可以是人,可以是事物,也可以是时间或其他系统等等。
还有一点要注意的是,参与者不是指人或事物本身,而是表示人或事物当时所扮演的角色。
参与者在画图中用简笔人物画来表示,人物下面附上参与者的名称,例如图4-1所示。
图4-1角色
用例是对包括变量在内的一组动作序列的描述,系统执行这些动作,并产生传递特定参与者的价值的可观察结果。
我们可以给用例取一个简单、描述性的名称,一般为带有动作性的词。
用例在画图中用椭圆来表示,椭圆下面附上用例的名称,例如图4-2所示。
图4-2用例
系统边界是用来表示正在建模系统的边界。
边界内表示系统的组成部分,边界外表示系统外部。
系统边界在画图中方框来表示,同时附上系统的名称,参与者画在边界的外面,用例画在边界里面。
因为系统边界的作用有时候不是很明显,所以我个人理解,在画图时可省略。
箭头用来表示参与者和系统通过相互发送信号或消息进行交互的关联关系。
箭头尾部用来表示启动交互的一方,箭头头部用来表示被启动的一方,其中用例总是要由参与者来启动。
用例图主要的作用有三个:
(1)获取需求;
(2)指导测试;(3)还可在整个过程中的其它工作流起到指导作用。
对问题做出了分析之后,就可以根据分析的结果画出用例图了,因为下棋的角色是人,所以角色就是下棋者,下棋者直接发生的动作是点击鼠标,在棋盘上绘制棋子,所以就有可以把整个下棋的过程分为两个用例。
绘制棋盘界面和点击鼠标下棋,点击鼠标下棋包含了绘制棋子的动作,绘制棋子界面包括绘制控制界面,绘制消息界面,和他直接的棋盘界面。
用例图如图4-3所示。
图4-3五子棋用例图
4.2类图
类图是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。
类图不显示暂时性信息。
类图(Classdiagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。
类图最基本的元素是类或者接口。
类图通常包含如下的内容:
类、接口、协作、关系。
同其他的图一样,类图也可以包含注解和限制,类图中也可以包含包和子系统,这两者用来将元素分组。
有时后你也可以将类的实例放到类图中。
1.类(Class)
类一般包含3个组成部分。
第一个是类名;第二个是属性(attributes);第三个是该类提供的方法(类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。
类名部分是不能省略的,其他组成部分可以省略。
类图的画法如图4-4。
图4-4类
2.包(Package)
包是一种常规用途的组合机制。
UML中的一个包直接对应于Java中的一个包。
在Java中,一个包可能含有其他包、类或者同时含有这两者。
进行建模时,通常使用逻辑性的包,用于对模型进行组织;使用物理性的包,用于转换成系统中的Java包。
每个包的名称对这个包进行了惟一性的标识。
3.接口(Interface)
接口是一系列操作的集合,它指定了一个类所提供的服务。
它直接对应于Java中的一个接口类型。
接口的表示有大概两种方式。
具体画法见图4-5。
图4-5接口
4.关系
常见的关系有:
一般化关系(Generalization),关联关系(Association),聚合关系(Aggregation),合成关系(Composition),依赖关系(Dependency)。
其中,聚合关系(Aggregation),合成关系(Composition)属于关联关系(Association)。
一般关系表现为继承或实现关系(isa),关联关系表现为变量(hasa),依赖关系表现为函数中的参数(usea)。
一般化关系:
表示为类与类之间的继承关系,接口与接口之间的继承,类对接口的实现关系。
表示方法:
用一个空心箭头+实线,箭头指向父类。
或空心箭头+虚线,如果父类是接口。
对于每个机制,确定类、接口和其他的参与这个协作的协作。
同时确定这些事物之间的关系。
用场景来预排这些事物,沿着这条路你将发现模型中忽略的部分和定义错误的部分。
确定用这些事物的内容来填充它们。
对于类,开始于获得一个责任(类的职责),然后,将它转化为具体的属性和方法。
通过对各个类的属性和方法分析,可以画出一下类图,如图4-6所示。
图4-6五子棋类图
4.3棋盘界面设计
分析了设计思想,有了算法,并且画出了用例图,类图,之后就可以开始设计界面了,对界面的设计也可以理解为对类的设计,此界面主要通过类GobangView进行设计。
GobangView类也是主要的类,该类的主要作用是绘制棋盘,包括棋盘方格和边框,并组织五子棋窗口的下棋面板,并显示消息面板,还初始化了棋盘上各个落棋点的位置。
4.3.1画棋盘
此部分主要使用onDraw进行绘制,其主要实现代码如下:
publicvoidonDraw(Canvascanvas){
canvas.drawColor(Color.YELLOW);
{
PaintpaintRect=newPaint();
paintRect.setColor(Color.GRAY);
paintRect.setStrokeWidth
(2);
paintRect.setStyle(Style.STROKE);
for(inti=0;i for(intj=0;j intmLeft=i*grid_width+mStartX; intmTop=j*grid_width+mStartY; intmRright=mLeft+grid_width; intmBottom=mTop+grid_width; canvas.drawRect(mLeft,mTop,mRright,mBottom,paintRect); } } 4.3.2画棋子 此棋子通过使用图片进行绘制,其部分实现代码如下: Drawabletile=r.getDrawable(R.drawable.chess1); 其中chess1是需要引用图片的名称,存在drawable文件中。 4.3.3结束提示语显示 提示语显示使用函数mtext,并分3种情况显示提示语,其部分实现代码如下: privateCharSequencemText; privateCharSequenceSTRING_WIN="白棋赢! \n按中键开始新游戏。 "; privateCharSequenceSTRING_LOSE="黑棋赢! \n按中键开始新游戏。 "; privateCharSequenceSTRING_EQUAL="酷! 你们是平手! \n按中键开始新游戏。 "; if(checkWin(WHITE)){ mText=STRING_WIN; mGameState=GAMESTATE_END; showTextView(mText); }elseif(checkFull()){ mText=STRING_EQUAL; mGameState=GAMESTATE_END; showTextView(mText); } whoTurn=BLACK; analyzeChess(); if(checkWin(BLACK)){ mText=STRING_LOSE; mGameState=GAMESTATE_END; showTextView(mText); }elseif(checkFull()){ mText=STRING_EQUAL; mGameState=GAMESTATE_END; showTextView(mText); } 4.4核心实现代码 五子棋程序核心通过类ChessFormUtil进行具体实现,此类包含五连、活四、冲四、活三、活二、眠三、眠二这7种情况。 下面将是本程序的核心实现代码,用来实现人工电脑智能方面。 1.分析是否存在连续5个同色棋子,即判断是否输赢,其实现代码如下: publicbooleananalyzeWulian(int[]tmpChess,intisWho){ intcount=0; for(inti=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){ count++; }else{ break; } } for(inti=0;i if(tmpChess[HALF_LEN+i]==isWho){ count++; }else{ break; } } if(count==4){ returntrue; } returnfalse; } 2.分析活四,确认是否存在活四(活四: 在棋盘某一条阳线或阴线上有同色4子不间隔的紧紧相连,且在此4子两端延长线上各有一个无子的交叉点与此4子紧紧相连),其实现代码如下: publicbooleananalyzeHuosi(int[]tmpChess,intisWho){ intcount=0; inti=0; booleanisSpace=false; fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术移动应用开发毕业设计 基于安卓的五子棋游戏 软件技术 移动 应用 开发 毕业设计 基于 五子棋 游戏
![提示](https://static.bdocx.com/images/bang_tan.gif)