基于C++语言的中国象棋设计与实现


时间: 2021-07-03 21:52:52 人气: 14 评论: 0

摘要  众所周知,中国象棋有着悠久的历史,是中华文化的传承,体现着中华文化的智慧,同时也是人工智能方向重要的研究课题。通过设计这款C++语言编写的中国象棋程序,能使我熟悉项目的开发流程,进一步学习与了解人工智能的相关知识,更加深入的理解中国象棋的精髓。

    本文首先研究了中国象棋在计算机中的表示问题,接着讨论如何产生着法一系列相关内容。其次研究了博弈树的极小极大搜索技术及在此基础上发展起来的Alpha-Beta剪枝算法,使用MFC文档视图体系结构和Visual C++开发工具,实现了一个具有一定棋力的中国象棋人机对弈程序。

关键词:中国象棋;人机博弈;C++;人工智能


机器博弈基本思想

中国象棋博弈双方任何时候都清楚彼此棋子的状态和处于什么位置,它是一种完全知识博弈。 

计算机博弈的核心思想包括两个方面,包括博弈树的搜索以及对博弈树节点进行估值。在博弈树的每个节点上,都是以博弈的其中一方的身份来进行估值的,在每个节点上都能构建出一个博弈树。该博弈树的根节点是当前时刻的棋盘局面,它的子节点是假设再走一步棋以后的各种棋局,子节点的子节点是从子节点的棋盘局面再走一步棋的各种棋盘局面,以此类推,构造整棵博弈树,直到可以分出胜负或和棋的局面。整棵的博弈树是相当庞大的,再者,不同的棋类博弈树是有所不同的。 

博弈算法的主要任务就是对博弈树进行搜索并找出对当前局面来讲决定出下一步最佳走位。对博弈树进行极大极小搜索,可以达到这一目的。之所以要进行极大极小搜索,主要是因为博弈的双方共同目的是赢得对方,他们的目的正好相反,对一方有利的局面恰好对另一方是不利的,所以博弈的一方总是希望下一步的走法是子节点中取值最大者,而另一方则刚好相反。如此一来便形成了极大极小这样一个过程。 

在搜索博弈树的节点时,为了减少时间复杂度,不能搜索整棵树的所有节点,对于一些造成不够好的局面的节点,应以该节点为根节点,剪掉它的子数,以加快搜索的速度。同时也不需要一步到位搜索到分出胜负,只需要搜索一定的深度就可以了。按照最小最大算法以及局面评估函数一次往上推 ,给出父节点一个评估值,通过判断值的大小依次往上推,一直走到根节点,最优走法就这样一步一步的产生了。

    在搜索的整个过程中,搜索算法起到至关重要的作用,只有搜索算法越高效,才能用最短的时间来找到最优的走法,但是真的想要博弈程序走出高质量的走位,一个很好的局面评价机制是必不可少的,即以估值算法来作后盾,也就是说,用这个估值算法必须以客观的、正确的方法对其作出评价,可以确凿的评价局面的优劣以及优劣的程度。 


引言 3

1 绪论 4

1.1 课题意义 4

1.2 国内外现状 4

2 相关知识介绍 6

2.1 C++简介 6

2.2 机器博弈基本思想 7

3 需求分析 8

3.1 设计的目的与意义 8

3.2 功能需求 8

3.3 非功能需求 8

4 概要设计 9

4.1 象棋游戏设计的几个要点 9

4.2 象棋游戏棋盘的设计 9

4.3 中国象棋的规则 9

4.4 搜索算法 10

4.4.1 最小-最大算法 10

4.4.2 Alpha-Beta搜索算法 11

4.5 局面评估 12


评论
188083800