C++遊戲編程入門(第3版) Beginning C++ Game Programming : Learn C++ from scratch by building fun games, 3/e
[英] 約翰·霍頓(John Horton)著 王誌強 王遠鵬 譯
- 出版商: 清華大學
- 出版日期: 2025-07-01
- 售價: $768
- 語言: 簡體中文
- ISBN: 7302693994
- ISBN-13: 9787302693994
-
相關分類:
遊戲開發設計
- 此書翻譯自: Beginning C++ Game Programming : Learn C++ from scratch by building fun games, 3/e (Paperback)
下單後立即進貨 (約4週~6週)
相關主題
商品描述
"?在VS 2022中搭建屬於自己的遊戲開發環境,並深入探索SFML等C++庫 ?從基礎架構到完整實現,用C++從零構建遊戲,涵蓋圖形渲染、物理模擬與輸入交互等核心模塊 ?掌握遊戲動畫、物理引擎、碰撞檢測、計分系統及音效設計等核心機制的實現方法 ?通過自動生成遊戲對象與基礎AI設計,為玩家打造更具沈浸感的互動體驗 ?深入學習OpenGL著色器、紋理圖集以及視差背景等高級技術,提升遊戲視覺表現力 ?掌握現代遊戲編程設計模式,確保代碼具有可擴展性與復用性,提升開發效率"
作者簡介
John Horton是英國的一位程序及遊戲發燒友。
目錄大綱
目 錄
第1章 歡迎閱讀《C++遊戲編程入門》(第3版) 1
1.1 我們將構建的遊戲 2
1.1.1 Timber!!! 2
1.1.2 Pong 2
1.1.3 Zombie Arena 3
1.1.4 Run 3
1.2 為什麼要學習C++遊戲編程 4
1.2.1 SFML 5
1.2.2 Microsoft Visual Studio 6
1.2.3 在Mac或Linux操作系統下使用本書的方法 7
1.2.4 安裝Visual Studio 2022 7
1.3 搭建SFML環境 8
1.4 新建Visual Studio項目 10
1.5 規劃Timber!!!項目 15
1.6 項目資源 17
1.6.1 定制音效 18
1.6.2 在項目中添加資源 18
1.6.3 瀏覽項目資源 18
1.7 理解屏幕及內部坐標 19
1.8 開始編寫遊戲 21
1.8.1 註釋讓代碼變得更清晰 21
1.8.2 main函數 21
1.8.3 代碼的形式與語法概覽 22
1.8.4 從函數返回一個值 22
1.8.5 運行遊戲 23
1.9 使用SFML啟動一個窗口 23
1.9.1 引入SFML功能 24
1.9.2 OOP、類與對象 24
1.9.3 命名空間與using語句 26
1.9.4 SFML VideoMode類與RenderWindow類 26
1.9.5 運行遊戲 27
1.10 遊戲循環 27
1.10.1 while循環 28
1.10.2 C風格代碼註釋 28
1.10.3 輸入、更新、繪制、重復 29
1.10.4 檢測按鍵動作 29
1.10.5 清空並繪制場景 29
1.10.6 運行遊戲 30
1.11 繪制遊戲背景 30
1.11.1 讓精靈與紋理圖協同工作 30
1.11.2 背景精靈與雙重緩沖區 32
1.11.3 運行遊戲 32
1.12 處理錯誤 33
1.12.1 配置錯誤 33
1.12.2 編譯錯誤 34
1.12.3 鏈接錯誤 34
1.12.4 缺陷 34
1.13 本章小結 34
1.14 常見問題 35
第2章 變量、運算符與決策——讓精靈動起來 37
2.1 系統學習C++變量 37
2.1.1 變量類型 38
2.1.2 聲明並初始化變量 39
2.2 熟悉操作變量的方法 41
2.2.1 C++算術運算符與賦值運算符 42
2.2.2 使用表達式完成工作 43
2.3 添加雲朵、蜜蜂和樹 45
2.3.1 準備樹 46
2.3.2 準備蜜蜂 47
2.3.3 準備雲朵 48
2.3.4 繪制樹、蜜蜂和雲朵 49
2.4 隨機數 50
2.5 用if與else制定決策 51
2.5.1 邏輯運算符 51
2.5.2 C++的if與else 52
2.5.3 如果敵軍過了橋,就開槍 52
2.5.4 else定義了另一種行為 53
2.5.5 一次改錯挑戰 54
2.6 計時功能 55
2.6.1 幀率問題 55
2.6.2 SFML的幀率方案 56
2.7 移動雲朵與蜜蜂 57
2.7.1 為蜜蜂賦予生命 58
2.7.2 吹動雲朵 60
2.8 本章小結 64
2.9 常見問題 64
第3章 C++字符串、SFML時間、玩家輸入與HUD 67
3.1 暫停與重新開始遊戲 67
3.2 C++字符串 69
3.2.1 聲明字符串 69
3.2.2 將值賦給字符串變量 70
3.2.3 連接字符串 70
3.2.4 獲取字符串的長度 71
3.2.5 通過stringstream操作字符串 71
3.2.6 SFML的Text類與Font類 72
3.3 增加分數與提示信息 73
3.4 增加時間棒 77
3.5 本章小結 82
3.6 常見問題 82
第4章 循環、數組、switch、枚舉與函數——實現遊戲機制 83
4.1 循環 83
4.1.1 while循環 84
4.1.2 跳出循環 86
4.1.3 for循環 87
4.2 數組 88
4.2.1 聲明一個數組 89
4.2.2 初始化數組的元素 89
4.2.3 數組對我們遊戲的作用 90
4.3 通過switch制定決策 91
4.4 枚舉類 93
4.5 函數初探 95
4.5.1 函數語法的設計理念 96
4.5.2 函數返回類型 97
4.5.3 函數名 100
4.5.4 函數參數 101
4.5.5 函數體 101
4.5.6 函數原型 102
4.5.7 組織函數 102
4.5.8 函數作用域 103
4.5.9 本章關於函數的結語 103
4.6 長出枝杈 104
4.6.1 準備枝杈 105
4.6.2 在每幀中更新枝杈精靈 105
4.6.3 繪制枝杈 107
4.6.4 移動枝杈 107
4.7 本章小結 109
4.8 常見問題 110
第5章 碰撞、音效及終止條件:讓遊戲能玩起來 111
5.1 準備玩家和其他精靈 111
5.2 繪制玩家和其他精靈 112
5.3 處理玩家輸入 113
5.3.1 開始新遊戲的處理方式 114
5.3.2 檢測玩家砍樹 115
5.3.3 檢測按鍵釋放 118
5.3.4 讓砍下的木料以及斧頭動起來 119
5.4 處理死亡 121
5.5 簡單音效 123
5.5.1 SFML聲音的工作原理 123
5.5.2 何時播放聲音 123
5.5.3 添加音頻代碼 124
5.6 改進遊戲代碼 127
5.7 本章小結 128
5.8 常見問題 129
第6章 面向對象編程—— 開啟Pong遊戲 131
6.1 面向對象編程 131
6.1.1 封裝 132
6.1.2 多態 132
6.1.3 繼承 133
6.1.4 使用OOP的理由 133
6.1.5 類的基本概念 134
6.2 Pong球拍理論 134
6.2.1 聲明類、變量與函數 134
6.2.2 類函數定義 137
6.2.3 使用類的實例 138
6.3 創建Pong項目 139
6.4 編寫Bat類 140
6.4.1 編寫Bat.h 140
6.4.2 構造函數 141
6.4.3 繼續解釋Bat.h 142
6.4.4 編寫Bat.cpp 142
6.5 使用Bat類,並編寫main函數 145
6.6 本章小結 148
6.7 常見問題 149
第7章 AABB碰撞檢測與物理學——完成Pong遊戲 151
7.1 編寫Ball類 151
7.2 使用Ball類 154
7.3 碰撞檢測與計分 155
7.4 運行遊戲 158
7.5 學習C++宇宙飛船運算符 158
7.6 本章小結 159
7.7 常見問題 159
第8章 SFML View類—— 開啟僵屍射手遊戲 161
8.1 規劃並啟動Zombie Arena遊戲 161
8.1.1 創建新項目 163
8.1.2 項目素材 164
8.1.3 探索項目素材 164
8.1.4 向項目添加素材 165
8.2 OOP與Zombie Arena項目 165
8.3 構建玩家類 166
8.3.1 編寫Player類的頭文件 167
8.3.2 編寫Player類函數的定義 170
8.4 通過SFML View類控制遊戲攝像機 178
8.5 啟動Zombie Arena遊戲引擎 179
8.6 管理代碼文件 182
8.7 開始編碼遊戲主循環 184
8.8 本章小結 191
8.9 常見問題 191
第9章 C++引用、精靈表單與頂點數組 193
9.1 理解C++引用 193
9.2 SFML頂點數組及精靈表單 196
9.3 頂點數組的概念 197
9.3.1 利用圖元構建背景圖 198
9.3.2 構建頂點數組 198
9.3.3 使用頂點數組進行繪制 199
9.4 隨機創建可滾動的背景圖 200
9.5 使用背景圖 204
9.6 本章小結 206
9.7 常見問題 206
第10章 指針、標準模板庫與紋理管理初探 209
10.1 學習指針 209
10.1.1 指針語法 210
10.1.2 指針聲明 210
10.1.3 指針初始化 211
10.1.4 指針重新始化 212
10.1.5 指針解引用 212
10.1.6 指針功能多樣且效果強大 213
10.1.7 指針與數組 216
10.1.8 指針總結 216
10.2 學習標準模板庫 217
10.2.1 vector的概念 218
10.2.2 map的概念 219
10.2.3 關鍵字auto 221
10.2.4 STL總結 222
10.3 本章小結 222
10.4 常見問題 222
第11章 編寫TextureHolder類並構建僵屍群 223
11.1 實現TextureHolder類 223
11.1.1 編寫TextureHolder類的頭文件 223
11.1.2 定義TextureHolder成員函數 225
11.1.3 TextureHolder類真正的實現效果 226
11.2 構建僵屍群 226
11.2.1 編寫Zombie.h 226
11.2.2 編寫Zombie.cpp文件 228
11.2.3 使用Zombie類構建僵屍群 232
11.2.4 讓僵屍群活過來(或者復活) 235
11.3 使用TextureHolder類管理所有紋理 239
11.3.1 修改獲取背景紋理的方法 239
11.3.2 修改Player類獲取紋理的方法 239
11.4 本章小結 240
11.5 常見問題 240
第12章 碰撞檢測、拾取包與子彈 241
12.1 編寫代表子彈的Bullet類 241
12.1.1 編寫頭文件Bullet.h 242
12.1.2 編寫Bullet源代碼文件 243
12.1.3 編寫shoot函數 244
12.1.4 Bullet類的更多函數 247
12.1.5 Bullet類的update函數 247
12.2 讓子彈飛起來 248
12.2.1 Bullet類的include指令 248
12.2.2 控制變量和子彈數組 248
12.2.3 為槍械重新裝彈 249
12.2.4 射擊 250
12.2.5 在每幀畫面中更新子彈 251
12.2.6 在每幀畫面中繪制子彈 252
12.2.7 為玩家提供準星 253
12.3 編寫拾取包類 255
12.3.1 編寫頭文件Pickup.h 256
12.3.2 編寫Pickup類各成員函數的定義 258
12.4 使用Pickup類 262
12.5 碰撞檢測 264
12.5.1 僵屍與子彈之間的碰撞檢測 265
12.5.2 玩家與僵屍的碰撞檢測 267
12.5.3 玩家與拾取包的碰撞檢測 268
12.6 本章小結 269
12.7 常見問題 269
第13章 借助分層視圖實現HUD 271
13.1 添加所有Text對象與HUD對象 271
13.2 更新HUD 274
13.3 繪制HUD、主屏幕與升級屏幕 275
13.4 本章小結 279
第14章 音效、文件I/O操作與完成遊戲 281
14.1 保存並載入高分紀錄 281
14.2 準備音效 283
14.3 允許玩家升級以及新建一波僵屍 284
14.4 重新開始遊戲 286
14.5 播放其余音效 287
14.5.1 在玩家裝彈時添加音效 287
14.5.2 制作射擊音效 287
14.5.3 在玩家被僵屍攻擊時播放音效 288
14.5.4 在撿到拾取包時播放音效 288
14.5.5 制作擊中僵屍時的啪嗒聲 289
14.6 本章小結 290
14.7 常見問題 290
第15章 Run! 291
15.1 關於本遊戲 292
15.2 新建項目 294
15.3 編寫main函數 295
15.4 處理輸入 299
15.5 編寫Factory類 303
15.6 高級OOP:繼承與多態 304
15.6.1 繼承 304
15.6.2 擴展一個類 304
15.6.3 多態 306
15.6.4 抽象類:虛函數和純虛函數 307
15.7 設計模式 308
15.8 實體組件系統 309
15.8.1 多種類型的對象難以管理的原因 309
15.8.2 使用泛型的GameObject類改進代碼結構 309
15.8.3 組合優於繼承 310
15.8.4 工廠模式 311
15.8.5 C++智能指針 313
15.8.6 轉換智能指針 315
15.9 編寫遊戲對象 316
15.9.1 編寫GameObject類 316
15.9.2 編寫Component類 318
15.9.3 編寫Graphics類 319
15.9.4 編寫Update類 320
15.9.5 運行代碼 321
15.9.6 下一步的工作 321
15.10 本章小結 321
第16章 聲音、遊戲邏輯、對象間通信與玩家 323
16.1 編寫SoundEngine類 323
16.2 編寫遊戲邏輯 326
16.3 編寫玩家類(初版) 335
16.3.1 編寫PlayerUpdate類 335
16.3.2 編寫PlayerGraphics類 338
16.4 編寫工廠類以使用所有新類型 342
16.5 運行遊戲 344
16.6 本章小結 346
第17章 圖像、攝像機與動作 347
17.1 攝像機、draw函數調用與SFML View類 347
17.2 編寫攝像機相關類 348
17.2.1 編寫CameraUpdate類 348
17.2.2 編寫CameraGraphics類(第一部分) 352
17.2.3 SFML View類 354
17.2.4 編寫CameraGraphics類(第二部分) 355
17.3 為遊戲添加攝像機實例 359
17.4 運行遊戲 361
17.5 本章小結 362
第18章 編寫平臺、玩家動畫與控制機制 363
18.1 實現平臺 363
18.1.1 編寫PlatformUpdate類 363
18.1.2 編寫PlatformGraphics類 367
18.1.3 在工廠中創建平臺 369
18.2 運行遊戲 370
18.3 為玩家添加新功能 371
18.4 運行遊戲 375
18.5 編寫Animator類 376
18.6 編寫玩家動畫 378
18.7 運行遊戲 384
18.8 本章小結 385
第19章 創建菜單與實現下雨效果 387
19.1 構建交互式菜單 387
19.1.1 編寫MenuUpdate類 388
19.1.2 編寫MenuGraphics類 392
19.1.3 在工廠中構建菜單 395
19.2 運行遊戲 396
19.3 實現下雨效果 397
19.3.1 編寫RainGraphics類 398
19.3.2 在工廠中實現下雨效果 401
19.4 運行遊戲 402
19.5 本章小結 403
第20章 火球與空間化 405
20.1 空間化的概念 405
20.2 利用SFML實現空間化 406
20.3 升級SoundEngine類 408
20.4 火球 410
20.4.1 編寫FireballUpdate類 410
20.4.2 編寫FireballGraphics類 415
20.4.3 在工廠中創建一些火球實例 419
20.5 運行代碼 420
20.6 本章小結 421
第21章 視差背景與著色器 423
21.1 學習OpenGL、著色器與GLSL 423
21.1.1 可編程流水線與著色器 423
21.1.2 編寫假想的片段著色器 424
21.1.3 編寫假想的頂點著色器 425
21.2 完成CameraGraphics類 426
21.3 為遊戲實現著色器 431
21.4 運行完成的遊戲 431
21.5 本章小結 432
21.6 延伸閱讀 432