設計模式與遊戲完美開發

《設計模式與遊戲完美開發》是於2017年1月清華大學出版社出版的一本圖書,作者是蔡升達

前言

初次接觸設計模式(DesignPatterns)是在求學階段,第一次看GoF的《DesignPatterns:ElementsofReusableObject-OrientedSoftware》時,感覺尤如天書一般,只能大概了解Singleton、Strategy、Facade、Iterator這幾個Pattern的用法,至於為什麼要使用、什麼時候使用,完全沒有概念。

進入職場後,先是跟著幾個大型遊戲項目一同開發和學習,到後來,自己可以主持技術項目、開發網路遊戲引擎、遊戲框架等。在這個過程中,時而拿起GoF的《DesignPatterns》或是以設計模式為題的書籍,反覆閱讀,逐漸地了解了每一種模式的套用以及它們的設計分析原理,並通過不斷地實踐與套用,才將它們融入自己的知識體系中。

從2004年進入職場,一晃眼,在遊戲業也超過了10的經歷,這些年在遊戲行業工作的付出,除了得以溫飽之外,也從中吸收了不少的知識與經驗。記得某天在一個項目開發會議中,我與同仁分享如何將設計模式套用在遊戲的開發設計中時,我突然察覺,應該將這些內容寫下來,並分享給更多的遊戲設計師,於是就有了寫這本書的想法。  

圖書簡介

《設計模式與遊戲完美開發》是作者“十年磨一劍”,將設計模式理論巧妙地融合到實踐中的最佳教材。

全書採用了整合式的項目教學,即以一個遊戲的範例來套用23種設計模式的實現貫穿全書,讓讀者學習到整個遊戲開發的全過程和作者想要傳承的經驗,並以淺顯易懂的比喻來解析難以理解的設計模式,讓想深入了解此領域的讀者更加容易上手。

本書既可以作為大學、專科和職業院校遊戲程式設計專業的教材,也可以作為遊戲從業人員提高遊戲設計能力和規範運用設計模式的培訓教材,還可以作為有這方面職業興趣的讀者學習和提高的自學參考書。  

目錄

第1篇設計模式與遊戲設計

第1章遊戲實現中的設計模式2

1.1設計模式的起源2

1.2軟體的設計模式是什麼?3

1.3面向對象設計中常見的設計原則4

1.4為什麼要學習設計模式7

1.5遊戲程式設計與設計模式8

1.6模式的套用與學習方式10

1.7結論11

第2章遊戲範例說明12

2.1遊戲範例12

2.2GoF的設計模式範例15

第2篇基礎系統

第3章遊戲場景的轉換——狀態模式(State)20

3.1遊戲場景20

3.1.1場景的轉換20

3.1.2遊戲場景可能的實現方式23

3.2狀態模式(State)24

3.2.1狀態模式(State)的定義24

3.2.2狀態模式(State)的說明25

3.2.3狀態模式(State)的實現範例25

3.3使用狀態模式(State)實現遊戲場景的轉換28

3.3.1SceneState的實現28

3.3.2實現說明29

3.3.3使用狀態模式(State)的優點35

3.3.4遊戲執行流程及場景轉換說明36

3.4狀態模式(State)面對變化時37

3.5結論37

第4章遊戲主要類——外觀模式(Facade)39

4.1遊戲子功能的整合39

4.2外觀模式(Facade)41

4.2.1外觀模式(Facade)的定義41

4.2.2外觀模式(Facade)的說明42

4.2.3外觀模式(Facade)的實現說明43

4.3使用外觀模式(Facade)實現遊戲主程式44

4.3.1遊戲主程式架構設計44

4.3.2實現說明45

4.3.3使用外觀模式(Facade)的優點47

4.3.4實現外觀模式(Facade)時的注意事項48

4.4外觀模式(Facade)面對變化時48

4.5結論48

第5章獲取遊戲服務的唯一對象——單例模式(Singleton)50

5.1遊戲實現中的唯一對象50

5.2單例模式(Singleton)51

5.2.1單例模式(Singleton)的定義51

5.2.2單例模式(Singleton)的說明51

5.2.3單例模式(Singleton)的實現範例52

5.3使用單例模式(Singleton)獲取唯一的遊戲服務對象53

5.3.1遊戲服務類的單例模式實現53

5.3.2實現說明54

5.3.3使用單例模式(Singleton)後的比較55

5.3.4反對使用單例模式(Singleton)的原因55

5.4少用單例模式(Singleton)時如何方便地引用到單一對象58

5.5結論63

第6章遊戲內各系統的整合——中介者模式(Mediator)64

6.1遊戲系統之間的溝通64

6.2中介者模式(Mediator)68

6.2.1中介者模式(Mediator)的定義69

6.2.2中介者模式(Mediator)的說明69

6.2.3中介者模式(Mediator)的實現範例69

6.3中介者模式(Mediator)作為系統之間的溝通接口72

6.3.1使用中介者模式(Mediator)的系統架構73

6.3.2實現說明73

6.3.3使用中介者模式(Mediator)的優點79

6.3.4實現中介者模式(Mediator)時的注意事項79

6.4中介者模式(Mediator)面對變化時80

6.5結論80

第7章遊戲的主循環——GameLoop82

7.1GameLoop由此開始82

7.2怎么實現遊戲循環(GameLoop)84

7.3在Unity3D中實現遊戲循環85

7.4P級陣地的遊戲循環89

7.5結論92

第3篇角色的設計

第8章角色系統的設計分析94

8.1遊戲角色的架構94

8.2角色類的規劃95  

第9章角色與武器的實現——橋接模式(Bridge)98

9.1角色與武器的關係98

9.2橋接模式(Bridge)103

9.2.1橋接模式(Bridge)的定義103

9.2.2橋接模式(Bridge)的說明107

9.2.3橋接模式(Bridge)的實現範例108

9.3使用橋接模式(Bridge)實現角色與武器接口110

9.3.1角色與武器接口設計110

9.3.2實現說明111

9.3.3使用橋接模式(Bridge)的優點116

9.3.4實現橋接模式(Bridge)的注意事項116

9.4橋接模式(Bridge)面對變化時116

9.5結論117

第10章角色屬性的計算——策略模式(Strategy)118

10.1角色屬性的計算需求118

10.2策略模式(Strategy)121

10.2.1策略模式(Strategy)的定義122

10.2.2策略模式(Strategy)的說明122

10.2.3策略模式(Strategy)的實現範例123

10.3使用策略模式(Strategy)實現攻擊計算124

10.3.1攻擊流程的實現125

10.3.2實現說明125

10.3.3使用策略模式(Strategy)的優點132

10.3.4實現策略模式(Strategy)時的注意事項133

10.4策略模式(Strategy)面對變化時134

10.5結論135

第11章攻擊特效與擊中反應——模板方法模式(TemplateMethod)137

11.1武器的攻擊流程137

11.2模板方法模式(TemplateMethod)139

11.2.1模板方法模式(TemplateMethod)的定義139

11.2.2模板方法模式(TemplateMethod)的說明141

11.2.3模板方法模式(TemplateMethod)的實現範例141

11.3使用模板方法模式實現攻擊與擊中流程142

11.3.1攻擊與擊中流程的實現143

11.3.2實現說明143

11.3.3運用模板方法模式(TemplateMethod)的優點145

11.3.4修改擊中流程的實現145

11.4模板方法模式(TemplateMethod)面對變化時147

11.5結論149

第12章角色AI——狀態模式(State)150

12.1角色的AI150

12.2狀態模式(State)158

12.3使用狀態模式(State)實現角色AI159

12.3.1角色AI的實現159

12.3.2實現說明160

12.3.3使用狀態模式(State)的優點169

12.3.4角色AI執行流程169

12.4狀態模式(State)面對變化時170

12.5結論172

第13章角色系統174

13.1角色類174

13.2遊戲角色管理系統176

第4篇角色的產生

第14章遊戲角色的產生——工廠方法模式(FactoryMethod)183

14.1產生角色183

14.2工廠方法模式(FactoryMethod)188

14.2.1工廠方法模式(FactoryMethod)的定義188

14.2.2工廠方法模式(FactoryMethod)的說明189

14.2.3工廠方法模式(FactoryMethod)的實現範例189

14.3使用工廠方法模式(FactoryMethod)產生角色對象195

14.3.1角色工廠類195

14.3.2實現說明196

14.3.3使用工廠方法模式(FactoryMethod)的優點199

14.3.4工廠方法模式(FactoryMethod)的實現說明199

14.4工廠方法模式(FactoryMethod)面對變化時203

14.5結論205

第15章角色的組裝——建造者模式(Builder)206

15.1角色功能的組裝206

15.2建造者模式(Builder)213

15.2.1建造者模式(Builder)的定義213

15.2.2建造者模式(Builder)的說明214

15.2.3建造者模式(Builder)的實現範例215

15.3使用建造者模式(Builder)組裝角色的各項功能217

15.3.1角色功能的組裝218

15.3.2實現說明219

15.3.3使用建造者模式(Builder)的優點226

15.3.4角色建造者的執行流程226

15.4建造者模式(Builder)面對變化時227

15.5結論228

第16章遊戲屬性管理功能——享元模式(Flyweight)229

16.1遊戲屬性的管理229

16.2享元模式(Flyweight)236

16.2.1享元模式(Flyweight)的定義236

16.2.2享元模式(Flyweight)的說明237

16.2.3享元模式(Flyweight)的實現範例238

16.3使用享元模式(Flyweight)實現遊戲242

16.3.1SceneState的實現242

16.3.2實現說明245

16.3.3使用享元模式(Flyweight)的優點250

16.3.4享元模式(Flyweight)的實現說明250

16.4享元模式(Flyweight)面對變化時252  

16.5結論252

第5篇戰爭開始

第17章Unity3D的界面設計——組合模式(Composite)254

17.1玩家界面設計254

17.2組合模式(Composite)259

17.2.1組合模式(Composite)的定義259

17.2.2組合模式(Composite)的說明260

17.2.3組合模式(Composite)的實現範例261

17.2.4分了兩個子類但是要使用同一個操作界面264

17.3Unity3D遊戲對象的分層式管理功能265

17.3.1遊戲對象的分層管理265

17.3.2正確有效地獲取UI的遊戲對象266

17.3.3遊戲用戶界面的實現267

17.3.4兵營界面的實現269

17.4結論274

第18章兵營系統及兵營信息顯示276

18.1兵營系統276

18.2兵營系統的組成277

18.3初始兵營系統281

18.4兵營信息的顯示流程287

第19章兵營訓練單位——命令模式(Command)288

19.1兵營界面上的命令288

19.2命令模式(Command)291

19.2.1命令模式(Command)的定義291

19.2.2命令模式(Command)的說明294

19.2.3命令模式(Command)的實現範例294

19.3使用命令模式(Command)實現兵營訓練角色297

19.3.1訓練命令的實現297

19.3.2實現說明298

19.3.3執行流程302

19.3.4實現命令模式(Command)時的注意事項303

19.4命令模式(Command)面對變化時305

19.5結論306

第20章關卡設計——責任鏈模式(ChainofResponsibility)307

20.1關卡設計307

20.2責任鏈模式(ChainofResponsibility)312

20.2.1責任鏈模式(ChainofResponsibility)的定義312

20.2.2責任鏈模式(ChainofResponsibility)的說明314

20.2.3責任鏈模式(ChainofResponsibility)的實現範例314

20.3使用責任鏈模式(ChainofResponsibility)實現關卡系統317

20.3.1關卡系統的設計317

20.3.2實現說明318

20.3.3使用責任鏈模式(ChainofResponsibility)的優點329

20.3.4實現責任鏈模式(ChainofResponsibility)時的注意事項329

20.4責任鏈模式(ChainofResponsibility)面對變化時330

20.5結論332

第6篇輔助系統

第21章成就系統—觀察者模式(Observer)334

21.1成就系統334

21.2觀察者模式(Observer)338

21.2.1觀察者模式(Observer)的定義338

21.2.2觀察者模式(Observer)的說明340

21.2.3觀察者模式(Observer)的實現範例341

21.3使用觀察者模式(Observer)實現成就系統344

21.3.1成就系統的新架構344

21.3.2實現說明346

21.3.3使用觀察者模式(Observer)的優點358

21.3.4實現觀察者模式(Observer)時的注意事項358

21.4觀察者模式(Observer)面對變化時359

21.5結論361

第22章存檔功能—備忘錄模式(Memento)362

22.1存儲成就記錄362

22.2備忘錄模式(Memento)366

22.2.1備忘錄模式(Memento)的定義366

22.2.2備忘錄模式(Memento)的說明367

22.2.3備忘錄模式(Memento)的實現範例367

22.3使用備忘錄模式(Memento)實現成就記錄的保存371

22.3.1成就記錄保存的功能設計371

22.3.2實現說明371

22.3.3使用備忘錄模式(Memento)的優點374

22.3.4實現備忘錄模式(Memento)的注意事項374

22.4備忘錄模式(Memento)面對變化時374

22.5結論375

第23章角色信息查詢—訪問者模式(Visitor)376

23.1角色信息的提供376

23.2訪問者模式(Visitor)385

23.2.1訪問者模式(Visitor)的定義386

23.2.2訪問者模式(Visitor)的說明390

23.2.3訪問者模式(Visitor)的實現範例392

23.3使用訪問者模式(Visitor)實現角色信息查詢397

23.3.1角色信息查詢的實現設計397

23.3.2實現說明398

23.3.3使用訪問者模式(Visitor)的優點405

23.3.4實現訪問者模式(Visitor)時的注意事項405

23.4訪問者模式(Visitor)面對變化時405

23.5結論408

第7篇調整與最佳化

第24章前綴字尾—裝飾模式(Decorator)410

24.1前綴後綴系統410

24.2裝飾模式(Decorator)415

24.2.1裝飾模式(Decorator)的定義415

24.2.2裝飾模式(Decorator)的說明418

24.2.3裝飾模式(Decorator)的實現範例419

24.3使用裝飾模式(Decorator)實現前綴後綴的功能422

24.3.1前綴後綴功能的架構設計423

24.3.2實現說明423

24.3.3使用裝飾模式(Decorator)的優點433

24.3.4實現裝飾模式(Decorator)時的注意事項433

24.4裝飾模式(Decorator)面對變化時434

24.5結論435

第25章俘兵—適配器模式(Adapter)436

25.1遊戲的寵物系統436

25.2適配器模式(Adapter)440

25.2.1適配器模式(Adapter)的定義440

25.2.2適配器模式(Adapter)的說明441

25.2.3適配器模式(Adapter)的實現範例441

25.3使用適配器模式(Adapter)實現俘兵系統443

25.3.1俘兵系統的架構設計443

25.3.2實現說明443

25.3.3與俘兵相關的新增部分445

25.3.4使用適配器模式(Adapter)的優點450

25.4適配器模式(Adapter)面對變化時450

25.5結論451

第26章載入速度的最佳化—代理模式(Proxy)453

26.1最後的系統最佳化453

26.2代理模式(Proxy)457

26.2.1代理模式(Proxy)的定義458

26.2.2代理模式(Proxy)的說明458

26.2.3代理模式(Proxy)的實現範例459

26.3使用代理模式(Proxy)測試和最佳化載入速度460

26.3.1最佳化載入速度的架構設計460

26.3.2實現說明461

26.3.3使用代理模式(Proxy)的優點464

26.3.4實現代理模式(Proxy)時的注意事項464

26.4代理模式(Prory)面對變化時466

26.5結論466

第8篇未明確使用的模式

第27章疊代器模式(Iterator)

27.1疊代器模式(Iterator)468

27.2原型模式(Prototype)469

27.3解釋器模式(Interpreter)471

第28章抽象工廠模式(AbstractFactory)472

28.1抽象工廠模式(AbstractFactory)的定義472

28.2抽象工廠模式(AbstractFactory)的實現473

28.3可套用抽象工廠模式的場合476

參考文獻477  

相關詞條

熱門詞條

聯絡我們