《C/C++中國象棋程式入門與提高》是2009年電子工業出版社出版的棋類圖書,作者是蔣鵬。
基本介紹
- 書名:C/C++中國象棋程式入門與提高
- 作者:蔣鵬等
- ISBN:9787121085758
- 頁數:333
- 定價:35.00元
- 出版社:電子工業出版社
- 出版時間:2009-5
- 裝幀:平裝
- 開本:16開
簡介,套用,目錄,
簡介
《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 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
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