Rust游戲開發實戰 Hands-On Rust: Effective Learning Through 2D Game Development and Play
[美]赫伯特·沃爾弗森(Herbert Wolverson) 譯 米明恆
- 出版商: 人民郵電
- 出版日期: 2024-09-01
- 售價: $599
- 貴賓價: 9.5 折 $569
- 語言: 簡體中文
- 頁數: 298
- 裝訂: 平裝
- ISBN: 711562660X
- ISBN-13: 9787115626608
-
相關分類:
Rust 語言
- 此書翻譯自: Hands-On Rust: Effective Learning Through 2D Game Development and Play (Paperback)
立即出貨 (庫存=1)
買這商品的人也買了...
-
$280$252 -
$480$379 -
$294$279 -
$332架構探險 : 輕量級微服務架構 (上冊)
-
$560$437 -
$301Python 數學編程 (Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More! )
-
$774$735 -
$980$774 -
$420$378 -
$1,200$948 -
$500$390 -
$680$537 -
$407Python 趣味編程案例實戰
-
$422TPM 2.0 安全算法開發示例實戰
-
$680$530 -
$750$593 -
$400$316 -
$580$458 -
$588$559 -
$594$564 -
$599$569 -
$650$507 -
$768$730 -
$680$537 -
$1,000$790
相關主題
商品描述
本書主要介紹基於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