资源描述:
《网络游戏开发之单机游戏开发报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单机象棋游戏的设计与实现一、实验目的中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。二、实验步骤1、中国象棋游戏设计研究方法本系统主要用VisualC++进行开发,里面的MFC类库,使游戏开发更加方便,并利用人工智能相关搜索算法实现人工智能的着法生成,从而完善整个游戏的功能
2、。该象棋人机博弈系统实现的功能主要包括:1、选手选择(人或电脑);2、人机对弈(人与电脑竞技);3、电脑棋力难度选择(电脑下棋能力难度选择,共有4级:按电脑配置选择难度);4、悔棋、还原;5、着法名称显示(象棋走棋规范名称)。2、棋盘和棋子的表示对于中国象棋棋盘局面的表示可采用传统而简单的“棋盘数组”。即用一个9*10的数组来存储棋盘上的信息,数组的每个元素存储棋盘上是否有棋子。这种表示方法简单易行。按此方法棋盘的初始情形如下所示:BYTECChessBoard[9][10]={R,0,0,P,0,0,p,0,0,r,H,0,C,
3、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//没有棋子黑方:#d
4、efineB_KING1//黑帅#defineB_CAR2//黑车#defineB_HORSE3//黑马#defineB_CANON4//黑炮#defineB_BISHOP5//黑士#defineB_ELEPHANT6//黑象#defineB_PAWN7//黑卒红方:#defineR_KING8//红将#defineR_CAR9//红车#defineR_HORSE10//红马#defineR_CANON11//红炮#defineR_BISHOP12//红士#defineR_ELEPHANT13//红相#defineR_PAWN14
5、//红兵判断颜色:#defineIsBlack(x)(x>=B_BEGIN&&x<=B_END)//判断某个棋子是不是黑色#defineIsRed(x)(x>=R_BEGIN&&x<=R_END)//判断某个棋子是不是红色对于着法的表示,直接借用棋盘数组的下标来记录着法的起点和目标点。至于是什么棋子在走,以及是否吃子、吃的是什么子,在着法结构中并不记录。这些信息由外部读取棋盘上起点、终点的数据获得。着法结构定义如下,其中还包含了对着法的历史得分的记录项,以供后面要讲到的“历史启发”所用。typedefstruct{shortnCh
6、essID;//表明是什么棋子CHESSMANPOSFrom;//起始位置CHESSMANPOSTo;//走到什么位置intScore;//走法的分数}CHESSMOVE;三、程序代码及实现1、博弈程序的实现搜索算法的好坏直接影响着程序执行的效率(从某种角度上,它影响着计算机的下棋水平。因为,计算机必须在有限的时间内完成思考,搜索速度快意味着在相同的时间内程序可以“看”得更远,“想”的更多)。关于棋类对弈程序中的搜索算法,已有成熟的Alpha-Beta搜索算法以及其它一些辅助增强算法(还有众多基于Alpha-Beta算法的派生、变
7、种算法)。我们在程序中直接借鉴了Alpha-Beta搜索算法并辅以历史启发。本节先介绍Alpha-Beta搜索算法:在中国象棋里,双方棋手获得相同的棋盘信息。他们轮流走棋,目的就是吃掉对方的将或帅,或者避免自己的将或帅被吃。……表示红方走棋表示黑方走棋…………图1博弈树又此,可以用一棵“博弈树”(图1)来表示下棋的过程——树中每一个结点代表棋盘上的一个局面,对每一个局面(结点)根据不同的走法又产生不同的局面(生出新的结点),如此不断进行下去直到再无可选择的走法,即到达叶子结点(棋局结束)。中国象棋的博弈树的模型大概如下图所示,可以
8、把其中连接结点的线段看作是着法,不同的着法自然产生不同的局面。。ACDB-8-210-8?2………图2树的裁剪首先,考察结点A的子结点B。结点B所属的这一层是轮到你的对手——“最小者”来走棋了,目的是使得棋局的分值尽可能的小。依次考察结点B的各个子