搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
C/C++中国象棋程序入门与提高
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787121085758
  • 作      者:
    蒋鹏, 雷贻祥, 陈园园著
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2009
收藏
编辑推荐
  本套丛书对编程语言、语法等基础知识讲得很少,重点在对语言的运用能力上。让读者看完书后,有一种“豁然开朗”的感觉,不只是简单地理解一种语言的语法,而是对一种技术的全面认识,并知道如何进行灵活运用。本书的目的主要是提升读者项目编程的知识,展现代码编写中的技巧与经验,让读者能更便捷地获取知识、积累经验,这也是本丛书的重要特色之一。
展开
内容介绍
  《C/C++中国象棋程序入门与提高》由浅入深地介绍了中国象棋博弈程序的各个基本知识点,以实际案例来促进读者对算法的理解,提高实际编程能力。主要内容包括:中国象棋博弈,局面表示,走法表示及生成走法,局面评估,基本搜索算法,人机博弈,机器对弈,置换表,算法分析及测试技术,时间控制策略,启发式搜索策略,更多搜索策略。
  《C/C++中国象棋程序入门与提高》适用于在校计算机专业本科学生及研究生,以及程序设计、算法、博弈和人工智能的爱好者及专业人士。
展开
精彩书摘
  第2章  中国象棋博弈
  中国象棋是一种具有悠久历史的棋类,早在2000多年前的战国时代就已经有了关于象棋的记载。如:《楚辞·招魂》中有“蓖蔽象棋,有六簿些:分曹并进,道相迫些;成枭而牟,呼五白些。”。经过历代的发展演绎,到北宋末定型为现代的中国象棋。元明清时期,象棋继续在民间流行,技术水平不断得以提高,出现了多部总结性理论专著,其中最为重要的有《梦入神机》、《金鹏十八变》、《桔中秘》、《适情雅趣》、《梅花谱》、《竹香斋象棋谱》等。
  中国象棋协会成立于1962年,40多年来,由于群众性棋类活动和比赛的推动,象棋棋艺水平提高得很快,优秀棋手不断涌现,其中以杨官磷、胡荣华、柳大华、赵国荣、吕钦、许银川等最为著名。
  本书主要内容
  简单介绍中国象棋。
  中国象棋博弈程序组成。
  2.1 中国象棋简介
  2.1.1 棋盘与棋子
  象棋棋盘由九条竖线和十条横线交叉组成。棋盘上共有九十个交叉点,象棋子就摆在和活动在这些交叉点上。棋盘中间没有画通直线的地方,叫做“河界”;画有斜交叉线的地方,叫做“九宫”。
展开
目录
第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  position 169
8.2.2  banmoves 170
8.2.3  go 170
8.2.4  bestmove 170
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
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证