VC++实现中国象棋游戏设计+代码(2)
时间:2019-06-11 19:35 来源:毕业论文 作者:毕业论文 点击:次
1.2 国内外象棋软件的发展 早在上世纪90年代的时候中国象棋软件就有了一些基本的雏形,不过那时的象棋软件没有布局库,没有残局规则,水平上很弱。象棋软件是很依赖于计算机能力的,所以到了本世纪初,计算机硬件出现了进步,AMD系列CPU大幅度的提高了计算机的计算能力,象棋软件也获得了硬件上的大幅进步。最早的象棋软件是台湾人做的,象纵马奔流,象棋世家等都是出自台湾人的手笔。本世纪初,国际奥林匹克运动会的人工智能项目,出现了象棋软件的比赛,这就为象棋软件的发展提供了动力。到了2003年,xiexie和纵马奔流及ELP的出现已经标志着象棋软件已经有了重要进步。到了06年随着国内软件业的发展,CPU处理能力的大幅提升,这些都为象棋软件的发展提供了必要条件,从此象棋软件迎来了黄金发展期[6]。 1.3 用C++实现中国象棋游戏的设计方法 本文主要是用vc++进行各种人工智能的功能实现,包括: 1、棋手选定(人或电脑); 2、人机对弈(人与电脑竞技); 3、电脑难度选择(电脑难度选择,共有4级:按电脑配置选择难度); 4、悔棋、还原; 5、棋子规则显示[1]。 1.4 本文的主要工作 第一部分介绍了用VC++实现中国象棋游戏的时代背景; 第二部分介绍了如何使用VC++表示棋局; 第三部分介绍了如何使用VC++表示走棋和如何博弈; 第四部分介绍了如何使用VC++表示界面和整体系统[2]。 2. 棋局表示和棋子规则生成 2.1 棋盘和棋子的表示 关于棋盘的表示再也没有比“棋盘数组”更实用的了。这种方法用一个9*10的数组就可以存储棋盘上的信息,在这些数组中,元素可以清晰的代表这个位子是否有棋子。则棋盘表示如附录1。 关于棋子规则的表示方法,我的方法是直接用数组里的元素记录被选中棋子的起点和终点。至于选中那个棋子,终点是否有棋子被吃掉,这些是不包括在棋子规则里的。这些工作都是由外部读取棋盘上起点、终点的数据获得。棋子规则结构定义如附录2。 棋盘和棋子的规则表示完了,接下来我们就可以进行以下操作: 生成所有合法棋子规则; 执行棋子规则、撤销棋子规则; 至此,整个棋局的表示算是构成了,以后的各种操作都将以棋局为基础[3]。 2.2 棋子规则的生成 在规则生成器中,本文选择的方法就是一个一个地查看棋盘上的每个点,若发现棋子,则判断该棋子颜色及种类,接着根据种类判断可能为终点的所有点。最后存到规则序列中[7]。 规则有以下几点: 1、棋子的行动方式。如象走田,马走日等等。 2、棋子的行动界限。棋子是不能到棋盘外的,再则,有些棋子本身在棋局也是有界限的(如将和士本身是不能离开九宫格的)。 3、棋子在移动到目的位子的过程中,不能被其他的棋子所当(除了炮在行动时需要中间有一个棋子),而且目的位子不能有己方棋子。 4、将帅永远不能在同一直线上,若有此情况发生将直接生出败局。 生成棋子规则以后要把这些生成的规则存到棋子规则队列中,这样才能为电脑难度的设定提供依据。在人机对战过程中,电脑的目标棋子和目标旗子要走的位子都是基于电脑对局面的评估。电脑在走棋时会搜索棋子规则队列,而且搜索会进行多层搜索。因为双方对战时肯定会你来我往走上好几步,若搜索层数过低,则必定会让电脑陷入目光短浅的困境。因此,我们在储存棋子规则时一定还要储存这种棋子规则的搜索层数。因此可以将棋子规则队列定义为二文数组m_MoveList[8][70],这里第一个数组下标为层数,第二个数组下标为每一层的全部着法数[8]。 (责任编辑:qin) |