前言
初次接觸設計模式(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