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