劉恒 重慶醫(yī)科大學(xué)附屬第二醫(yī)院
俄羅斯方塊是一款單機(jī)或聯(lián)機(jī)的益智小游戲。它是由俄羅斯人Alexei Pakitnov發(fā)明的。俄羅斯方塊的基本規(guī)則是利用方向鍵控制掉落小塊進(jìn)行方向移動(dòng),將它排列成一條或多條線,消除后獲得分?jǐn)?shù)。因?yàn)樗僮骱?jiǎn)單而又對(duì)人的預(yù)判能力有一定的要求,適合不同年齡段的人,所以俄羅斯方塊也是一款益智游戲。因此,運(yùn)用書本所學(xué)知識(shí)以及實(shí)際操作項(xiàng)目,編寫了俄羅斯方塊游戲,并實(shí)現(xiàn)了一些擴(kuò)展功能。
目前,最普遍的是使用Java語(yǔ)言來開發(fā)小型游戲,并且有時(shí)可以在互聯(lián)網(wǎng)上看到一些中型游戲也是Java開發(fā)的。Java程序本身提供了大量的API鏈接庫(kù),包括繪圖、網(wǎng)絡(luò)和多媒體,甚至是3D。因此,使用Java程序設(shè)計(jì)可以獲得相當(dāng)多的資源。
JBuilder的可視化集成開發(fā)環(huán)境包括文本編輯器、項(xiàng)目創(chuàng)建工具、對(duì)象瀏覽器和調(diào)試器。用戶可以在集成開發(fā)環(huán)境中創(chuàng)建和開放項(xiàng)目、打開和編輯文件,并運(yùn)行和調(diào)試應(yīng)用程序??梢赃@樣說,在JBuilder中開發(fā)Java程序是具有很高的效率。
除了基本的控制方法和規(guī)則外,游戲還增加了新的游戲規(guī)則,花樣較多,游戲也會(huì)有耐玩性,并且更加容易操作,游戲主要通過鍵盤符號(hào)進(jìn)行操作。相關(guān)的控制鍵顯示在下面的表1中。
如表1所列,除了常規(guī)控件外,還增加了諸如空間(直接著陸)等按鈕。這些按鈕都是可以加快游戲速度的控制鍵。其他助記符和快捷鍵沒有描述。
Java是一種面向?qū)ο螅∣O)編程語(yǔ)言,其許多優(yōu)點(diǎn)在此不作討論。從面向?qū)ο蟮母拍畛霭l(fā),該程序可以分為以下幾個(gè)對(duì)象:
① 方塊類型數(shù)據(jù)
盡管塊類型的形狀不同,如下面的表3所示,它的狀態(tài)和行為是相同的。您可以使用不同于對(duì)象的繼承屬性的形狀特征來定義基本塊類(SuperBrick)。
② 程序運(yùn)算邏輯
程序中的邏輯操作通常執(zhí)行數(shù)值操作和分析,如塊判斷、塊行判斷、刪除判斷、塊移動(dòng)或事件響應(yīng),以及結(jié)果排序。
③ 繪圖
圖紙將根據(jù)展示平臺(tái)而有所不同。例如,獨(dú)立機(jī)器和手機(jī)的顯示環(huán)境可能不一樣,或者顯示效果可能不同。例如,當(dāng)游戲風(fēng)格被修改時(shí),可以產(chǎn)生不同的顯示效果。
④ 顯示平臺(tái)
“高可移植性”是Java的一個(gè)屬性。Java應(yīng)用程序覆蓋了許多領(lǐng)域,比如移動(dòng)電話、pda、獨(dú)立程序和瀏覽器,不同的平臺(tái)有不同的設(shè)置。如果顯示平臺(tái)是一個(gè)單獨(dú)的分類,它將會(huì)使主程序更加完整,并且遷移過程的更快。
游戲的核心元素包括三種類型:各種形狀的積木、障礙物和底部的游戲面板。游戲主要是控制面板上方塊的運(yùn)動(dòng)和變化,增加和消除障礙物。
經(jīng)典的俄羅斯方塊游戲中方塊主要有7種類型,每一種類型又有若十種變形。所有方格均可由4 * 4網(wǎng)格表示。網(wǎng)格有兩個(gè)狀態(tài):空白和填充。對(duì)于不同的形狀,填充部分是不同的,因此,一個(gè)由16個(gè)整數(shù)元素組成的一維數(shù)組可以用來表示一個(gè)特定的形狀。當(dāng)你需要填充的時(shí)候,對(duì)應(yīng)位置的數(shù)字是1,否則位置的個(gè)數(shù)是0。
一個(gè)二維數(shù)組用于存儲(chǔ)一種類型的塊。第一個(gè)維度表示第一個(gè)變量,第二個(gè)維度表示特定形狀的值。一個(gè)三維數(shù)組用于存儲(chǔ)所有的正方形;第一個(gè)維度表示哪個(gè)類型,第二個(gè)維度表示類型的第一個(gè)變量,第三維表示一個(gè)特定形狀的值。除了了解它的形狀之外,還需要知道它的位置,并且可以根據(jù)需要移動(dòng)和變形。
障礙實(shí)際上是一個(gè)不能移動(dòng)的正方形的組合。隨著游戲的進(jìn)程,障礙增加或減少。就像方塊一樣,你可以使用二維數(shù)組來存儲(chǔ)障礙物。
數(shù)組的大小是整個(gè)面板的水平和垂直方向上的網(wǎng)格數(shù)。對(duì)于需要填充的網(wǎng)格,該值被標(biāo)記為1,而空白網(wǎng)格的值為0。在添加了一個(gè)障礙之后,需要確定它是否超出了邊界。如果超過了障礙,比賽就結(jié)束了。同時(shí),你需要確定是否有一條完整的線,如果有滿行,則需要?jiǎng)h除障礙物。
游戲面板主要用于顯示塊和障礙物。有必要限定寬度和高度。為了使程序更靈活,面板的寬度和高度沒有確定固定數(shù)值。相反,網(wǎng)格被用作一個(gè)單元來指定包含多少個(gè)網(wǎng)格。靜態(tài)常量指定網(wǎng)格的數(shù)量和網(wǎng)格的邊緣。圖5顯示了游戲面板類的關(guān)鍵屬性和方法。
俄羅斯方塊是一款傳統(tǒng)游戲,它重在測(cè)試玩家的反應(yīng)靈敏度和幾何想象力,以下簡(jiǎn)要介紹我們要寫的這款游戲的功能。
游戲的主要功能如下:
當(dāng)游戲程序打開時(shí),有一個(gè)登入頁(yè)面,用來顯示游戲的加載情況。
設(shè)計(jì)使用箭頭鍵和空格鍵來控制塊,向上箭頭是一個(gè)90度旋轉(zhuǎn)框,空格鍵用于直接落下塊,每種類型的塊都有自己的預(yù)覽圖。
在玩的過程中,顯示玩家級(jí)別、分?jǐn)?shù)和消除的行數(shù)。
游戲有暫停、開始和結(jié)束等控制。
可以讓玩家來調(diào)整游戲的速度和游戲級(jí)別。
可以讓玩家設(shè)置游戲的聲音、背景音樂及音效。
在游戲結(jié)束時(shí),如果玩家的分?jǐn)?shù)進(jìn)入了前10名,就會(huì)彈出輸入玩家昵稱的對(duì)話框,并將玩家的名字存入檔案之中。
由于我們將把這個(gè)游戲作為一個(gè)應(yīng)用程序編寫,我們首先需要設(shè)計(jì)游戲的主框架和菜單。游戲的主要框架使用一個(gè)標(biāo)準(zhǔn)的Windows框架,有標(biāo)題欄、菜單欄和工具欄,使玩家更容易掌握游戲。菜單欄和工具欄用于啟動(dòng)、暫停、重新啟動(dòng)和結(jié)束游戲。在框架的底部,還可以放置一個(gè)狀態(tài)欄來顯示游戲的當(dāng)前狀態(tài)。
⑴ 登入頁(yè)面
由一張圖片和一個(gè)進(jìn)度條組成。
“圖片”:用來顯示游戲信息。
“進(jìn)度條”:用來顯示游戲時(shí)間。
⑵ 游戲主頁(yè)面
由菜單條、游戲面板和狀態(tài)欄組成,分別說明如下:
① 菜單條:1、“游戲”菜單,包含2個(gè)菜單項(xiàng)和1個(gè)子菜單組成。
“開始游戲”:用來選擇游戲版本和運(yùn)行游戲。
“放棄游戲”:用來退出當(dāng)前游戲,返回主界面。
“退出游戲”:用來退出程序。
2、“設(shè)置”菜單,它包含6個(gè)菜單項(xiàng)。
“暫停游戲”:用來暫停游戲,再次點(diǎn)擊時(shí)可以取消暫停。
“重新開始”:重玩游戲。
“速度等級(jí)”:選擇游戲速度難度。
“障礙等級(jí)”:選擇游戲障礙難度。
“播放背景音樂”:用來播放場(chǎng)景音樂,版本不同,音樂不同。
“播放音效”:用來播放一些觸發(fā)音樂,它隨著版本不同而異。
3、“成績(jī)”菜單,它只包含1個(gè)菜單項(xiàng)。
“排行榜”:用來查看分?jǐn)?shù)為前10名的玩家信息。
4、“幫助”菜單,它包含2個(gè)菜單項(xiàng)。
“游戲文字說明”:以文字的形式,說明游戲的功能和玩法。
“關(guān)于”:用來顯示游戲的一些版本信息。
② 游戲面板:1、“方塊活動(dòng)區(qū)”,方塊程序在里面進(jìn)行。
2、“預(yù)備方塊顯示區(qū)”,用來顯示預(yù)備的三個(gè)方塊組。
3、“成績(jī)狀態(tài)顯示區(qū)”,用來顯示游戲級(jí)別、分?jǐn)?shù)和消除的行數(shù)。
③ 狀態(tài)欄:用來顯示游戲的狀態(tài),它包含有三個(gè)狀態(tài):游戲裝載完畢、游戲運(yùn)行
中及暫停游戲。
⑶ 游戲結(jié)束頁(yè)面
由游戲結(jié)束顯示框和輸入個(gè)人信息顯示框組成。
① 游戲結(jié)束顯示框:顯示游戲已經(jīng)結(jié)束,并讓玩家選擇退出游戲還是還是重新一局。
② 輸入個(gè)人信息顯示框:用于輸入玩家的一些個(gè)人信息保存。
有兩種類型的塊運(yùn)動(dòng):一種是定時(shí)自由落體;另一個(gè)是基于用戶的擊鍵的改變,例如左,右,下或旋轉(zhuǎn)。對(duì)于第一種類型的移動(dòng),通過單獨(dú)啟動(dòng)一個(gè)線程,線程會(huì)定期執(zhí)行Shape的向下移動(dòng)方法,另外,在移動(dòng)時(shí),必須立即在面板上更新。因?yàn)閟hape級(jí)和gamepanel面板都不是相同的文件,所以不能直接進(jìn)行相互轉(zhuǎn)換,但是可以使用中間控制器控制器。
障礙物是一個(gè)能看見但是移動(dòng)不了的一個(gè)區(qū)域。如果模塊不能向下移動(dòng),則簡(jiǎn)單地獲得模塊位置,并且將相應(yīng)的障礙物位置設(shè)置為1并且重新打開,這樣可以轉(zhuǎn)換成障礙物。成為障礙后,幾次作成數(shù)據(jù)。如果一行的所有數(shù)據(jù)是1,則該行為填滿,并可以消除。
本文從面向?qū)ο缶幊痰慕嵌葋砜?,解析了俄羅斯方塊游戲的主要內(nèi)容和構(gòu)造,將MVC模式作為一個(gè)整體,通過對(duì)象來控制遠(yuǎn)程通信、數(shù)據(jù)傳輸、控制器,從而使其具有擴(kuò)展和靈活性。對(duì)于初學(xué)者來說,提高Java知識(shí)的使用設(shè)計(jì)系統(tǒng)具有一定的研究意義。