吳偉美
(廣東科學(xué)技術(shù)職業(yè)學(xué)院,廣東珠海 519090)
掃雷游戲是Windows操作系統(tǒng)自帶的一款小游戲,它以畫(huà)面精美、游戲方法簡(jiǎn)單等特點(diǎn)得到人們的認(rèn)可和青睞。Windows操作系統(tǒng)自帶的掃雷游戲有兩個(gè)關(guān)鍵的地方:第一個(gè)是初始化問(wèn)題,包括隨機(jī)產(chǎn)生本局游戲中雷的總數(shù),以及每一個(gè)小區(qū)域如何獲取周?chē)貐^(qū)的雷數(shù)分布等等。第二就是對(duì)鼠標(biāo)事件的處理問(wèn)題,即在游戲過(guò)程中對(duì)鼠標(biāo)事件應(yīng)如何做出反應(yīng)。本文基于MVC模式對(duì)掃雷游戲進(jìn)行設(shè)計(jì)。
MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC,應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。見(jiàn)圖1。
圖1 MVC模式中三個(gè)部件的關(guān)系
視圖是用戶看到并與之交互的界面。對(duì)老式的Web應(yīng)用程序來(lái)說(shuō),視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色。MVC一個(gè)大的好處是它能為應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,作為視圖來(lái)講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式[1,2]。
模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,就是說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以,減少了代碼的重復(fù)性。
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。比如,當(dāng)單擊Web頁(yè)面中的超鏈接和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西和做任何處理,它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后再確定用哪個(gè)視圖來(lái)顯示返回的數(shù)據(jù)。
根據(jù)MVC模式的三個(gè)功能部件要求,通過(guò)分析掃雷游戲的總體功能要求,把程序的總體框架按MVC模式設(shè)計(jì)為:(1)模式部分。定義并初始化雷區(qū)(以二維數(shù)組的形式定義),同時(shí)以隨機(jī)方式布雷,再確定雷區(qū)的相關(guān)標(biāo)記。該部分以多個(gè)類(lèi)互相配合實(shí)現(xiàn)雷區(qū)相關(guān)標(biāo)記的坐標(biāo)定位,數(shù)據(jù)模型改變后的關(guān)聯(lián)數(shù)據(jù)修正以確保模型數(shù)據(jù)的準(zhǔn)確性;(2)控制器部分。該部分主要借用Java圖形界面組件及事件處理機(jī)制來(lái)實(shí)現(xiàn),通過(guò)對(duì)程序菜單操作及雷區(qū)操作改變模型中相關(guān)的業(yè)務(wù)數(shù)據(jù)。該部分設(shè)置菜單操作類(lèi)及雷區(qū)操作類(lèi)實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯的控制;(3)視圖部分。借用Java語(yǔ)言的相關(guān)組件提供對(duì)模型數(shù)據(jù)的顯示及用戶的操作界面,所需要的特殊圖片標(biāo)記等也主要應(yīng)用于該部分。總體功能框架圖見(jiàn)圖2。
圖2 掃雷游戲的總體功能框架圖
其內(nèi)容為:(1)在這個(gè)模型中,事件被直接送往產(chǎn)生這個(gè)事件的組件;(2)對(duì)于每一個(gè)組件注冊(cè)一個(gè)或多個(gè)監(jiān)聽(tīng)者的類(lèi),這些類(lèi)包含事件處理器,用來(lái)接收和處理這個(gè)事件;(3)監(jiān)聽(tīng)者就是實(shí)現(xiàn)了Listener接口的類(lèi),事件是只向注冊(cè)的監(jiān)聽(tīng)者報(bào)告的對(duì)象。每個(gè)事件都有一個(gè)對(duì)應(yīng)的監(jiān)聽(tīng)者接口[3-5]。
處理步驟為:(1)給所需的事件源對(duì)象注冊(cè)事件監(jiān)聽(tīng)器。事件源對(duì)象.addXXListener(XXXListener);(2)實(shí)現(xiàn)相應(yīng)的方法。如果某個(gè)監(jiān)聽(tīng)器接口包含多個(gè)方法,則需要實(shí)現(xiàn)所有的方法。Java事件處理機(jī)制在程序中主要體現(xiàn)在控制器部分,即通過(guò)菜單及雷區(qū)控件的操作改模型數(shù)據(jù)并調(diào)用視圖部分的控制方法以顯示相應(yīng)的模型數(shù)據(jù)。
程序主要集中體現(xiàn)MVC模式、Java圖形界面及事件處理機(jī)制的綜合應(yīng)用,因此,對(duì)相關(guān)輔助功能如“英雄榜”等功能未做具體實(shí)現(xiàn),中等難度等級(jí)的運(yùn)行效果見(jiàn)圖3。
本文主要探討MVC模式在軟件設(shè)計(jì)開(kāi)發(fā)中的應(yīng)用,體現(xiàn)了分層思想在處理復(fù)雜事件中的作用。運(yùn)用MVC模式把業(yè)務(wù)模型、業(yè)務(wù)處理及業(yè)務(wù)視圖顯示分開(kāi)為不同部分,能夠降低軟件開(kāi)發(fā)的難度,增強(qiáng)程序的可維護(hù)性、提高程序開(kāi)發(fā)的可控性,同時(shí)使用Java面向?qū)ο笳Z(yǔ)言的GUI控件及事件處理機(jī)制能夠很好地實(shí)現(xiàn)模式中的控制器部分及視圖部分。
圖3 程序運(yùn)行效果圖
[1]萬(wàn)建成,盧雷.軟件體系結(jié)構(gòu)的原理、組成與應(yīng)用[M].北京:科學(xué)出版社,2002.
[2]FRANK,BUSCHMANN,MEUNIER R,et al.面向模式的軟件體系結(jié)構(gòu):卷I[M].賁可榮,郭福亮,譯.北京:機(jī)械工業(yè)出版社,2003.
[3]耿祥義,張躍平.Java-2實(shí)用教程[M].3版.北京:清華大學(xué)出版社,2006.
[4]耿祥義,張躍平.Java課程設(shè)計(jì)[M].2版.北京:清華大學(xué)出版社,2008.
[5]中國(guó)IT實(shí)驗(yàn)室.用Java編寫(xiě)掃雷游戲[EB/OL].(2010-09-29)[2012-06-17].http://java.chinaitlab.com/base/827892-4.html.
揚(yáng)州職業(yè)大學(xué)學(xué)報(bào)2012年4期