商家名称 |
信用等级 |
购买信息 |
订购本书 |
|
|
C/C++中国象棋程序入门与提高 |
|
|
|
C/C++中国象棋程序入门与提高 |
|
基本信息·出版社:电子工业出版社
·页码:333 页
·出版日期:2009年05月
·ISBN:7121085755/9787121085758
·条形码:9787121085758
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:代码的力量
内容简介 《C/C++中国象棋程序入门与提高》由浅入深地介绍了中国象棋博弈程序的各个基本知识点,以实际案例来促进读者对算法的理解,提高实际编程能力。主要内容包括:中国象棋博弈,局面表示,走法表示及生成走法,局面评估,基本搜索算法,人机博弈,机器对弈,置换表,算法分析及测试技术,时间控制策略,启发式搜索策略,更多搜索策略。
《C/C++中国象棋程序入门与提高》适用于在校计算机专业本科学生及研究生,以及程序设计、算法、博弈和人工智能的爱好者及专业人士。
编辑推荐 《C/C++中国象棋程序入门与提高》由电子工业出版社出版。
目录 第1章 绪论1
1.1 机器博弈1
1.1.1 Tic-Tac-Toe游戏2
1.1.2 国际象棋机器博弈4
1.1.3 机器博弈发展趋势5
1.2 中国象棋程序6
1.2.1 中国象棋博弈程序组成6
1.2.2 中国象棋程序研究现状6
1.2.3 全国计算机博弈锦标赛7
1.3 C/C++基础知识8
1.3.1 结构体8
1.3.2 联合体10
1.3.3 枚举11
1.3.4 指针11
1.3.5 面向对象程序设计11
1.4 数据结构基础知识12
1.4.1 线性表13
1.4.2 栈和队列14
1.4.3 树14
1.4.4 查找15
1.4.5 排序15
1.5 算法分析基础知识16
1.5.1 算法描述16
1.5.2 算法时间复杂度分析18
第2章 中国象棋博弈21
2.1 中国象棋简介21
2.1.1 棋盘与棋子21
2.1.2 走棋和吃子22
2.1.3 将死和困毙22
2.1.4 胜、负、和22
2.2 中国象棋博弈程序23
2.2.1 局面表示24
2.2.2 走法生成25
2.2.3 搜索算法25
2.2.4 局面评估26
第3章 局面表示29
3.1 简单的表示方法29
3.2 扩展数组表示31
3.2.1 棋盘表示31
3.2.2 棋子表示32
3.2.3 二维数组与一维数组34
3.3 字符串表示局面34
3.3.1 棋子表示35
3.3.2 棋盘表示35
3.3.3 走方表示36
3.3.4 走棋步数36
3.4 不同表示方法的转换36
3.4.1 一维数组转换成FEN串37
3.4.2 FEN串转换成一维数组40
第4章 走法表示及生成走法45
4.1 走法表示45
4.2 车炮马象(相)士(仕)卒(兵)将(帅)走法生成46
4.2.1 马的走法生成46
4.2.2 将(帅)的走法生成49
4.2.3 士(仕)的走法生成50
4.2.4 象(相)的走法生成52
4.2.5 车的走法生成54
4.2.6 炮的走法生成56
4.2.7 卒(兵)的走法生成58
4.3 产生一个局面的全部走法61
4.4 简化合理位置数组63
4.5 棋子数组67
4.6 将军检测72
4.7 如何更快地生成走法79
4.7.1 事先生成法79
4.7.2 位行位列80
第5章 局面评估83
5.1 简单的局面评估算法83
5.2 带棋子数组的评估86
5.3 新的价值数组87
5.4 位置分值88
5.5 灵活性分值94
5.6 更为复杂的局面评估98
5.7 知识与速度99
第6章 基本搜索算法101
6.1 搜索树101
6.2 深度优先搜索与广度优先搜索102
6.3 简单的两步搜索104
6.4 极大点与极小点104
6.5 结点的层次106
6.6 极大极小搜索算法106
6.7 局面变换108
6.7.1 用局部变量来保存局面108
6.7.2 用全局变量来保存局面109
6.8 走法栈110
6.9 获取最佳走法111
6.10 完整的搜索过程113
6.11 合并极大点与极小点搜索124
6.12 负极大值搜索125
6.13 极大极小搜索时间分析129
6.14 搜索剪枝133
6.15 Alpha-Beta搜索136
6.16 Alpha-Beta搜索时间分析138
6.17 alpha一直小于beta吗?140
第7章 人机博弈141
7.1 基本知识141
7.1.1 程序流程141
7.1.2 棋局状态142
7.1.3 图形界面开发工具142
7.2 VC++工程143
7.2.1 创建VC++工程143
7.2.2 VC++工程文件145
7.3 棋盘显示147
7.3.1 加载图片147
7.3.2 棋盘显示150
7.4 计算机走棋154
7.4.1 添加类154
7.4.2 添加类的成员156
7.4.3 添加走法结构158
7.5 走法显示158
7.6 棋手走棋160
7.7 时间处理164
7.7.1 计时策略164
7.7.2 WM_TIMER消息165
7.7.3 显示时间166
第8章 机器对弈——博弈引擎167
8.1 UCCI协议167
8.1.1 通信方式167
8.1.2 引擎状态168
8.1.3 指令168
8.1.4 反馈169
8.2 常用指令和反馈169
8.2.1 position169
8.2.2 banmoves170
8.2.3 go170
8.2.4 bestmove170
8.3 管道171
8.3.1 创建管道172
8.3.2 读写管道174
8.4 UCCI棋盘表示177
8.4.1 棋盘的坐标表示177
8.4.2 走法转换178
8.5 博弈引擎179
8.5.1 引擎程序运行方式179
8.5.2 通信处理179
8.5.3 协议处理183
8.5.4 工作流程183
8.6 界面程序186
8.6.1 功能描述186
8.6.2 加载引擎187
8.6.3 卸载引擎189
8.6.4 常用功能189
第9章 置换表193
9.1 置换表194
9.2 哈希表194
9.2.1 存储194
9.2.2 查找195
9.2.3 冲突195
9.2.4 冲突处理方法195
9.2.5 影响哈希表效率的因素196
9.3 Zobrist键值197
9.4 哈希函数198
9.5 结合置换表的Alpha-Beta搜索200
9.6 结点深度205
9.7 Alpha结点和beta结点208
9.8 最佳走法214
9.9 获胜局面219
9.10 超出边界的Alpha-Beta搜索225
9.11 哈希表的冲突处理策略230
9.12 清空哈希表232
第10章 算法分析及测试技术233
10.1 测试内容233
10.2 测试用例设计234
10.2.1 开局234
10.2.2 中局235
10.2.3 残局236
10.3 测试代码237
10.3.1 负极大值搜索237
10.3.2 Alpha-Beta搜索241
10.3.3 结合置换表的Alpha-Beta搜索245
10.4 测试结果分析253
10.4.1 死亡结点253
10.4.2 置换表的不稳定性256
10.4.3 三种算法对照分析256
第11章 时间控制策略259
11.1 带时限的搜索算法259
11.2 平均时间分配260
11.3 迭代深化(Iterative Deepening)263
11.3.1 限定时间内究竟能搜索多深263
11.3.2 迭代深化265
11.3.3 迭代深化时间分析267
11.4 动态时间分配267
11.5 结合置换表的限时搜索269
第12章 启发式搜索策略273
12.1 杀手启发(Killer Heuristic)273
12.2 历史表启发(History Heuristic)274
12.3 走法排序275
12.3.1 吃子走法和不吃子走法275
12.3.2 新的走法数组287
12.3.3 吃子走法价值292
12.3.4 不吃子走法的价值298
12.3.5 走法排序299
12.4 克服水平线效应301
12.5 空着306
12.6 开局库307
12.6.1 开局库文件307
12.6.2 开局库在内存中的存储308
12.6.3 读取开局库文件308
12.6.4 获取开局库走法312
12.6.5 修改相关函数314
12.7 残局库322
第13章 更多搜索策略323
13.1 PVS主要变例搜索323
13.2 MTD(f)算法326
13.3 后台思考332
13.4 最小树332
13.5 你的策略333
13.6 博弈程序的智能水平333
参考文献334
……
序言 程序设计是计算机专业的必修课,从C到C++,再到可视化程序设计VC++。C/C++是大学计算机专业的基础语言课,不少程序员都是从C走上他们的程序设计之路的。大学课程主要从语法的角度讲解C/C++。具体是C讲述基础的语言设计方法,C++主要讲述面向对象程序设计方法,VC++则讲述基本的可视化程序设计的知识。太多的语法基础占据了语言课的大部分时间,学生学习后基本只能应付课后习题,要提高程序设计能力还有很长的路要走。学生一路走来,到毕业时很多人竟不能独立编写一个像样的程序。
数据结构,算法分析与设计则是计算机专业的主要课程,可许多学生学习之后竟然觉得数据结构无用。理论教学与实践的脱离使得学生只追求盲目的60分。很多计算机专业学生毕业之后没有独立程序设计的能力,无法从事计算机相关行业。
案例教学成为近年比较流行的教学模式。它将课本理论与实际项目开发结合在一起,提高了学生的动手能力和实践经验。实践证明,编写一个带有实际意义的项目是提高编程能力最高效的方法。如果能有一个项目将C、C++、VC++、数据结构、算法分析与设计结合在一起,提高学生的基础程序设计能力,同时又能掌握数据结构与算法的高级应用,必然为以后从事软件开发打下良好的基础。中国象棋程序就是这样一个项目,它综合了C、C++、VC++、数据结构、算法分析与设计等知识。象棋作为竞技体育同时又作为一个游戏,具有一定的趣味性。学生通过自己亲身参与游戏程序的编写可以提高学习的积极性。
中国象棋程序主要由局面表示、走法表示及生成、局面评估、搜索算法、界面控制等五大部分组成。
局面就是一盘棋经过若干回合之后当前所处的形势,包括棋盘、红黑双方所剩棋子及其在棋盘上的分布、当前该走棋一方、双方所剩时间、双方所剩走棋步数等内容。局面表示是象棋程序的基础,局面表示的好坏直接关系到走法生成、局面评估和搜索算法的效率,从而影响象棋程序得到的最佳走法。
象棋程序每一次思考的目的是获取一个最佳走法(至少在程序看来是最佳的)。要实现这一目的的简单方法就是生成全部所有可能的走法,然后再一个一个的比较,找出最佳的一个。实际上程序也是这样做的。
文摘 插图:
第2章中国象棋博弈
中国象棋是一种具有悠久历史的棋类,早在2000多年前的战国时代就已经有了关于象棋的记载。如:《楚辞·招魂》中有“蓖蔽象棋,有六簿些:分曹并进,道相迫些;成枭而牟,呼五白些。”。经过历代的发展演绎,到北宋末定型为现代的中国象棋。元明清时期,象棋继续在民间流行,技术水平不断得以提高,出现了多部总结性理论专著,其中最为重要的有《梦入神机》、《金鹏十八变》、《桔中秘》、《适情雅趣》、《梅花谱》、《竹香斋象棋谱》等。
中国象棋协会成立于1962年,40多年来,由于群众性棋类活动和比赛的推动,象棋棋艺水平提高得很快,优秀棋手不断涌现,其中以杨官磷、胡荣华、柳大华、赵国荣、吕钦、许银川等最为著名。
本书主要内容
简单介绍中国象棋。
中国象棋博弈程序组成。
2.1中国象棋简介
2.1.1棋盘与棋子
象棋棋盘由九条竖线和十条横线交叉组成。棋盘上共有九十个交叉点,象棋子就摆在和活动在这些交叉点上。棋盘中间没有画通直线的地方,叫做“河界”;画有斜交叉线的地方,叫做“九宫”。