C++遊戲編程入門(第3版) Beginning C++ Game Programming : Learn C++ from scratch by building fun games, 3/e

[英] 約翰·霍頓(John Horton)著 王誌強 王遠鵬 譯

  • C++遊戲編程入門(第3版)-preview-1
  • C++遊戲編程入門(第3版)-preview-2
  • C++遊戲編程入門(第3版)-preview-3
C++遊戲編程入門(第3版)-preview-1

相關主題

商品描述

"?在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