基于人工智能的中国象棋开发
|
|
|
作者:somic 发布日期:2007-03-21 ↓以下是文章部份文字内容↓ |
基于人工智能的中国象棋开发 【摘要】 本文讨论的是基于人工智能的中国象棋开发过程,因此,中国象棋的人机博弈是本文的重点。 文章先定义一颗移动的棋子、一个棋子位置和一个走法等的数据结构,整个棋盘用二维数组m_ChessBoard[10][9]来表示,14颗棋子分别由整数1-14表示,0则代表某点没有棋子。界面产生后,则开始定义鼠标响应事件,按照人的使用习惯,鼠标左键按下去表示人方下棋的出发点,左键松开表示到达了目的点,棋子拖动过程由WM_MOUSEMOVE函数响应。 接下来要做的是象棋规则和机器所有步骤的产生,人方在下完棋后需要经过规则函数IsValidMove()的检验,如果无效则返回上一步棋局;随机产生走法之前也必须先经过IsValidMove()函数的判断,否则无法进入走法队列m_MoveList[8][80]。 人机博弈的人工智能主要体现在电脑从所有的合法走法中找到一个最合理的走法,这需要搜索算法来实现。搜索算法是基于局面评估函数的,对于每一种走法,局面评估函数都给出评分,然后由搜索算法做出选择。本文所用的搜索引擎有两种:负极大值搜索和Alpha-Beta搜索。负极大值算法的核心在于:父节点的值是各子节点的值的负数的极大值。相对于其他难理解的搜索算法,它更容易被使用;Alpha-Beta搜索能够忽略很多节点的搜索,对忽略的节点来说,不仅本身,而且它下面的子树也被忽略掉了。这种搜索算法明显的优点是:需要遍历的节点数远远少于负极大值算法,时间开销相对也较少。 搜索算法实现后,一个较完整的基于人工智能的中国象棋人机博弈系统诞生了。根据搜索的深度,可以设置难度,当然,难度的增加与所耗时间成正比。 本系统除了实现人机博弈,其他功能主要有打开残局、人方悔棋、设置难度、设置搜索引擎。缺陷是开局的平庸和机器对双方对子的热衷以及界面过于简单。 【关键词】 人机博弈 人工智能 Alpha-Beta搜索 目 录 引 言 1 第一章 概述 2 1.1 系统的开发背景 2 1.2 中国象棋游戏的起源、历史 2 1.3 本文的组织安排 3 第二章 系统分析与设计 5 2.1 中国象棋的行棋规则 5 2.1.1 棋盘和棋子 5 2.1.2 走棋和吃子 5 2.1.3 将死和困毙 6 2.1.4 胜、负、和 6 2.2系统运行环境 6 第三章 VC++技术简介 7 3.1 VC++概述 7 3.2 VC++的特点及工作原理 7 3.3 MFC编程特点 8 第四章 系统主要功能 9 4.1、人机对弈 9 4.2、悔棋 10 4.3、双方对弈结束后,棋盘状态不得变动 10 4.4、残局对弈 12 4.5、设置搜索深度(即难度设置)和搜索引擎 12 4.6、保存 13 第五章 系统实现过程 14 5.1、实现中国象棋人机博弈的基础 14 5.1.1人机博弈的要点: 14 5.1.2 棋盘表示(Board Representations) 14 5.1.3走法产生(Move Generation) 17 5.1.4搜索技术(Search Techniques) 19 5.1.5估值(Evaluation) 19 5.2、人机博弈实现过程 21 5.2.1用到的数据结构 21 5.2.2界面的产生 22 5.2.3走法产生 27 5.2.4产生搜索引擎 31 5.2.5估值核心 35 第六章 结 论 37 6.1系统特色 37 6.2 发展前景 37 6.3
|
|
| [1] [2] [3] [4] [下一页] |
|
|
|
【支付给评论者搜币数:0枚】【评论总数:1条】【点击数:11984次】【确认阅读:40次】 |
|
|
|
|
|
|
|