算法超簡單:趣味游戲帶你輕松入門與實踐

童晶

  • 出版商: 人民郵電
  • 出版日期: 2024-08-01
  • 定價: $479
  • 售價: 8.5$407
  • 語言: 簡體中文
  • 頁數: 249
  • ISBN: 7115639612
  • ISBN-13: 9787115639615
  • 下單後立即進貨 (約2週~3週)

  • 算法超簡單:趣味游戲帶你輕松入門與實踐-preview-1
  • 算法超簡單:趣味游戲帶你輕松入門與實踐-preview-2
算法超簡單:趣味游戲帶你輕松入門與實踐-preview-1

商品描述

本書通過趣味游戲編程項目講解算法,提升讀者學習算法的興趣,降低讀者學習算法的難度,增強讀者將算法應用於編程實踐的能力。

本書共 14 章,通過猜數字、飛翔的小鳥、得分排行榜、漢諾塔、八皇後、消滅星星、貪吃蛇、走迷宮、連連看、吃豆人、滑動拼圖、井字棋、壘積木、十步萬度等游戲,講解順序查找算法、二分查找算法,圖形庫 EasyX,插入排序算法、冒泡排序算法、選擇排序算法、快速排序算法,遞歸算法,暴力搜索算法、回溯算法,FloodFill 算法,常見的數據結構(數組、鏈表、隊列、棧、圖、樹)、標準模板庫(STL),十字分割算法、圖的廣度優先搜索算法和深度優先搜索算法,加權圖上的迪傑斯特拉算法、貪婪優先搜索算法、A*算法,狀態空間上的搜索算法,博弈樹的極大極小值搜索算法、α-β剪枝搜索算法,動態規劃算法,遺傳算法。

本書適合想要學習基礎算法或練習編程實踐的讀者閱讀,也可作為高等院校數據結構與算法相關課程或編程實踐課程的指導用書。讀者在閱讀本書之前需要具備基礎的C語言編程知識。

作者簡介

童晶,浙江大学计算机专业博士,河海大学副教授、硕士生导师、人工智能系主任。

主要从事计算机图形学、虚拟现实、数字化艺术等方向的研究,发表学术论文超过 30 篇,曾获中国发明协会发明创业奖成果奖一等奖、浙江省自然科学奖二等奖。

积极投身于教学与学生创新工作,指导学生获得“英特尔杯”大学生电子设计竞赛嵌入式系统专题邀请赛全国一等奖、“挑战杯”全国大学生课外学术科技作品竞赛全国三等奖、“中国软件杯”大学生软件设计大赛全国一等奖、中国大学生服务外包创新创业大赛全国一等奖等多个奖项。

具有 18 年的一线教学经验,所开设的课程在校内广受好评,获评河海大学优秀主讲教师。在知乎、哔哩哗哩、中国大学 MOOC 等平台的教学课程已有千万次的阅读与学习记录。

目錄大綱

第 1 章 猜數字..1

1.1 實現猜數字游戲 .. 1

1.2 順序查找 .. 2

1.3 二分查找 .. 7

1.4 算法的效率 .. 12

1.5 小結 .. 13

第 2 章 飛翔的小鳥 ..14

2.1 EasyX 圖形庫 .. 14

2.2 小球的自由落體 .. 17

2.3 按空格鍵讓小球向上飛 .. 18

2.4 游戲程序框架改進 .. 19

2.5 添加水管障礙物 .. 22

2.6 得分的計算與顯示 .. 24

2.7 更多水管障礙物 .. 26

2.8 圖片的使用 .. 27

2.9 小結 .. 33

第 3 章 得分排行榜 .. 34

3.1 插入排序及其可視化 .. 34

3.2 冒泡排序及其可視化 .. 39

3.3 選擇排序及其可視化 .. 42

3.4 快速排序及其可視化 .. 45

3.5 拓展練習:查找算法和更多排序算法的可視化 .. 51

3.6 小結 .. 52

第 4 章 漢諾塔 .. 53

4.1 實現漢諾塔游戲 .. 53

4.1.1 定義柱子結構體與可視化 ..54

4.1.2 通過鼠標點擊選中柱子 ..56

4.1.3 移動盤子 ..58

4.1.4 判斷盤子是否可以移動 ..59

4.1.5 提示信息與勝負判斷 ..60

4.2 遞歸求解漢諾塔問題 .. 61

4.3 漢諾塔自動求解過程的可視化 .. 65

4.4 拓展練習:繪制分形樹 .. 68

4.5 小結 .. 69

第 5 章 八皇後 .. 70

5.1 實現八皇後游戲 .. 70

5.1.1 繪制棋盤和提示信息 ..70

5.1.2 通過鼠標交互繪制皇後棋子 ..72

5.1.3 游戲勝負判斷 ..74

5.2 暴力搜索 .. 76

5.2.1 八重 for 循環輸出八皇後的所有擺法 ..76

5.2.2 暴力搜索求出八皇後的所有擺法 ..77

5.3 回溯 .. 79

5.4 八皇後游戲自動求解過程的可視化 .. 82

5.5 拓展練習:一筆畫游戲、數獨游戲 .. 85

5.6 小結 .. 86

第 6 章 消滅星星 .. 87

6.1 消滅星星游戲基礎版 .. 87

6.1.1 基礎數據結構和畫面顯示 ..87

6.1.2 通過鼠標點擊消除單個方塊 ..90

6.2 基於 FloodFill 算法消除連通的方塊 .. 91

6.3 方塊位置的更新 .. 93

6.3.1 方塊下落 ..93

6.3.2 方塊左移 ..94

6.4 游戲完善 .. 95

6.5 拓展練習:掃雷游戲 .. 96

6.6 小結 .. 98

第 7 章 貪吃蛇 .. 99

7.1 常見數據結構 .. 99

7.1.1 數組 ..99

7.1.2 鏈表 ..100

7.1.3 隊列 ..101

7.1.4 棧 ..102

7.1.5 圖 ..103

7.1.6 樹 ..103

7.2 標準模板庫 .. 104

7.2.1 vector ..104

7.2.2 queue ..107

7.2.3 stack ..109

7.2.4 string ..110

7.2.5 map ..110

7.3 實現貪吃蛇游戲 ..111

7.3.1 數據結構和畫面顯示 ..111

7.3.2 蛇的自動移動 ..114

7.3.3 通過鼠標控制蛇的移動方向 ..114

7.3.4 添加食物和障礙物 ..116

7.3.5 蛇吃食物後的處理 ..117

7.3.6 為蛇添加眼睛 ..119

7.4 拓展練習:飛機大戰 .. 120

7.5 小結 .. 120

第 8 章 走迷宮 .. 121

8.1 實現走迷宮游戲 .. 121

8.1.1 迷宮地圖初始化與顯示 ..121

8.1.2 添加小球 ..124

8.1.3 通過鍵盤控制小球移動 ..125

8.2 基於十字分割算法自動生成迷宮地圖 .. 126

8.3 圖的廣度優先搜索算法 .. 135

8.4 圖的深度優先搜索算法 .. 137

8.5 迷宮游戲自動求解 .. 139

8.6 小結 .. 144

第 9 章 連連看 ..145

9.1 連連看游戲基礎版 .. 145

9.1.1 數據初始化與顯示 ..145

9.1.2 記錄和處理鼠標點擊操作 ..149

9.2 基於廣度優先搜索算法的消除判斷 .. 150

9.2.1 基於廣度優先搜索算法的方格連線和消除 ..150

9.2.2 基於廣度優先搜索算法限制拐彎次數 ..152

9.2.3 游戲勝負的判斷與顯示 ..156

9.3 拓展練習:圍住神經貓 .. 156

9.4 小結 .. 157

第 10 章 吃豆人..158

10.1 吃豆人游戲基礎版 .. 158

10.1.1 地圖的存儲與顯示 ..158

10.1.2 玩家對吃豆人的控制 ..161

10.1.3 圖片切換與動畫效果 ..163

10.1.4 幽靈隨機移動 ..165

10.1.5 勝負判斷 ..166

10.2 迪傑斯特拉算法 .. 167

10.3 貪婪最佳優先搜索算法與 A* 算法 .. 170

10.4 三種算法的實現與對比 .. 173

10.5 幽靈自動追蹤 .. 181

10.6 小結 .. 182

第 11 章 滑動拼圖 ..183

11.1 實現滑動拼圖游戲 .. 183

11.1.1 數據結構和畫面顯示 ..183

11.1.2 生成隨機初始狀態 ..186

11.1.3 鼠標交互與勝利判斷 ..187

11.2 狀態空間上的搜索算法 .. 189

11.3 滑動拼圖游戲的自動求解 .. 191

11.4 拓展練習:農夫過河游戲 .. 194

11.5 小結 .. 195

第 12 章 井字棋..196

12.1 雙人對戰井字棋 .. 196

12.1.1 數據結構和畫面顯示 ..196

12.1.2 通過鼠標交互下棋 ..198

12.1.3 勝負判斷 ..199

12.2 棋局的估值函數 .. 201

12.3 基於博弈樹的極大極小值搜索算法實現人機對戰下棋 .. 205

12.4 基於 α-β 剪枝搜索算法實現人機對戰下棋 .. 208

12.5 拓展練習:人機對戰五子棋 .. 212

12.6 小結 .. 212

第 13 章 壘積木..213

13.1 實現壘積木游戲 .. 213

13.1.1 積木塊的繪制 ..213

13.1.2 積木塊的旋轉 ..216

13.1.3 多個積木與畫面顯示 ..217

13.1.4 壘積木操作 ..219

13.1.5 高度統計與勝負判斷 ..220

13.1.6 游戲完善 ..221

13.2 遞歸回溯求解壘積木問題 .. 222

13.3 動態規劃求解壘積木問題 .. 226

13.4 小結 .. 231

第 14 章 十步萬度..232

14.1 實現十步萬度游戲 .. 232

14.1.1 數據結構與畫面顯示 ..232

14.1.2 鼠標交互與指針旋轉 ..235

14.1.3 旋轉傳播與得分統計 ..236

14.1.4 顯示旋轉過程動畫 ..238

14.2 遺傳算法基礎 .. 239

14.3 基於遺傳算法自動求解十步萬度游戲 .. 241

14.4 小結 .. 249