基于android的中国象棋的设计与实现本科毕设论文.docx
- 文档编号:26032210
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:42
- 大小:1.24MB
基于android的中国象棋的设计与实现本科毕设论文.docx
《基于android的中国象棋的设计与实现本科毕设论文.docx》由会员分享,可在线阅读,更多相关《基于android的中国象棋的设计与实现本科毕设论文.docx(42页珍藏版)》请在冰豆网上搜索。
基于android的中国象棋的设计与实现本科毕设论文
实训报告
实训项目名称基于Android象棋游戏的开发与测试
二级学院信息工程学院
专业班级11级计科
(2)班
姓名完圆圆、李城城、孙超、胡迪
学号1142151221、14、20、08
日期2014-11-19
项目
名称
基于安卓象棋游戏的开发与测试
地点
教13603
报告内容
在本报告中,首先介绍了安卓的现状以及开发的相关知识,其次是关于开发游戏过程中用到的开发工具和系统的运行环境配置等。
通过对Android系统架构和应用开发进行初步研究,设计一款中国象棋游戏。
在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的菜单界面、屏幕绘制、时间控制、布局算法和动画等进行了设计,并最终实现了一个界面友好、高效稳定和富有娱乐性的手机益智游戏。
最后,实现的是对本次游戏的测试并列举了测试用列以及给出了测试结果。
教师评语
成绩:
教师签名:
摘要
中国象棋是一款智力休闲游戏,具有历史悠久而且拥有巨大的游戏爱好者群体,他们以中国象棋陶冶情操、锻炼智力、体验象棋带来的快乐,中国象棋还是一个老少皆宜的娱乐游戏。
随着手持设备、智能手机的普及,搭载Android操作系统的智能手机也已经走进了千家万户,当人们闲暇偶尔需要娱乐时,却发现没有实物象棋,该软件不失为一个很好的替代品,供大家进行娱乐享受,尤其是在现在这个快节奏的社会中,人们更满足于手机的使用,可以方便地随意移动,不像实物象棋那样静静的坐着。
本论文通过实际应用软件的开发深入分析和研究Android开发技术。
实现中国象棋的人机会话。
本文实现了中国象棋在计算机中表示问题,基于Android平台应用,人机对战模拟现实中的人人对战;讨论走棋规则和着法的实现等一系列问题,最终电脑能够通过产生着法,搜索,估计来产生一步最优的走棋,实现人机会话的目的。
关键字:
中国象棋,Android,智能手机,人机对战
1绪论
1.1研究背景
(1)中国象棋背景
中国象棋发展至今已有两千三、四百年的历史,早在战国时期就有正式的记载,堪称中国的国粹。
中国象棋具有悠久的历史,深的人们的喜爱,象棋的爱好者也更是数不胜数,远在战国中国象棋便在贵族阶层广为流传,早期的象棋是象征着当时战斗场面的游戏,后来这种观念慢慢被改变,经过千年的流传不断的完善和改进,成为人们休闲娱乐、锻炼脑力思维不可获取的好方式。
中国象棋体现的是一种策略,方寸之间包含天地玄机,人生哲理,使人越是细玩越觉其味悠然深远。
由于简单的行棋规则,趣味性强,便捷的载体,使得象棋成为雅俗共赏的竞技项目。
因此,也成为流行极为广泛的棋艺活动。
是我国正式开展的78个体育项目之一,为促进该项目在世界范围内的普及和推广,在中国古代,象棋被列为士大夫们的修身之艺,现在则被视为怡神益智的一种有益的活动。
有着数以亿计的爱好者。
它不仅能丰富文化生活,陶冶情操,在棋战中,人们可以从攻与防、虚与实、整体与局部等复杂关系的变化中悟出某种哲理;更有助于开发智力,启迪思维,锻炼辨证分析能力和培养顽强的意志。
(2)Android系统简介
Android系统构架简介:
Android是一个基于Linux®V2.6内核的交互性操作环境,同时它也是一个分层系统,Android系统架构显示如下图1.1。
图1.1系统架构图
应用层由所有的Android应用程序组成。
其中包括电子邮件客户端,SMS程序,地图,浏览器,联系人及其他。
所有的应用程序都是用Java编程语言编写的。
应用框架层定义了Android应用程序框架。
所有的Android应用程序都是基于应用框架的。
Android应用框架包括:
●丰富及可扩展性的视图,可以用来建立一个美观的用户界面,包括列表,网格,文本框,按钮,甚至是嵌入到Web浏览器的应用程序。
●一组内容提供商,使应用程序能够访问其他应用程序的数据(如电话簿),或共享自己的数据。
●资源管理器提供了访问的非编码资源的途径,如本地化的字符串,图形,布局文件。
●通知管理器允许所有应用程序显示定制的提示或通知在状态栏里。
●活动管理器可以管理应用程序的生命周期,并提供一个通用的后台堆栈导航。
库层包括了一套被各类Android系统组件使用的C/C++库并对应用程序框架提供支持。
Android的运行环境包括一套核心库和Java虚拟机(Dalvik虚拟机),已经由谷歌重新设计和优化来适合Android平台。
Linux内核位于Android系统的底层并作为硬件和软件之间的一个抽象层。
它提供了核心系统服务,如安全,内存管理,进程管理,网络协议栈和驱动模型。
此外,一些底层功能如Dalvik虚拟机线程管理也依赖于Linux内核。
1.2本论文研究意义
中国象棋是一项智力和策略的游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。
控制计算机的是人类,而人机会话综合性很强的一门边缘学科,它的中心任务是研究使计算机如何去做那些过去只能靠人的智力才能做的工作。
因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。
本次论文的研究,主要是对中国象棋在Android系统中的兼容行性,对游戏界面可观性,游戏中人机会话的研究。
对于游戏中的人机会话的要点:
a某种在及其上表示棋局的方法,让程序知道会话的状态;
b产生合法的走棋法则,使得会话双方公正,并可以判断人类对手是否乱走;
c从所有和法定的走法中选择最佳的走法的技术;
d一种评估局面优化的方法,同上面技术配合做出智能选择;
e一个实现游戏的界面;
通过对游戏的设计,来实现游戏中棋牌的表示,着法的生成,对着法的搜索,最后对局面的评估来实现中国象棋的人机会话。
2游戏系统开发平台及搭建
2.1JDK和Eclipse:
JDK是Sun公司针对java开发员的产品。
自从Java推出以来,JDK已经成为使用最广泛的javaSDK。
JDK是整个java的核心。
包括运行环境Java工具和Java基础类库。
JDK是学好Java的第一步。
安装Eclipse的开发环境需要JDK的支持,如果没有JDK,则启动Eclipse时会报告错误。
在windows上安装JDK非常简单首先在Sun官网上下载,按照默认路径进行安装。
安装完成之后,可以在检查JDK是否安装成功。
打开cmd窗口,输入java–version查看JDK的版本信息。
出现类似下面的画面表示安装成功了:
图2.1JDK测试
Eclipse如果你还没有Eclipse的话,从官网上下载EclipseIDEforJavaDevelopers解压之后即可使用。
2.2AndroidSDK
AndroidSDK提供了在windows平台上的开发安卓应用程序的开发组件,也就是说,不论读者使用什么样的平台都可以开发出安卓平台的应用软件,其中包含了安卓平台上开发移动应用的各种工具集。
它不仅包括了安卓模拟器和用于Eclipse的安卓开发工具插件(ADT),而且包括了各种用来调试,打包盒在模拟器上安装应用的工具。
安卓主要是以java语言为基础,用户可以使用java语言来开发安卓平台上的软件应用。
通过SDK提供的一些工具将其打包成安卓平台使用的apk文件,然后在使用SDK中的模拟器(Emulator)来模拟和测试软件在安卓平台运行情况和效果。
安装安卓的SDK,安装好JDK和Eclipse后,打开EclipseIDE。
依次单击Menu项中的windows->AndroidSDKManager项,进入AndroidSDKManager界面选择Tool和需要的Android版本项进行更新安装。
2.3ADT
Android为Eclipse定制了一个插件,及ADT(AndroidDevelopmentTools),目的是为用户提供一个强大的综合环境用于开发Android应用程序,ADT扩展了Eclipse的功能,可以让用户快速的建立Android项目,创建应用程序界面,在基于AndroidAPI的基础上添加组件,以及用SDK工具集调试应用程序,甚至导出签名(或未签名)的APKs以便发行应用程序。
安装AndroidDevelopmentToolplug-in,打开EclipseIDE。
依次单击Menu项中的Help->SoftwareUpdate项
3系统分析
3.1可行性研究
本次实训的题目是:
基于Android象棋游戏的开发与测试;主要是在基于Android平台开发一个手持设备应用游戏,使得游戏具有兼容性和人机对战;并对整个系统分析,设计过程给出一个论证。
中国象棋游戏是棋牌类游戏,体现的是一种策略。
对于行棋走棋不同的棋子有不同走棋规则,走棋都必须按照走棋规则要求,双方轮换走棋,吃子,将军。
本游戏设计无疑是模拟现实人人博弈,虚拟的替换了真实的棋子棋盘,由人来和电脑直接对弈;在一个人闲暇时也可以体验博弈的乐趣。
该应用游戏的设计主要从以下几方面做起:
系统流程分析、系统的功能设计、系统的数据结构设计。
做好这些工作需要对Android开发平台了解,并搭建平台;深入了解数据结构、Android应用程序以及各种组件(API)库函数。
3.2界面的需求分析
通过以往手持设备游戏的体验,和用户对中国象棋游戏需求逻辑,游戏的功能以及操作方法把整个设计划分成单元;先是运行游戏,进入欢迎游戏界面,随后单击欢迎界面的图片进入菜单界面,在菜单中可以点击“打开声音”/“关闭声音”按钮来控制声音开关,单击“帮助”菜单可以进入帮助界面显示游戏操作方法,而在菜单界面单击“开始游戏”菜单将进入游戏主界面开始游戏,在游戏界面玩家可以通过单击自己的棋子按照行棋规则来走棋,同时可以单击声音按钮打开关闭声音,当游戏一方的“将”或者敌方的“帅”被吃掉是,会出现游戏失败或游戏胜利的界面,在游戏过程中玩家可以随时通过单击“退出”按钮返回到游戏主菜单,主菜单中还可以点击“退出游戏”结束关闭游戏。
3.3游戏走棋需求设计分析
进入游戏界面,游戏提示当前走棋为“帅”或者“将”,双方各走一着,直至分出胜负或者直接点击退出结束游戏,轮到走棋的一方,将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉点,都算走一着,双方各走一着即一个回合,吃子时,任何棋子走动,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,即屏幕上消失在显示自己的棋子。
玩家走完棋后电脑相对应搜索出自己相对应的走法。
程序需要让计算机在轮到它走子的时候能够执行一步它认为最有利的着法,而不是乱走;那么它就要有在诸多可供选择的着法,提供所有候选着法的列表就是着法生成器所要完成的。
之后用搜索函数来搜索列表,并用局面评估函数逐一打分,最后就可以选择出最佳着法并执行。
4游戏系统的设计与实现
4.1类框架的设计
通过对中国象棋游戏的了解,对基于Android技术的中国象棋人机对弈游戏的需求分析,游戏实现的理解并结合自己对知识点所掌握的程度;对中国象棋游戏总体设计,主要由三个类组成:
共有类,辅助界面相关类,游戏界面相关类。
共有类是Activity的实现类ChessActivity,该类是通过扩展基类Activity得到的,是整个游戏的控制器,也是整个游戏程序的入口;辅助界面相关类由WelcomeView欢迎界面类(该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作),HelpView帮助界面类(该类为帮助界面的实现类),MenuView菜单界面类(该类为菜单界面的实现类,负责绘制菜单界面以及对菜单界面的屏幕进行监听)三个类实现;游戏界面相关类由GameView游戏界面类(该类为游戏程序中最主要的类,负责绘制游戏过程中所有的信息,如棋盘、棋子、各个按钮以及胜利或失败菜单等),GuiZe象棋规则类(该类是象棋规则的实现类,其中包含所有棋子的走棋规则以及当前棋牌所有可能走法),ChessMove走法类(该类为棋子的走法的封装类,包括棋子的名称,出发点以及目标点)。
之间关系如图4.1所示:
图4.1游戏类图
4.2共有类ChessActivity的实现
该类的主要作用是通过接受Handler消息变量,根据各个界面发送的Handler消息的类型判断所需要执行的操作。
在适当的时间初始化相应的用户界面,各个界面初始化方法被调用时,并根据其他界面的需求直接将用户界面切换到相应的界面
4.3辅助界面相关类的实现
该游戏的第一个用户界面即欢迎界面如图4.2所示,通过WelcomeView类来实现该界面加载了一个欢迎中国象棋图片,并通过监听菜单图片,向Activity发送Handler消息通知控制器切换用户界面;然后切换到菜单界面MenuView。
图4.2游戏欢迎界面
MenuView类中通过监听“开始游戏”切换到游戏界面;通过监听“打开声音”/“关闭声音”进行声音的打开与关闭,与此同时“打开声音”、“关闭声音”按钮进行切换;通过监听“帮助”来切换都帮助界面;通过监听“退出游戏”结束游戏用行退出游戏。
帮助界面HelpView,该类中加载图片,图片中显示该游戏“怎么玩”同时监听“返回”按钮,向Activity发送Handler消息通知控制器切换用户界面从而返回到菜单界面,如图4.3所示。
图4.3菜单界面
4.4游戏界面相关类的实现
游戏界面GameView,该类是整个程序中最主要的类,该类首先是绘制屏幕上的内容棋盘和对应的棋子。
提示一方先走;当“黑帅”或者“红将”被吃的话,弹出您赢了或者您输了通过监听结束游戏切换到菜单界面。
或者点击退出按钮也可结束游戏切换至菜单界面。
监听声音按钮来控制声音的开与关并以红色显示声音开,消失即为关,如图4.4所示。
图 4.4 游戏界面
4.5中国象棋的规则及走法的实现
(1)行棋规则
中国象棋分为红黑双方,以楚河汉界为分界线,双方各执16字,分别为2车2马2相2仕2炮1将5卒,各自走法不同,具体如下:
马:
只可以走“日”字方格,因此一匹马的最理想落子点有8个,但存在绊马腿的情况,即从马的位置到要走到的目标位置,顺着此方向,“日”字方格有两个方向,即两格长度和一个长度,马紧挨的两格长度方向的位置不能有子,否则即被绊住,不能走动。
若目标位置为空,即可走过,若为对方的棋子,即可吃掉。
图4.5马的走法
红黑马规则走法的介绍:
case10:
//红马
case3:
//黑马
if(!
((Math.abs(toX-fromX)==1&&Math.abs(toY-fromY)==2)
||(Math.abs(toX-fromX)==2&&Math.abs(toY-fromY)==1))){
returnfalse;//马走的不是日字时
}
if(toX-fromX==2){//向右走
i=fromX+1;//移动
j=fromY;
}
elseif(fromX-toX==2){//向左走
i=fromX-1;//移动
j=fromY;
}
elseif(toY-fromY==2){//向下走
i=fromX;//移动
j=fromY+1;
}
elseif(fromY-toY==2){//向上走
i=fromX;//移动
j=fromY-1;
}
if(qizi[j][i]!
=0)
returnfalse;//绊马腿
break;
炮:
只可以走直线,且一步可以走任意距离,其起始点与目标点之间不得存在其他棋子。
炮吃子的条件是与目标棋子在一条直线上,且两子之间必须有且只有一个棋子作为“跳板”,让炮进行跳跃式攻击。
红黑炮规则走法的介绍:
图4.6炮的走法
case11:
//红砲
case4:
//黑炮
if(fromY!
=toY&&fromX!
=toX){//炮走直线
returnfalse;//返回false
}
if(qizi[toY][toX]==0){//不吃子时
if(fromY==toY){//横线
if(fromX for(i=fromX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } else{//向走走 for(i=toX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } } else{//竖线 if(fromY for(j=fromY+1;j if(qizi[j][fromX]! =0){ returnfalse;//返回false } } } else{//向上走 for(j=toY+1;j if(qizi[j][fromX]! =0){ returnfalse;//返回false } } } } } else{//吃子时 intcount=0; if(fromY==toY){//走的是横线 if(fromX for(i=fromX+1;i if(qizi[fromY][i]! =0){ count++; } } if(count! =1){ returnfalse;//返回false } } else{//向左走 for(i=toX+1;i if(qizi[fromY][i]! =0){ count++; } } if(count! =1){ returnfalse;//返回false } } } else{//走的是竖线 if(fromY for(j=fromY+1;j if(qizi[j][fromX]! =0){ count++;//返回false } } if(count! =1){ returnfalse;//返回false } } else{//向上走 for(j=toY+1;j if(qizi[j][fromX]! =0){ count++;//返回false } } if(count! =1){ returnfalse;//返回false } } } } break; 象、相: 只可以在己方阵营走动,且仅限于7个点,即己方“田”字格上的7个点,走的是斜线,走动时,起始点与目标点构成一条斜线,若该斜线的中点位置存在其他棋子,则被绊住无法走动。 图4.7象的走法 case6: //黑象 if(toY>4){//不能过河 returnfalse; } if(Math.abs(fromX-toX)! =2||Math.abs(fromY-toY)! =2){//相走“田”字 returnfalse; } if(qizi[(fromY+toY)/2][(fromX+toX)/2]! =0){ returnfalse;//相眼处有棋子 } break; case13: //红相 if(toY<5){//不能过河 returnfalse;//返回false } if(Math.abs(fromX-toX)! =2||Math.abs(fromY-toY)! =2){//相走“田”字 returnfalse;//返回false } if(qizi[(fromY+toY)/2][(fromX+toX)/2]! =0){ returnfalse;//相眼处有棋子 } break; 将、帅: 只可以在己方阵营走动,且仅限于9个点,即己方底三行中三列形成的9个交叉点,也就是俗称的“九宫”,一步只可以走动一个方格的直线距离作为本方的主将,镇守大本营,双方的主将是不能够处于同一条直线而主将之间不存在其他的棋子进行隔挡。 图4.8将帅的走法 case1: //黑帅 if(toY>2||toX<3||toX>5){//出了九宫格 returnfalse; } if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步 returnfalse; } break; case8: //红将 if(toY<7||toX>5||toX<3){//出了九宫格 returnfalse; } if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步 returnfalse; } break; (2)棋盘的表示 针对棋盘的设计,每一种棋子对应一个固定的值用以识别该棋子的类型,那么设计就根据红黑双方的棋子以及每个类型的棋子,设计规则类(GuiZe类,调用其中的canMove方法用以判断某一步走棋的是否可行。 规则类的设计则采用了常规的办法,因为棋子的种类只有7种,且红黑双方处于棋盘的两端,某些棋子走动时的方向不一样,设计时就要进行分类讨论设计,供存在14中不同的判别方法来对所以的棋子走法进行判别是否可行,每一个判别方法都对应于其独有的判断算法。 棋盘上各种棋子以及棋盘的初始布局的设计采用10*9的数组来进行标识,如下图4.9所示: 图4.9棋盘初始布局 各个数字的对应关系如下: 0-无棋子;1-黑方的帅;2-黑方的车;3-黑方的马;4-黑方的炮;5-黑方的士;6-黑方的象;7-黑方的卒;8-红方的将;9-红方的车;10-红方的马;11-红方的炮;12-红方的士;13-红方的相;14-红方的兵。 坐标(0,0)到坐标(8,4)之间的坐标代表楚河汉界的一方,坐标(0,5)到坐标(8,9)之间的坐标代表楚河汉界的另一方,即红黑双方各自的领土。 电脑走棋时通过构造一个走法类ChessMove,创建一个对象调用NegamaxEngine类中的Search()函数根据当前局势查询一个最好的走法记录棋子的原有位置坐标、目标位置坐标、棋子类型并对该对象进行初始化。 然后根据该对象记录的原有位置坐标和目标位置坐标进行数据改变达到行棋目的。 玩家走棋是通过对屏幕进行监听,从而记录棋子类型,原有位置坐标和目标位置坐标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 android 中国象棋 设计 实现 本科 论文