張 潔
成都東軟學院,四川成都 611844
設計模式在游戲框架設計中的應用
張 潔
成都東軟學院,四川成都 611844
設計模式在軟件設計中起著非常重要的作用,使用設計模式可以提高軟件的可維護性和復用性。模板方法模式是設計模式中常用的一種模式,本文應用該模式設計了一個Windows游戲程序框架,可在不同的視頻游戲程序中使用。
設計模式;模板方法模式;Windows游戲;框架
“模式”這個詞來源于克里斯托夫·亞歷山大的《模式語言》(A pattern Language)一書,書中提到:“每一個模式描述了一個在我們周圍不斷重復發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動”。后來,“模式”一詞被引入到計算機科學領域,成為軟件設計者一直在追求的普遍性原則。設計模式并不是直接用來完成代碼的編寫,而是描述在各種不同的情況下,要怎么解決問題的一種方案。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。面向對象設計離不開設計模式,游戲開發(fā)自然也離不開設計模式。本文應用設計模式中的模板方法模式為不同的Windows視頻游戲搭建了一個可復用的框架。
模板方法模式是《設計模式:可復用面向對象軟件的基礎》一書中描述的23種設計模式中的其中一種,也是最常見的幾種模式之一。它在框架設計中得到了廣泛的應用。通常我們會遇到這樣一個問題:我們知道一個算法所需的關鍵步驟,并確定了這些步驟的執(zhí)行順序。但是某些步驟的具體實現(xiàn)是未知的,或者說某些步驟的實現(xiàn)與具體的環(huán)境相關。模板方法模式把我們不知道具體實現(xiàn)的步驟封裝成抽象方法,提供一個按正確順序調用它們的具體方法,構成一個抽象基類。子類通過繼承這個抽象基類去實現(xiàn)各個步驟的抽象方法,而工作流程卻由父類控制。換句話說,模板方法模式是定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。
要設計一個可以重復使用的Windows游戲程序框架,首先要分析出在游戲程序中哪些操作是穩(wěn)定的,哪些是變化的。然后用父類封裝穩(wěn)定的算法步驟和框架,而由子類封裝可能發(fā)生變化的細節(jié),這也正是模板方法模式的精髓。
一款Windows視頻游戲程序通常應該遵循三大步驟:
1)初始化系統(tǒng),準備游戲數(shù)據(jù);
2)開始游戲循環(huán):判定狀態(tài),并對當前狀態(tài)進行處理,處理過程包括獲取輸入、計算并更新數(shù)據(jù)以及輸出;
3)清理數(shù)據(jù),釋放系統(tǒng)。
也就是說,所有的Windows視頻游戲程序的操作過程都是確定的,但是,在這個過程中,某些步驟的具體實現(xiàn)是不確定的。對于不同的游戲,需要初始化的數(shù)據(jù)不同,在循環(huán)中處理輸入、更新游戲數(shù)據(jù)的方式也不同,最后要清除的數(shù)據(jù)也不同。那么,我們就可以將一個Windows游戲程序中固定的算法骨架放在父類中,而將那些隨游戲變化而變化的步驟延遲到子類中再實現(xiàn)。
在具體的程序設計過程中,我們可以定義一個框架類,假設將其命名為CApplication。在該框架類中主要包括以下幾個關鍵函數(shù):定義游戲程序框架的函數(shù)Run(),初始化函數(shù)Init()、幀處理函數(shù)Frame()和清理函數(shù)Shutdown()。Run()函數(shù)部分關鍵代碼如下所示:
在上述代碼中,MyRegisterClass()和InitInstance()是每一個Windows應用程序必須要實現(xiàn)的功能,因此,將它們封裝在框架類中。而Init()、Frame()和Shutdown()這3個函數(shù)則根據(jù)游戲的不同而不同,因此,在框架類中可以將這3個函數(shù)定義為純虛函數(shù),它們的具體實現(xiàn)則延遲到子類中。通過這種方式,我們就達到了利用模板方法模式搭建游戲程序框架的目的。
本文采用模板方法模式搭建了一個程序框架,該框架可用于開發(fā)不同的Windows視頻游戲,減少了游戲程序設計中的重復性工作。
[1]Erich Gamm, Richard Helm, Ralph Johnson, John Vlissides著.設計模式:可復用面向對象軟件的基礎.機械工業(yè)出版社,2000,6.
[2][美]Jim Adams著.DirectX角色扮演游戲編程.黃際洲,劉剛譯.重慶大學出版社,2006,2.
[3]程杰.大話設計模式.清華大學出版社,2007,12.
[4][美]Robert C. Martin著.敏捷軟件開發(fā):原則、模式與實踐.鄧輝,譯.清華大學出版社,2003,9.
TP31
A
1674-6708(2011)53-0171-01
張潔,助教,研究方向:圖形圖像處理,游戲程序設計