您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 中国象棋游戏的设计与实现-毕业设计
毕业设计中国象棋游戏的设计与实现摘要中国象棋发展至今已有数千年的历史了,它是中华民族智慧的结晶。在我国,中国象棋的普及程度是其它棋类无法比拟的,大至国际、国内比赛,小至社区街道。如今,仅中国就有2亿人会下中国象棋,且中国象棋的发展趋势日益国际化。本文首先研究了中国象棋在计算机中的表示问题,讨论如何产生着法等一系列相关内容,其次研究了博弈树的搜索技术及在此基础上发展起来的相关剪枝算法。系统使用MFC文档视图体系结构和VisualC++开发工具,实现了一个具有一定棋力的中国象棋人机对弈程序。此博弈程序实现了人机博弈,悔棋,电脑难度设置,着法名称生成等功能。关键词:中国象棋人工智能博弈树Alpha-Beta搜索I目录1前言....................................................................11.1中国象棋游戏设计背景和研究意义.........................................11.2国内外象棋软件发展概况.................................................11.3中国象棋游戏设计研究方法...............................................11.4本文的主要工作.........................................................22棋局表示和着法生成.......................................................22.1棋盘和棋子的表示.......................................................22.2着法生成...............................................................43走棋和博弈程序的实现.....................................................53.1博弈程序的实现.........................................................53.1.1搜索算法.............................................................53.1.2着法排序.............................................................83.1.3局面评估.............................................................93.2悔棋和还原功能的实现..................................................113.3着法名称显示功能的实现................................................123.4胜败判定..............................................................144界面设计和系统实现......................................................154.1界面设计..............................................................154.2系统实现..............................................................175总结....................................................................21参考文献...........................................................23ABSTRACT.................................................................24致谢..................................................错误!未定义书签。仲恺农业工程学院毕业论文(设计)成绩评定表..................错误!未定义书签。11前言1.1中国象棋游戏设计背景和研究意义中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。1.2国内外象棋软件发展概况最早的象棋软件是一副可以外出携带的电子棋盘,后来升级到电视游戏机。开始出现的一些容量很小的象棋软件如:DOS界面《将族》、WIN31程序的《中国象棋》等等,与其说人类下不过电脑,倒不如说是没有耐性等待电脑程序慢吞吞的搜索算法,有时甚至怀疑软件是否在搜索中死掉了。后来,网络上先后出现了真正的WINDOWS窗口界面的象棋专业高级软件《棋隐》、《象棋世家》、《象棋参谋》、《象棋奇兵》等。总而言之,各类象棋软件既有自身的优点,也存在共通性的缺陷,如:中局审势不够智能化,走不出弃子取势的人性化佳构,残局时智力明显低于人脑,难以走出残局例胜的必然着法等。放眼未来,象棋软件已经走完了一波持续上涨的行情,有可能出现逐步降温的滑坡趋势。1.3中国象棋游戏设计研究方法本系统主要用VisualC++进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能。该象棋人机博弈系统实现的功能主要包括:1、选手选择(人或电脑);2、人机对弈(人与电脑竞技);3、电脑棋力难度选择(电脑下棋能力难度选择,共有4级:按电脑配置选择难度);24、悔棋、还原;5、着法名称显示(象棋走棋规范名称)。1.4本文的主要工作第一部分主要介绍了中国象棋游戏开发的背景及意义、国内外象棋软件的发展概况和象棋游戏的设计研究方法;第二部分介绍了棋局表示方法和着法生成;第三部分介绍了走棋和博弈程序的实现;第四部分介绍了界面设计和系统的实现。2棋局表示和着法生成2.1棋盘和棋子的表示对于中国象棋棋盘局面的表示可采用传统而简单的“棋盘数组”。即用一个9*10的数组来存储棋盘上的信息,数组的每个元素存储棋盘上是否有棋子。这种表示方法简单易行。按此方法棋盘的初始情形如下所示:BYTECChessBoard[9][10]={R,0,0,P,0,0,p,0,0,r,H,0,C,0,0,0,0,c,0,h,E,0,0,P,0,0,p,0,0,e,A,0,0,0,0,0,0,0,0,a,K,0,0,P,0,0,p,0,0,k,A,0,0,0,0,0,0,0,0,a,E,0,0,P,0,0,p,0,0,e,H,0,C,0,0,0,0,c,0,h,R,0,0,P,0,0,p,0,0,r};给所有棋子定义一个值:#defineR_BEGINR_KING#defineR_ENDR_PAWN#defineB_BEGINB_KING#defineB_ENDB_PAWN#defineNOCHESS0//没有棋子黑方:#defineB_KING1//黑帅#defineB_CAR2//黑车3#defineB_HORSE3//黑马#defineB_CANON4//黑炮#defineB_BISHOP5//黑士#defineB_ELEPHANT6//黑象#defineB_PAWN7//黑卒红方:#defineR_KING8//红将#defineR_CAR9//红车#defineR_HORSE10//红马#defineR_CANON11//红炮#defineR_BISHOP12//红士#defineR_ELEPHANT13//红相#defineR_PAWN14//红兵判断颜色:#defineIsBlack(x)(x=B_BEGIN&&x=B_END)//判断某个棋子是不是黑色#defineIsRed(x)(x=R_BEGIN&&x=R_END)//判断某个棋子是不是红色对于着法的表示,直接借用棋盘数组的下标来记录着法的起点和目标点。至于是什么棋子在走,以及是否吃子、吃的是什么子,在着法结构中并不记录。这些信息由外部读取棋盘上起点、终点的数据获得。着法结构定义如下,其中还包含了对着法的历史得分的记录项,以供后面要讲到的“历史启发”所用。typedefstruct{shortnChessID;//表明是什么棋子CHESSMANPOSFrom;//起始位置CHESSMANPOSTo;//走到什么位置intScore;//走法的分数}CHESSMOVE;有了对棋盘局面和着法的表示之后,程序才能够完成以下操作:生成所有合法着法;执行着法、撤销着法;针对某一局面进行评估。4因而,棋局表示好比是整个程序(计算机下棋引擎部分)的地基,之后所有的操作都将建立在其基础上。2.2着法生成在着法生成器中,采用的基本思想就是遍历整个棋盘(一个接一个地查看棋盘上的每个位置点),当发现有当前下棋方的棋子时先判断它是何种类型的棋子,然后根据其棋子类型而相应地找出其所有合法着法并存入着法队列。这里谈到的“合法着法”包括以下几点:1、各棋子按其行子规则行子。诸如马跳“日”字、象走“田”字、士在九宫内斜行等等(这里需要特别注意的是卒(兵)的行子规则会随其所在位置的不同而发生变化——过河后可以左右平移)。2、行子不能越出棋盘的界限。当然所有棋子都不能走到棋盘的外面,同时某些特定的棋子还有自己的行棋界限,如将、士不能出九宫,象不能过河。3、行子的半路上不能有其它子阻拦(除了炮需要隔一个子才能打子之外)以及行子的目的点不能有本方的棋子(当然不能自己吃自己了)。4、将帅不能碰面(本程序中只在生成计算机的着法时认为将帅碰面是非法的,而对用户所走的导致将帅碰面的着法并不认为其非法,而只是产生败局罢了)。产生了着法后要将其存入着法队列以供搜索之用,由于搜索会搜索多层(即考虑双方你来我往好几步,这样才有利于对局面进行评估以尽可能避免“目光短浅”),所以在把着法存入着法队列的时候还要同时存储该着法所属的搜索层数。因此可以将着法队列定义为二维数组m_MoveList[8][70],其中第一个数组下标为层数,第二个数组下标为每一层的全部着法数。关于搜索层数,设定为4,实际使用的是1到3(在界面中将其限定为1—3)。搜索层数的增加会显著提高电脑的下棋水平(当然计算机的棋力在很大程度上也依赖于局面评估)。在配置为1.5G,512M内存的计算机上最多只能搜索3层,再多将导致搜索时间达到令人无法容忍的地步(这里还需要特别说明的是,搜索的速度也和着法生成的效率以及局面评估的复杂度有关,因为每分析一个结点都要执行这两种操作)。对于每一层的着法数,也就是当前下棋方针对当前局面的所有可选的合法着法,据有关数据统计在象棋实战中一般最多情况下也就五六十种。定义第二个数组下标为70,应当可以保证十分的安全。53走棋和博
本文标题:中国象棋游戏的设计与实现-毕业设计
链接地址:https://www.777doc.com/doc-5329179 .html