代码的力量:C/C++中国象棋程序入门与提高

代码的力量:C/C++中国象棋程序入门与提高
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2009-05
版次: 1
ISBN: 9787121085758
定价: 35.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 333页
字数: 550千字
正文语种: 简体中文
28人买过
  •   《C/C++中国象棋程序入门与提高》由浅入深地介绍了中国象棋博弈程序的各个基本知识点,以实际案例来促进读者对算法的理解,提高实际编程能力。主要内容包括:中国象棋博弈,局面表示,走法表示及生成走法,局面评估,基本搜索算法,人机博弈,机器对弈,置换表,算法分析及测试技术,时间控制策略,启发式搜索策略,更多搜索策略。
      《C/C++中国象棋程序入门与提高》适用于在校计算机专业本科学生及研究生,以及程序设计、算法、博弈和人工智能的爱好者及专业人士。 第1章绪论 1
    1.1机器博弈 1
    1.1.1Tic-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.3C/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.2FEN串转换成一维数组 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.15Alpha-Beta搜索 136
    6.16Alpha-Beta搜索时间分析 138
    6.17alpha一直小于beta吗? 140

    第7章人机博弈 141
    7.1基本知识 141
    7.1.1程序流程 141
    7.1.2棋局状态 142
    7.1.3图形界面开发工具 142
    7.2VC++工程 143
    7.2.1创建VC++工程 143
    7.2.2VC++工程文件 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.2WM_TIMER消息 165
    7.7.3显示时间 166

    第8章机器对弈——博弈引擎 167
    8.1UCCI协议 167
    8.1.1通信方式 167
    8.1.2引擎状态 168
    8.1.3指令 168
    8.1.4反馈 169
    8.2常用指令和反馈 169
    8.2.1position 169
    8.2.2banmoves 170
    8.2.3go 170
    8.2.4bestmove 170
    8.3管道 171
    8.3.1创建管道 172
    8.3.2读写管道 174
    8.4UCCI棋盘表示 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.3Zobrist键值 197
    9.4哈希函数 198
    9.5结合置换表的Alpha-Beta搜索 200
    9.6结点深度 205
    9.7Alpha结点和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.2Alpha-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迭代深化(IterativeDeepening) 263
    11.3.1限定时间内究竟能搜索多深 263
    11.3.2迭代深化 265
    11.3.3迭代深化时间分析 267
    11.4动态时间分配 267
    11.5结合置换表的限时搜索 269

    第12章启发式搜索策略 273
    12.1杀手启发(KillerHeuristic) 273
    12.2历史表启发(HistoryHeuristic) 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.1PVS主要变例搜索 323
    13.2MTD(f)算法 326
    13.3后台思考 332
    13.4最小树 332
    13.5你的策略 333
    13.6博弈程序的智能水平 333
    参考文献 334
  • 内容简介:
      《C/C++中国象棋程序入门与提高》由浅入深地介绍了中国象棋博弈程序的各个基本知识点,以实际案例来促进读者对算法的理解,提高实际编程能力。主要内容包括:中国象棋博弈,局面表示,走法表示及生成走法,局面评估,基本搜索算法,人机博弈,机器对弈,置换表,算法分析及测试技术,时间控制策略,启发式搜索策略,更多搜索策略。
      《C/C++中国象棋程序入门与提高》适用于在校计算机专业本科学生及研究生,以及程序设计、算法、博弈和人工智能的爱好者及专业人士。
  • 目录:
    第1章绪论 1
    1.1机器博弈 1
    1.1.1Tic-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.3C/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.2FEN串转换成一维数组 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.15Alpha-Beta搜索 136
    6.16Alpha-Beta搜索时间分析 138
    6.17alpha一直小于beta吗? 140

    第7章人机博弈 141
    7.1基本知识 141
    7.1.1程序流程 141
    7.1.2棋局状态 142
    7.1.3图形界面开发工具 142
    7.2VC++工程 143
    7.2.1创建VC++工程 143
    7.2.2VC++工程文件 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.2WM_TIMER消息 165
    7.7.3显示时间 166

    第8章机器对弈——博弈引擎 167
    8.1UCCI协议 167
    8.1.1通信方式 167
    8.1.2引擎状态 168
    8.1.3指令 168
    8.1.4反馈 169
    8.2常用指令和反馈 169
    8.2.1position 169
    8.2.2banmoves 170
    8.2.3go 170
    8.2.4bestmove 170
    8.3管道 171
    8.3.1创建管道 172
    8.3.2读写管道 174
    8.4UCCI棋盘表示 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.3Zobrist键值 197
    9.4哈希函数 198
    9.5结合置换表的Alpha-Beta搜索 200
    9.6结点深度 205
    9.7Alpha结点和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.2Alpha-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迭代深化(IterativeDeepening) 263
    11.3.1限定时间内究竟能搜索多深 263
    11.3.2迭代深化 265
    11.3.3迭代深化时间分析 267
    11.4动态时间分配 267
    11.5结合置换表的限时搜索 269

    第12章启发式搜索策略 273
    12.1杀手启发(KillerHeuristic) 273
    12.2历史表启发(HistoryHeuristic) 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.1PVS主要变例搜索 323
    13.2MTD(f)算法 326
    13.3后台思考 332
    13.4最小树 332
    13.5你的策略 333
    13.6博弈程序的智能水平 333
    参考文献 334
查看详情
相关图书 / 更多
代码的力量:C/C++中国象棋程序入门与提高
代码中的软件工程
孟宁
代码的力量:C/C++中国象棋程序入门与提高
代码整洁之道 英文版
[美]罗伯特·C. 马丁(Robert C. Martin)
代码的力量:C/C++中国象棋程序入门与提高
代码的艺术:用工程思维驱动软件开发(必读经典简装本)
章淼
代码的力量:C/C++中国象棋程序入门与提高
代码审计与实操
胡前伟;时瑞鹏;李华风
代码的力量:C/C++中国象棋程序入门与提高
代码随想录——跟着Carl学算法
孙秀洋
代码的力量:C/C++中国象棋程序入门与提高
代码坏味检测方法研究及重构分析
姜德迅 编
代码的力量:C/C++中国象棋程序入门与提高
代码安全实验指导(网络空间安全重点规划丛书)
杨东晓、章磊、吴迪、司乾伟 著
代码的力量:C/C++中国象棋程序入门与提高
代码的艺术:用工程思维驱动软件开发
章淼
代码的力量:C/C++中国象棋程序入门与提高
代码精进之路 从码农到工匠
张建飞
代码的力量:C/C++中国象棋程序入门与提高
代码大全2(纪念版)
[美]史蒂夫.麦康奈尔(Steve McConnell)著 陈玉毅 陈军 杨志昂 洪佳 徐东伟 王国良 徐毅 译
代码的力量:C/C++中国象棋程序入门与提高
代码整洁之道程序员的职业素养英文版
[美]罗伯特·C.、马丁(Robert、C.、Martin 著
代码的力量:C/C++中国象棋程序入门与提高
代码大全2(英文限量珍藏版)
[美]史蒂夫·麦康奈尔(Steve McConnell) 著