中国象棋人机博弈系统的设计与实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
This paper studies the problem of board position of Chinese chess, move generation and situation assessment. It reaches a Chinese chess game system with a variety of functional modules which involves “man-man battle”, “man-machine battle”, the keeping and reading of the end-game, undoing and restoring through Visual C++ platform and MFC.
“棋盘”是棋子的活动场所,就一方来说,棋面由五条横线和九条直线交叉组成。中间中间有一条空白横道,称为“楚河汉界”,“楚河汉界”将整个棋盘分为两部分,两部分通过河界相连,变成了横十竖九的完整棋盘,拥有九十个交叉点,棋子就摆放在这些交叉点上。“河界”中间不标直线,棋子跨越“河界”,无论是直走横走或斜走均按有线行棋。棋盘上画“米”字形方格的地方,叫做“九宫”,“九宫”是“将帅”的王宫,开局时将就待在王宫的最深处。
首先MFC是一个基础类库,这个库中封装了很多的WinAPI函数,它的类的层次结构如图3.1:
图3.1 MFC类层次结构图
由于C++可以继承类,支持虚函数,和MFC的消息映射机制,程序员可以通过对类的继承和扩展来实现特定的功能。
另一方面MFC也是由各种类构成的一个应用程序框架,在VC++下建立一个新的MFC工程的话,Microsoft Visua C++通过AppWizard自动生成许多的文件,这些文件构成了一个框架,是用户接口的标准实现方法,程序员需要做的就是通过生成的接口在这个轮廓当中加入应用程序要实现的核心内容。程序员可以通过资源编辑器设计用户界面和接口,也可以通过ClassWizard向框架文件中添加代码。同时MFC也可以对工程文件进行封装,简单方便。
2.2棋盘和棋子
中国象棋有三十二个棋子,分为红黑棋子两组,红子十六个、黑子十六个,对弈双方各一组,棋子的兵种是一样的,分为七个兵种:红方分为:帅(一个)、仕(两个)、相(两个)、车(两个)、马(两个)、炮(两个)、兵(四个);黑方分为将(一个)、士(两个)、象(两个)、车(两个)、马(两个)、炮(两个)、卒(四个)。为了区分红黑棋子,方便记忆,有四组兵种的名字是不一样的,其中帅=将、仕=士、相=象、兵=卒,但是它们两两间的作用完全相同。
3.2棋局表示
计算机要下棋首先是要读懂象棋,意思就是要让计算机知道当前棋盘局面(棋盘上棋子的分布情况)。对于计算机来说,它能读懂的就是由数据结构和算法所组成的程序,所以我们首先要考虑的是用什么样的数据结构来记录棋子和棋子在棋盘上的位置,用不同的数据结构来表示棋盘,程序会产生不同时间、空间复杂度。
人类对于人工智能的探索是从棋类开始的,研究人工智能的学者们曾经表示:如果我们要想深入的了解人类智能的核心技术,我们就必须掌握棋类的本质。中国象棋从古代流传至今有了几千年的历史,是一种古老的文化,集人类科学、文化、艺术为一体,有助于开发人的智力,培养人的思维,锻炼人的毅力,使人更具有竞争意识。并且相比较于国际象棋,中国象棋更为复杂,因此对中国象棋人机博弈问题进行研究更有意义。
到了九十年代,中国象棋软件开始发展起来了,出现了一些比较著名的象棋软件,如《中国象棋》、《将族Ⅲ》、《象棋水浒战》、《象棋巫师》等,但是当时的象棋软件没有布局库,水平上比较弱。进入21世纪以后,中国象棋人机博弈的研究受到越来越多的关注,并且随着计算机硬件和软件水平的不断提高,象棋软件得到了很大水平上的提升。目前象棋软件比较厉害的是《新天机》、《台风引擎》、《象棋名手》、《新小虫》等,这些象棋软件基本上都有计算能力强,审局比较深入等优点,这也是现在中国象棋计算机博弈的正在进行进一步研究的地方。
本文研究了中国象棋在电脑上的局面表示,走棋过程中走法生成和局面评估、博弈树搜索等一系列的问题。通过visualC++开发平台和MFC文档视图体系结构实现了一个包括人人对战、人机对战、残局保存、读取残局、悔棋、还原等功能模块的中国象棋人机博弈系统。
本系统为象棋爱好者提供了一个平台,满足了玩家对中国象棋的基本需求。
中国象棋发展到唐朝的时候,发生了巨大的变化,由原先的战国时期盛行的文博象棋发展到了有4个兵种,分别是“将、马、车、卒”,刚开始,和国际象棋一样的,中国象棋的棋盘也是由黑白相间的64个方格组成。后又变成和围棋一样的90个网格点。
经过不断的传承和演变至宋代,中国象棋才完全定型。增加了“炮”“象”、“士”这三个兵种。记载于宋代的《事林广记》的象棋棋谱是中国目前所能看到的最早的象棋谱,比西方15世纪出现的国际象棋谱早200多年。推翻了“中国象棋起源于印度”的言论。
班级031221
学号03122014
本科毕业设计论文
题目中国象棋人机博弈系统的设计与实现
学 院计算机学院
专 业网络工程
学生姓名李盼舒
摘要
中国象棋发展至今已经有了几千年的历史,是中华民族灿烂的文化瑰宝,它具有浓厚的趣味性,规则简单明了,在中国已经成为了一项普遍的棋类运动,是其他棋类远远无法比拟的,并且目前,中国象棋正在往国外发展。为了使中国象棋更加具有趣味性,我们在象棋博弈中加入了人机交互,实现了一个中国象棋人机博弈系统,这个系统是将计算机和人工智能结合起来的一种电脑游戏。
1.3论文的主要工作结构和Visual C++开发工具,设计并实现一个中国象棋人机博弈系统。主要的部分是象棋的界面实现部分和博弈引擎部分。界面拥有友好人机交互,主要包括棋盘、菜单、功能按钮,提供一些悔棋、还原或者走法显示之类的功能。引擎部分主要是数据结构、走法生成、局面评估和搜索算法,是程序的核心部分。
第三章系统分析
3.1MFC简介
本文用到的开发工具是Visual C ++ 6.0,简称VC或者VC6. 0,是微软推出的一款C编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C是一个功能强大的可视化软件开发工具。同时我们用到的是Visual C++下的MFC文档视图体系结构,下面我们对MFC做一个简单的介绍。
第二章中国象棋简介
2.1简介
中国象棋历史悠久,起源于山西沁县。战国时期,已经有了关于象棋的正式记载,如:《说苑》载:“雍门子周以琴见孟尝君,说:足下千乘之君也,……燕则斗象棋而舞郑女。”。《楚辞·招魂》中有“蓖蔽象棋,有六簿些;分曹并进,遒相迫些;成枭而牟,北周象戏,呼五白些。”。因此在战国时期,象棋就开始在贵族中流传。
当国际象棋博弈已经发展到一个比较成熟的阶段,对中国象棋博弈的研究才刚刚开始。直到1981年,张耀腾发表了第一篇研究中国象棋人机博弈的文章《人造智慧在电脑象棋上的应用》。他在他的文章中以残局做实验,提出了局面评估函数是静态子力值、棋子机动性、棋子的位置、威胁和保护等之和,但是缺乏对全局的把握。1982廖嘉成发表的《利用计算机象棋的实验》,其中包括对开局、中局和残局的研究。1983年周玉龙、黄少龙一起开发的《象棋排局系列软盘》系统,实现了电脑与人的对弈。这些研究成果为象棋软件的发展奠定了基础。
evaluate function
第一章绪论
1.1选题的背景和意义
近几十年来,随着计算机硬件和软件技术的飞速发展,电脑游戏产业展现出了蓬勃发展的势头,已经变成与音乐、影视等并驾齐驱的娱乐产业。人们也开始对计算机是否可以战胜人脑产生了兴趣。从二十世纪八十年代起,电脑人工智能开始向人类智能提出了挑战,到1997年,IBM研究的超级电脑击败了当时的国际象棋冠军,成为人类人工智能发展史上的重要标志。
2.3走棋规则
在中国象棋中各种棋子的走法是不一样的,都有自己的规则,规则如下:“帅”(将)每一着只许走一步,前进、后退、横走都可以,但不能走出“九宫”。将和帅不准在同一直线上直接对面,如一方已先占据,另一方必须回避。“士”(仕)每一步只可以沿对角线方向移动一点,可进不可退,而且只能在王宫内移动,它是将帅的贴身护卫。“象”(相)不能越过河界,每一招斜走两步,可进不可退,称为“象飞田”。另外,如果在移动的过程中“田”中间有棋子,那么象是不能移动的,称为“塞象眼”。“马”只能先水平或垂直移动一个交叉点,然后再像对角线的方向移动(如果第一步水平移动时,只能往移动方向的对角线移动;如果第一部是垂直移动,则对角线的移动方向不受约束),称为“马走日”。另外,在理想的状况下,马可以随意移动到四周的八个点,故有"八面威风"之说。但是如果在横向或者竖向旁边的交叉点上有别的棋子挡住,马就无法往那个方向移动,称为“蹩马腿”。“车”可以在水平或着垂直方向移动任意个的点,但是不可以跨子移动。一个车可以横向和纵向工控制十七个点,故有“一车十子寒”之说。“炮”移动的方式和车很差不多,但它必需越过一个棋子来吃掉敌方的一个棋子,称为“炮打隔子”。“兵”(卒)在过楚河汉界之前,只能向前面移动一点。但是过了楚河汉界之后,兵除了不允许往后移动之外,它可以往左右移动了,故有“过河的卒子顶半个车”之说。
如何让机器变得智能,可以和人类智力进行竞技,是本文研究的一个重要的问题,通过本文的研究,掌握人工智能的搜索、知识表示、计算,在人工智能领域进行一个深度的探索。
1.2国内外棋类博弈的发展现状
人类对于机器棋类博弈的研究最早是开始于国际象棋,美国数学家香农通过几十年的研究,找到了编写国际象棋程序的方法,他提出了通过一个函数评估局面的优劣,函数主要考虑一般棋手会考虑到的一些问题,例如:棋子的棋力、棋子在棋盘上的位置、棋子间的相互制约和棋子的机动性等等。香农是国际象棋博弈理论的先驱。
关键词:中国象棋人工智能博弈树搜索算法估值函数
ABSTRACT
Chinese chess is a gorgeous cultural treasure of Chinese nation with thousands of years history. It has a keen interest and simple rules which has been a popular chess game in china that can’t be matched by any other kinds of chess. What’s more, nowadays, Chinese chess is rapid development in foreign countries. In order to advancing the interest of Chinese chess, we add human-computer interaction into chess-playing system, making a human-computer interaction game that is a kind of computer game which has a combination of computer and artificial intelligence.
到了明代,可能为了方便下棋和记忆,才将一方面的“将”改为“帅”,变得和现代中国象棋一样了。
中国象棋是一种两人对抗游戏,比赛方法类似于古代打仗。两军对战,排列两边,有兵、马、车、炮,还有将军和士兵。兵、马、车、炮作为主要的力量,将(帅)只待在军帐中指挥,还有卫兵保护他。棋子在网格的交叉点上移动,将对方的棋子“吃掉”,占领对方的交叉点,或者直接进行移动都算走了一着,直到将对方的“将”或“帅”擒住,分出胜、负、和,完成对局。
This system provides a platform for the Chinese chess enthusiasts. It can meet the basic needs of players towards Chinese chess.
Keywords: Chinese chessartificial intelligence game playing treealgoritjm
“棋盘”是棋子的活动场所,就一方来说,棋面由五条横线和九条直线交叉组成。中间中间有一条空白横道,称为“楚河汉界”,“楚河汉界”将整个棋盘分为两部分,两部分通过河界相连,变成了横十竖九的完整棋盘,拥有九十个交叉点,棋子就摆放在这些交叉点上。“河界”中间不标直线,棋子跨越“河界”,无论是直走横走或斜走均按有线行棋。棋盘上画“米”字形方格的地方,叫做“九宫”,“九宫”是“将帅”的王宫,开局时将就待在王宫的最深处。
首先MFC是一个基础类库,这个库中封装了很多的WinAPI函数,它的类的层次结构如图3.1:
图3.1 MFC类层次结构图
由于C++可以继承类,支持虚函数,和MFC的消息映射机制,程序员可以通过对类的继承和扩展来实现特定的功能。
另一方面MFC也是由各种类构成的一个应用程序框架,在VC++下建立一个新的MFC工程的话,Microsoft Visua C++通过AppWizard自动生成许多的文件,这些文件构成了一个框架,是用户接口的标准实现方法,程序员需要做的就是通过生成的接口在这个轮廓当中加入应用程序要实现的核心内容。程序员可以通过资源编辑器设计用户界面和接口,也可以通过ClassWizard向框架文件中添加代码。同时MFC也可以对工程文件进行封装,简单方便。
2.2棋盘和棋子
中国象棋有三十二个棋子,分为红黑棋子两组,红子十六个、黑子十六个,对弈双方各一组,棋子的兵种是一样的,分为七个兵种:红方分为:帅(一个)、仕(两个)、相(两个)、车(两个)、马(两个)、炮(两个)、兵(四个);黑方分为将(一个)、士(两个)、象(两个)、车(两个)、马(两个)、炮(两个)、卒(四个)。为了区分红黑棋子,方便记忆,有四组兵种的名字是不一样的,其中帅=将、仕=士、相=象、兵=卒,但是它们两两间的作用完全相同。
3.2棋局表示
计算机要下棋首先是要读懂象棋,意思就是要让计算机知道当前棋盘局面(棋盘上棋子的分布情况)。对于计算机来说,它能读懂的就是由数据结构和算法所组成的程序,所以我们首先要考虑的是用什么样的数据结构来记录棋子和棋子在棋盘上的位置,用不同的数据结构来表示棋盘,程序会产生不同时间、空间复杂度。
人类对于人工智能的探索是从棋类开始的,研究人工智能的学者们曾经表示:如果我们要想深入的了解人类智能的核心技术,我们就必须掌握棋类的本质。中国象棋从古代流传至今有了几千年的历史,是一种古老的文化,集人类科学、文化、艺术为一体,有助于开发人的智力,培养人的思维,锻炼人的毅力,使人更具有竞争意识。并且相比较于国际象棋,中国象棋更为复杂,因此对中国象棋人机博弈问题进行研究更有意义。
到了九十年代,中国象棋软件开始发展起来了,出现了一些比较著名的象棋软件,如《中国象棋》、《将族Ⅲ》、《象棋水浒战》、《象棋巫师》等,但是当时的象棋软件没有布局库,水平上比较弱。进入21世纪以后,中国象棋人机博弈的研究受到越来越多的关注,并且随着计算机硬件和软件水平的不断提高,象棋软件得到了很大水平上的提升。目前象棋软件比较厉害的是《新天机》、《台风引擎》、《象棋名手》、《新小虫》等,这些象棋软件基本上都有计算能力强,审局比较深入等优点,这也是现在中国象棋计算机博弈的正在进行进一步研究的地方。
本文研究了中国象棋在电脑上的局面表示,走棋过程中走法生成和局面评估、博弈树搜索等一系列的问题。通过visualC++开发平台和MFC文档视图体系结构实现了一个包括人人对战、人机对战、残局保存、读取残局、悔棋、还原等功能模块的中国象棋人机博弈系统。
本系统为象棋爱好者提供了一个平台,满足了玩家对中国象棋的基本需求。
中国象棋发展到唐朝的时候,发生了巨大的变化,由原先的战国时期盛行的文博象棋发展到了有4个兵种,分别是“将、马、车、卒”,刚开始,和国际象棋一样的,中国象棋的棋盘也是由黑白相间的64个方格组成。后又变成和围棋一样的90个网格点。
经过不断的传承和演变至宋代,中国象棋才完全定型。增加了“炮”“象”、“士”这三个兵种。记载于宋代的《事林广记》的象棋棋谱是中国目前所能看到的最早的象棋谱,比西方15世纪出现的国际象棋谱早200多年。推翻了“中国象棋起源于印度”的言论。
班级031221
学号03122014
本科毕业设计论文
题目中国象棋人机博弈系统的设计与实现
学 院计算机学院
专 业网络工程
学生姓名李盼舒
摘要
中国象棋发展至今已经有了几千年的历史,是中华民族灿烂的文化瑰宝,它具有浓厚的趣味性,规则简单明了,在中国已经成为了一项普遍的棋类运动,是其他棋类远远无法比拟的,并且目前,中国象棋正在往国外发展。为了使中国象棋更加具有趣味性,我们在象棋博弈中加入了人机交互,实现了一个中国象棋人机博弈系统,这个系统是将计算机和人工智能结合起来的一种电脑游戏。
1.3论文的主要工作结构和Visual C++开发工具,设计并实现一个中国象棋人机博弈系统。主要的部分是象棋的界面实现部分和博弈引擎部分。界面拥有友好人机交互,主要包括棋盘、菜单、功能按钮,提供一些悔棋、还原或者走法显示之类的功能。引擎部分主要是数据结构、走法生成、局面评估和搜索算法,是程序的核心部分。
第三章系统分析
3.1MFC简介
本文用到的开发工具是Visual C ++ 6.0,简称VC或者VC6. 0,是微软推出的一款C编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C是一个功能强大的可视化软件开发工具。同时我们用到的是Visual C++下的MFC文档视图体系结构,下面我们对MFC做一个简单的介绍。
第二章中国象棋简介
2.1简介
中国象棋历史悠久,起源于山西沁县。战国时期,已经有了关于象棋的正式记载,如:《说苑》载:“雍门子周以琴见孟尝君,说:足下千乘之君也,……燕则斗象棋而舞郑女。”。《楚辞·招魂》中有“蓖蔽象棋,有六簿些;分曹并进,遒相迫些;成枭而牟,北周象戏,呼五白些。”。因此在战国时期,象棋就开始在贵族中流传。
当国际象棋博弈已经发展到一个比较成熟的阶段,对中国象棋博弈的研究才刚刚开始。直到1981年,张耀腾发表了第一篇研究中国象棋人机博弈的文章《人造智慧在电脑象棋上的应用》。他在他的文章中以残局做实验,提出了局面评估函数是静态子力值、棋子机动性、棋子的位置、威胁和保护等之和,但是缺乏对全局的把握。1982廖嘉成发表的《利用计算机象棋的实验》,其中包括对开局、中局和残局的研究。1983年周玉龙、黄少龙一起开发的《象棋排局系列软盘》系统,实现了电脑与人的对弈。这些研究成果为象棋软件的发展奠定了基础。
evaluate function
第一章绪论
1.1选题的背景和意义
近几十年来,随着计算机硬件和软件技术的飞速发展,电脑游戏产业展现出了蓬勃发展的势头,已经变成与音乐、影视等并驾齐驱的娱乐产业。人们也开始对计算机是否可以战胜人脑产生了兴趣。从二十世纪八十年代起,电脑人工智能开始向人类智能提出了挑战,到1997年,IBM研究的超级电脑击败了当时的国际象棋冠军,成为人类人工智能发展史上的重要标志。
2.3走棋规则
在中国象棋中各种棋子的走法是不一样的,都有自己的规则,规则如下:“帅”(将)每一着只许走一步,前进、后退、横走都可以,但不能走出“九宫”。将和帅不准在同一直线上直接对面,如一方已先占据,另一方必须回避。“士”(仕)每一步只可以沿对角线方向移动一点,可进不可退,而且只能在王宫内移动,它是将帅的贴身护卫。“象”(相)不能越过河界,每一招斜走两步,可进不可退,称为“象飞田”。另外,如果在移动的过程中“田”中间有棋子,那么象是不能移动的,称为“塞象眼”。“马”只能先水平或垂直移动一个交叉点,然后再像对角线的方向移动(如果第一步水平移动时,只能往移动方向的对角线移动;如果第一部是垂直移动,则对角线的移动方向不受约束),称为“马走日”。另外,在理想的状况下,马可以随意移动到四周的八个点,故有"八面威风"之说。但是如果在横向或者竖向旁边的交叉点上有别的棋子挡住,马就无法往那个方向移动,称为“蹩马腿”。“车”可以在水平或着垂直方向移动任意个的点,但是不可以跨子移动。一个车可以横向和纵向工控制十七个点,故有“一车十子寒”之说。“炮”移动的方式和车很差不多,但它必需越过一个棋子来吃掉敌方的一个棋子,称为“炮打隔子”。“兵”(卒)在过楚河汉界之前,只能向前面移动一点。但是过了楚河汉界之后,兵除了不允许往后移动之外,它可以往左右移动了,故有“过河的卒子顶半个车”之说。
如何让机器变得智能,可以和人类智力进行竞技,是本文研究的一个重要的问题,通过本文的研究,掌握人工智能的搜索、知识表示、计算,在人工智能领域进行一个深度的探索。
1.2国内外棋类博弈的发展现状
人类对于机器棋类博弈的研究最早是开始于国际象棋,美国数学家香农通过几十年的研究,找到了编写国际象棋程序的方法,他提出了通过一个函数评估局面的优劣,函数主要考虑一般棋手会考虑到的一些问题,例如:棋子的棋力、棋子在棋盘上的位置、棋子间的相互制约和棋子的机动性等等。香农是国际象棋博弈理论的先驱。
关键词:中国象棋人工智能博弈树搜索算法估值函数
ABSTRACT
Chinese chess is a gorgeous cultural treasure of Chinese nation with thousands of years history. It has a keen interest and simple rules which has been a popular chess game in china that can’t be matched by any other kinds of chess. What’s more, nowadays, Chinese chess is rapid development in foreign countries. In order to advancing the interest of Chinese chess, we add human-computer interaction into chess-playing system, making a human-computer interaction game that is a kind of computer game which has a combination of computer and artificial intelligence.
到了明代,可能为了方便下棋和记忆,才将一方面的“将”改为“帅”,变得和现代中国象棋一样了。
中国象棋是一种两人对抗游戏,比赛方法类似于古代打仗。两军对战,排列两边,有兵、马、车、炮,还有将军和士兵。兵、马、车、炮作为主要的力量,将(帅)只待在军帐中指挥,还有卫兵保护他。棋子在网格的交叉点上移动,将对方的棋子“吃掉”,占领对方的交叉点,或者直接进行移动都算走了一着,直到将对方的“将”或“帅”擒住,分出胜、负、和,完成对局。
This system provides a platform for the Chinese chess enthusiasts. It can meet the basic needs of players towards Chinese chess.
Keywords: Chinese chessartificial intelligence game playing treealgoritjm