Rust游戲開發實戰 Hands-On Rust: Effective Learning Through 2D Game Development and Play

[美]赫伯特·沃爾弗森(Herbert Wolverson) 譯 米明恆

  • Rust游戲開發實戰-preview-1
  • Rust游戲開發實戰-preview-2
Rust游戲開發實戰-preview-1

買這商品的人也買了...

相關主題

商品描述

本書主要介紹基於Rust語言開發游戲的方法,還介紹了適用於Unity、Unreal等游戲引擎的技巧。

本書先設置開發環境,然後引導讀者製作自己的Flappy Bird,借實例講解Rust語言的基礎知識。全書引導讀者逐步完成一個《地下城爬行者》(Dungeon Crawler)游戲項目,通過實戰幫助讀者掌握Rust的相關知識,掌握用Bevy開發游戲的方法,以及在不影響程序調試的情況下運行游戲系統,對所開發的游戲進行優化。

本書適合所有對Rust語言感興趣的讀者閱讀,也適合從事游戲開發的讀者參考。

作者簡介

赫伯特·沃尔弗森(Herbert Wolverson)是一名非常有经验的程序员,主要从事游戏开发工作。他在游戏开发社区非常活跃,为多个开源项目做过贡献。

目錄大綱

第 一部分 初識Rust

第 1章 Rust及其開發環境 2

1.1 安裝Rust 2

1.1.1 在Microsoft Windows上安裝Rust 3

1.1.2 在其他操作系統上 安裝Rust 3

1.1.3 完成安裝 3

1.1.4 驗證安裝是否成功 4

1.1.5 測試Rust能否正常使用 5

1.1.6 版本更新 5

1.2 安裝並配置開發環境 6

1.3 用Cargo管理項目 7

1.3.1 為代碼選擇一個主目錄 7

1.3.2 用Cargo來開啟一個新項目 7

1.3.3 運行Hello,World 8

1.3.4 與版本控制系統的集成 8

1.4 創建第 一個Rust程序 9

1.4.1 Cargo的元數據 9

1.4.2 Hello,World程序 10

1.5 用Cargo來構建、檢查並運行項目 11

1.6 修正代碼格式 12

1.7 用Clippy來發現常見錯誤 13

1.8 用Cargo進行包管理 15

1.9 小結 16

第 2章 Rust的第 一步 17

2.1 創建一個新的項目 17

2.2 捕捉用戶輸入 17

2.2.1 提示訪客輸入姓名 18

2.2.2 用變量存儲姓名 18

2.2.3 接收鍵盤輸入 19

2.2.4 讀取用戶輸入 20

2.2.5 用占位符實現格式化打印 21

2.2.6 完整的問候程序 21

2.3 將輸入處理邏輯移入函數 22

2.4 修剪輸入數據 23

2.5 在數組中存儲字符串 24

2.5.1 聲明一個數組 25

2.5.2 在數組中查找元素 26

2.6 用結構體來組織數據 27

2.7 用向量來存儲數量可變的數據 32

2.7.1 派生調試信息 32

2.7.2 用向量代替數組 33

2.7.3 用break跳出循環 34

2.7.4 為向量添加新元素 34

2.8 用枚舉體來實現分類 36

2.8.1 枚舉體 36

2.8.2 使用枚舉類型和整數類型的數據成員 37

2.8.3 將枚舉類型賦值給變量 38

2.8.4 枚舉體的匹配 38

2.9 小結 41

第3章 構建第 一個Rust游戲 42

3.1 理解游戲循環 42

3.1.1 什麽是bracket-lib以及bracket-terminal 44

3.1.2 創建一個使用bracket-lib的新項目 45

3.1.3 Hello,bracket Terminal 46

3.1.4 存儲狀態 46

3.1.5 Codepage 437: 由IBM擴展的ASCII字符集 50

3.2 創建不同的游戲模態 50

3.2.1 根據當前模態做出反應 51

3.2.2 play()函數的樁形式 52

3.2.3 主菜單 52

3.2.4 游戲結束菜單 54

3.2.5 完整的游戲控制流 54

3.3 添加游戲角色 55

3.3.1 渲染游戲角色 56

3.3.2 墜向不可避免的死亡 56

3.3.3 扇動翅膀 57

3.3.4 實例化玩家 57

3.3.5 常量 58

3.3.6 完善游戲程序的play()函數 59

3.3.7 扇動翅膀 60

3.4 創建障礙物並實現計分邏輯 60

3.4.1 渲染障礙物 61

3.4.2 一頭撞到牆上 62

3.4.3 記錄得分和障礙物的狀態 63

3.4.4 在play()函數中加入障礙物和計分邏輯 64

3.4.5 將得分顯示在游戲結束畫面上 64

3.4.6 在重玩游戲時重置得分和障礙物 65

3.4.7 Flappy Dragon游戲效果 65

3.5 小結 65

第二部分 開發地下城探險類游戲

第4章 設計地下城探險類游戲 68

4.1 設計文檔必備的幾個段落標題 68

4.1.1 為游戲命名 68

4.1.2 游戲的簡要介紹 68

4.1.3 游戲劇情 69

4.1.4 基本的游戲流程 69

4.1.5 最簡可行產品 69

4.1.6 延展目標 70

4.2 小結 70

第5章 編寫地下城探險類游戲 72

5.1 將代碼劃分為模塊 72

5.1.1 crate與模塊 72

5.1.2 新建一個空的地圖模塊 73

5.1.3 模塊的作用域 74

5.2 用prelude模塊來管理導入項 74

5.3 存儲地下城地圖 76

5.3.1 圖塊在程序中的表示方法 77

5.3.2 創建一個空地圖 77

5.3.3 為地圖建立索引 78

5.3.4 渲染地圖 79

5.3.5 使用地圖模塊的API 80

5.4 加入探險家 81

5.4.1 擴展地圖的API接口 81

5.4.2 創建玩家角色的數據結構 82

5.4.3 渲染玩家角色 83

5.4.4 移動玩家角色 83

5.4.5 使用玩家模塊的API 84

5.5 創建地下城 85

5.5.1 編寫地圖生成器模塊 86

5.5.2 用石牆把地圖填滿 87

5.5.3 開鑿房間 87

5.5.4 開鑿走廊 88

5.5.5 建造地圖並放置玩家角色 91

5.5.6 使用MapBuilder組件的API 91

5.6 Graphics,Camera,Action 92

5.6.1 地下城所使用的

Programmer Art 92

5.6.2 圖層 94

5.6.3 製作攝像機 95

5.6.4 用攝像機來渲染地圖 97

5.6.5 將玩家角色關聯到

攝像機 98

5.6.6 清理圖層,並關聯函數和攝像機 98

5.7 小結 99

第6章 創建地下城居民 100

6.1 名詞解釋 100

6.2 用組件編排出實體 101

6.3 安裝並使用Legion 102

6.3.1 將Legion添加到prelude中 103

6.3.2 刪除一些老代碼 103

6.3.3 創造游戲世界 104

6.4 編排出玩家角色 105

6.5 使用系統來實現復雜的邏輯 107

6.5.1 多個文件組成的模塊 108

6.5.2 理解什麽是查詢 109

6.5.3 將處理玩家輸入作為一個系統 111

6.5.4 批量渲染 114

6.5.5 地圖渲染系統 115

6.5.6 實體渲染系統 116

6.6 添加怪獸 119

6.7 碰撞檢測 121

6.8 小結 123

第7章 與怪獸交替前行 124

7.1 讓怪獸隨機游走 124

7.2 在回合制的游戲中移動Entity 127

7.2.1 存儲回合狀態 127

7.2.2 輪番上陣 128

7.2.3 拆分調度器 129

7.2.4 結束玩家的回合 131

7.3 發送意圖消息 133

7.3.1 實體還可以當作消息來

使用 133

7.3.2 接收消息並進行移動 133

7.3.3 簡化玩家輸入處理邏輯 135

7.3.4 怪獸的移動消息 137

7.4 小結 137

第8章 生命值和近身戰鬥 138

8.1 為實體賦予生命值 138

8.2 添加平視顯示系統 139

8.2.1 添加另一個渲染圖層 139

8.2.2 渲染平視顯示區 141

8.2.3 為怪獸添加名字 143

8.2.4 為怪獸添加名稱和生命值 143

8.2.5 用懸浮提示來區分怪獸 145

8.2.6 註冊各個系統 147

8.3 實現戰鬥功能 148

8.3.1 刪除碰撞檢測系統 148

8.3.2 表示攻擊意圖 148

8.3.3 玩家主動攻擊 149

8.3.4 創建戰鬥系統 151

8.3.5 怪獸的反擊 153

8.3.6 運行各個系統 154

8.4 將等待作為一種策略 155

8.5 小結 157

第9章 勝與負 158

9.1 創造更聰明的怪獸 158

9.1.1 標記新的行為 159

9.1.2 通過trait來支持尋路 160

9.1.3 映射地圖 160

9.1.4 在地圖中導航 161

9.1.5 具備熱成像追蹤能力的怪獸 164

9.1.6 定位玩家角色 165

9.1.7 迪傑斯特拉圖 165

9.1.8 追殺玩家角色 167

9.1.9 縮減玩家角色的生命值 169

9.2 實現游戲結束畫面 170

9.2.1 增加表示游戲結束的回合狀態 170

9.2.2 檢測游戲何時結束 171

9.2.3 顯示游戲結束畫面 172

9.3 尋找亞拉的護身符 173

9.3.1 構建護身符 173

9.3.2 安放護身符 174

9.3.3 判斷玩家是否勝利 177

9.3.4 恭賀玩家取得勝利 178

9.4 小結 181

第 10章 視場 182

10.1 定義實體的視場 182

10.1.1 圖塊的透明度 183

10.1.2 用HashSet來整理數據 183

10.1.3 用組件來存儲可見圖塊的集合 184

10.1.4 計算視場 187

10.1.5 渲染視場 189

10.1.6 隱藏實體 191

10.1.7 更新視場 192

10.2 限制怪獸的視場 193

10.3 添加空間記憶 195

10.3.1 逐步揭示地圖 195

10.3.2 更新地圖 196

10.3.3 渲染記憶中的地圖 196

10.3.4 視場的其他用途 198

10.4 小結 199

第 11章 更具可玩性的地下城 200

11.1 創建trait 200

11.1.1 拆分地圖建造器 201

11.1.2 用MapBuilder來提供地圖 建造服務 201

11.1.3 定義代表架構的trait 202

11.1.4 用參考實現來測試 trait 203

11.1.5 調用空地圖的架構 205

11.1.6 修改房間生成器 206

11.2 用元胞自動機算法來創建地圖 207

11.2.1 元胞自動機理論 207

11.2.2 實現元胞自動機 208

11.2.3 生成一些隨機噪聲 209

11.2.4 計算鄰居的數量 209

11.2.5 用迭代消除混亂 210

11.2.6 放置玩家角色 211

11.2.7 在沒有房間的情況下生成怪獸 213

11.2.8 建造地圖 214

11.2.9 調用基於元胞自動機的地圖架構 214

11.3 用Drunkard’s Walk算法來創建地圖 215

11.3.1 編寫初始代碼 216

11.3.2 用喝醉的礦工開鑿洞穴 216

11.3.3 評估地圖建造的完成度 217

11.3.4 一直挖到地圖生成完畢 218

11.3.5 激活新的地圖類型 220

11.3.6 隨機挑選架構 220

11.4 在地圖中使用預制區域 221

11.4.1 手工打造的地下城 221

11.4.2 放置金庫 222

11.5 小結 226

第 12章 地圖的主題風格 227

12.1 為地下城引入主題風格 227

12.1.1 用trait實現地下城主題風格 228

12.1.2 創建一片森林 229

12.2 使用主題風格進行渲染 230

12.2.1 挑選一個主題風格 231

12.2.2 使用選中的主題風格 232

12.2.3 根據主題風格來渲染地圖 233

12.3 釋放想象力 235

12.4 小結 235

第 13章 背包和道具 236

13.1 設計物品 236

13.1.1 用組件來描述物品 236

13.1.2 生成藥水和地圖 237

13.2 管理背包 239

13.2.1 撿起物品 240

13.2.2 顯示背包物品 241

13.2.3 發送物品激活消息 243

13.2.4 激活物品 245

13.2.5 應用治療特效 245

13.2.6 迭代物品並應用效果 246

13.2.7 處理療傷事件 247

13.2.8 添加到調度器 248

13.2.9 去掉通過休息恢復生命值 249

13.3 小結 250

第 14章 更深的地下城 251

14.1 為地圖添加樓梯 251

14.1.1 生成並渲染樓梯 251

14.1.2 更新地下城的行走邏輯 252

14.1.3 生成樓梯並替代護身符 253

14.2 追蹤游戲關卡 255

14.2.1 關卡切換狀態 256

14.2.2 切換關卡 257

14.2.3 找到玩家角色 258

14.2.4 標記需要保留的實體 258

14.2.5 刪除其餘的實體 259

14.2.6 將視場設置為臟 259

14.2.7 創建新地圖 260

14.2.8 將玩家角色放置在新地圖中 260

14.2.9 創建亞拉的護身符或者樓梯 260

14.3 在平視顯示區中顯示當前關卡 261

14.4 小結 262

第 15章 戰鬥系統和戰利品 263

15.1 設計數據驅動的地下城 263

15.1.1 讀取地下城的數據 265

15.1.2 擴展Spawner模塊 266

15.1.3 映射並加載模板 266

15.1.4 用數據驅動的方式生成實體 268

15.1.5 新春大掃除 272

15.2 擴展戰鬥系統 274

15.2.1 由武器和爪子造成的傷害 274

15.2.2 傷害值組件 276

 

 

15.2.3 產生一些傷害 277

15.2.4 探險家不是八爪魚 278

15.3 添加更多寶劍 279

15.4 小結 280

第 16章 最後的步驟和潤色 281

16.1 打包游戲以進行分發 281

16.1.1 開啟發布模式和鏈接時

優化 281

16.1.2 分發游戲 282

16.2 開發屬於自己的地下城探險類游戲 283

16.3 更多內容 283

16.4 小結 284

第三部分 其他資源

附錄A ASCII/Codepage 437對照表 286

附錄B 簡短的游戲設計文檔 287

附錄C Rust語法速查表 294