




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、學位論文基于Java ME無線網(wǎng)絡移動端的俄羅斯方塊游戲的實現(xiàn)論文作者姓名:XXX 申請學位專業(yè):網(wǎng)絡工程申請學位類別:工學學士指導教師姓名(職稱): 論文提交日期:XXXX年XX月XX日 第 II 頁 共 26 頁基于Java ME無線網(wǎng)絡移動端的俄羅斯方塊游戲的實現(xiàn)摘 要本系統(tǒng)是一個基于Java ME平臺的無線網(wǎng)絡移動端的俄羅斯方塊游戲,利用Java ME Wireless Toolkit(WTK)開發(fā)包工具在無線網(wǎng)絡移動端上實現(xiàn)經(jīng)典的俄羅斯方塊游戲。論文開始部分對無線網(wǎng)絡移動系統(tǒng)開發(fā)中常使用幾種開發(fā)語言和環(huán)境作了比較,說明了選擇Java ME Wireless Toolkit作為開發(fā)環(huán)境
2、的的原因并對它作了相關的介紹。并展示了在WTK中打開一個項目、把源文件打包成JAR包、產(chǎn)生混淆包的方法和過程。在系統(tǒng)設計時,遵循了無線網(wǎng)絡移動端程序的startApp、pauseApp、destroyApp的開發(fā)生命周期。在設計與實現(xiàn)方面,分成難度選擇、游戲規(guī)則、方塊處理這幾個模塊進行實現(xiàn)。在開發(fā)與實現(xiàn)的同時也講解了俄羅斯方塊這款古老而經(jīng)典游戲的游戲背景、規(guī)則以及相關特性。最終展示了無線網(wǎng)絡移動端的游戲開發(fā)的基本開發(fā)過程和設計思路。關鍵詞:無線網(wǎng)絡移動端;Java ME;俄羅斯方塊;游戲開發(fā)Realization of the TETRIS Game Based On Mobile Platf
3、orm of Java ME Wireless NetworkAbstractPuzzle games are a pretty interesting type of game to create for Java ME. TETRIS is a great example of a mix of puzzle and action. TETRIS is one of the few games that achieve ultimate popularity. It is remarkably simple, yet remarkably difficult. The system is
4、a TETRIS which is based on the platform of Java ME mobile wireless, applying Java ME Wireless Toolkit (WTK) to achieve using TETRIS in simulator. This article offers a brief introduction about the development of Java ME Wireless Toolkit. The design and the development are including three parts: TETR
5、ISs rules, the selecting of difficulty and the disposing of pieces. In the process of development and implementation, the article also interprets the TETRISs rules and TETRISs characters to show all the process of the development and design.Key words: wireless network UE; Java ME; TETRIS; game devel
6、opment 目 錄論文總頁數(shù):25頁1.引言11.1系統(tǒng)綜述11.2Java ME游戲開發(fā)背景11.3無線網(wǎng)絡移動端游戲發(fā)展現(xiàn)狀12開發(fā)環(huán)境介紹22.1編程環(huán)境的選擇22.2Java ME Wireless Toolkit(WTK)簡介42.3Java ME Wireless Toolkit(WTK)開發(fā)環(huán)境的簡介53游戲設計73.1俄羅斯方塊游戲的背景73.2俄羅斯方塊游戲的規(guī)則73.3俄羅斯方塊游戲的特性74游戲系統(tǒng)分析設計84.1系統(tǒng)解決方案84.2系統(tǒng)總體結構84.2.1難度選擇模塊94.2.2方塊處理模塊94.2.3游戲規(guī)則模塊94.3游戲中斷處理流程105系統(tǒng)實現(xiàn)與測試105.1
7、系統(tǒng)源文件結構105.2難度選擇模塊115.2.1難度選擇模塊結構115.2.2難度選擇模塊功能125.3游戲規(guī)則模塊功能145.3.1游戲規(guī)則模塊結構145.3.2游戲規(guī)則模塊功能155.4方塊處理模塊175.4.1方塊處理模塊結構175.4.2方塊處理模塊功能20結 論23參考文獻23致 謝23聲 明251. 引言1.1 系統(tǒng)綜述綜合運用以前所學專業(yè)知識,在Java ME開發(fā)平臺上實現(xiàn)無線網(wǎng)絡移動端的俄羅斯方塊游戲。其研究主要包括以下內(nèi)容:第一,克服有限的可視屏幕尺寸,使游戲正常顯示;第二,解決有限的可用內(nèi)存調(diào)用問題,實現(xiàn)游戲流暢運行;第三,俄羅斯方塊游戲規(guī)則算法在Java ME平臺的實現(xiàn)
8、,保證游戲可玩性;第四,游戲開始、結束等邏輯在游戲進行中的判斷。本系統(tǒng)在Windows XP的操作系統(tǒng)下,Java Micro Edition Wireless Toolkit 2.1為開發(fā)工具,用中文版UltraEdit做為代碼編輯器而實現(xiàn)的。1.2 Java ME游戲開發(fā)背景游戲開發(fā)是藝術與編程技術相結合的完美表現(xiàn)。利用Java的“Write once,run anywhere”特性,可以真正達到程序只寫一次,在任何平臺都可以執(zhí)行。同時Java語言對面向對象的良好支持,使開發(fā)具有高效性。所以Java ME(Java Micro Edition)是廣大無線網(wǎng)絡移動端游戲開發(fā)廠商和游戲開發(fā)愛好
9、者的首選平臺。1.3 無線網(wǎng)絡移動端游戲發(fā)展現(xiàn)狀縱觀IT產(chǎn)業(yè)的歷史,計算機游戲已經(jīng)成為技術創(chuàng)新背后的動力之一。計算機游戲者渴望更加強大的硬件計算能力,渴望不受不同的軟件的限制無論是將圖形強制在人工智能(AI)上還是網(wǎng)絡安全性。而無線網(wǎng)絡移動端游戲已成為IT產(chǎn)業(yè)中增長最快的部分之一。無線網(wǎng)絡移動端是一個嶄新的游戲開發(fā)平臺。在眾多種類的游戲當中,只有幾種游戲類型是適合開發(fā)成無線網(wǎng)絡移動端游戲的。低激烈程度的游戲;簡單街機游戲;運動類“情景”游戲;簡單的運動類游戲;解謎或簡單的匹配游戲;主題測試游戲。在上面的游戲種類中,我選擇了經(jīng)典的方塊匹配游戲:俄羅斯方塊。俄羅斯方塊有著舉世聞名的游戲性且非常直觀
10、。某些與墜落的玩具碎片和它們的形狀有關的東西,使得哪怕新手也會很自然地企圖把它們排列起來,并加以適當組合,就好似俄羅斯方塊觸動了玩家某些內(nèi)在的感官,使得哪怕是我們當中最雜亂無章的人也要把事情整理妥當。在操控性方面,只需方向鍵就可完成對游戲的全盤控制,這也適合無線網(wǎng)絡移動端游戲的基本特性。俄羅斯方塊要比過去二十年間出現(xiàn)的任何東西都要浪費人們的時間。它被GameSpot評選為歷史上最偉大游戲之一。它的起源實際上要追溯到八十年代中期,盡管它的人氣一直到幾年后才開始顯露出來。游戲的概念十分簡單,如今已經(jīng)成為一種公認的規(guī)則:屏幕頂部以隨機順序落下形狀各異的碎塊,玩家要試圖用它們拼成沒有空隙的行列。玩家是
11、沒法打贏它的,因為堅持得時間越長,游戲速度也就變得越來越快,而游戲的吸引力就在于使玩家頂住碎塊的進攻,支撐的時間比上一次更長。俄羅斯方塊舉世聞名的游戲性,在該游戲新鮮出爐時就顯得非常直觀。某些與墜落的玩具碎片和它們的形狀有關的東西,使得哪怕新手也會很自然地企圖把它們排列起來,并加以適當組合,就好似俄羅斯方塊觸動了玩家某些內(nèi)在的感官,使得哪怕是最雜亂無章的玩家也要把事情整理妥當。2 開發(fā)環(huán)境介紹2.1 編程環(huán)境的選擇目前,移動開發(fā)有以下四種主流平臺。Java Micro Edition(Java ME),Binary Runtime Environment for Wireless(BREW),
12、Symbian和Window Mobile Smartphone。其中:Binary Runtime Environment for Wireless(BREW)BREW是基于高通公司的Code Division Multiple Acces(CDMA)技術的手機為開發(fā)平臺。它使用C或C+結合BREW API來開發(fā)BREW設備上面的程序。和Java ME一樣BREW能夠作為游戲和地磁手機操作系統(tǒng)之間的一個中介。和Java ME不同,BERW也支持本地代碼,能夠專門針對某一手機的處理器而編譯。本地代碼通常比對應的解釋版本要快很多,但在設備之間移植會花費很多技巧。在北美和亞洲有部分無限通信服務提供
13、商。SymbianSymbian是一種開放的操作系統(tǒng),任何設備制造商都能獲得使用許可。Symbian支持C+、Java和Visual Basic等編程語言。但大多數(shù)商業(yè)Symbian游戲都是用C+開發(fā)并作為本地Symbian應用程序,這使得它們和Java開發(fā)的游戲相比更快一些。Window Mobile Smartphone在Window Mobile Smartphone平臺上,可以使用在編寫Pocket PC游戲時所用的一樣的工具和API。這意味著要使用C、C+或C#編程語言并結合使用Window Mobile API。這里我選用Java Micro Edition(Java ME)作為開
14、發(fā)平臺。Sun Microsystem公司在1999年6月推出Java ME。Java ME用于為信息家電市場提供應用服務,這些信息家電包括傳呼機、移動TEL、個人商務助理(PDA)、電視機頂盒、POS終端以及其他消費電子設備。Java ME體系結構采用模塊化、可擴展的設計。這種設計通過一個3層軟件模型來實現(xiàn)。由于無線移動設備比桌面計算機具有更弱的計算能力和更小的屏幕,Java ME代表著Java SE的一個簡化功能集,Java ME是Java SE的一個子集,它支持一個較小的功能集,這些功能適用于無線和有線的移動設備。Java ME包括一組可以靈活調(diào)用的開發(fā)工具和豐富的應用程序接口(API)
15、。依靠通用的字節(jié)碼而不是本地應用程序代碼,其程序不需要費多大力氣就可以移植到不同的手機。同時全球手機制造商中,Java ME有著最廣泛的工業(yè)支持。 Java ME也是目前最占據(jù)優(yōu)勢的移動軟件開發(fā)技術。并且所有的跡象表明它將保持并可能繼續(xù)擴展它的市場份額。20XX年約有4.5億支持Java的手機銷售出去,占據(jù)整個手機市場的75%。按照MIDP規(guī)范開發(fā)的Java ME應用程序叫做MIDlet。因此,用Java ME MIDP創(chuàng)建的任何游戲實際上都是MIDlet。MIDlet類存儲在Java字節(jié)碼文件中,擴展文件名.class。而MIDlet類必須在發(fā)布之前進行驗證,以確保它們不會執(zhí)行任何非法操作。
16、進行這個預驗證步驟的原因和移動設備所使用的虛擬機的限制有關。為了保證虛擬機盡可能地小且高效,在一個運行時MIDlet類上所執(zhí)行的驗證被最小化。預驗證在編譯之后發(fā)生,并生成一個新的class文件,這個文件是通過驗證后等待測試或發(fā)布的。最后MIDlet打包成JAR文件以便發(fā)布。應用程序描述符(JAD文件)提供了和一個JAR文件中包含的多個MIDlet相關的描述信息。一個MIDlet套件中的JAR文件,能夠提供安裝和訪問單個MIDlet的相應的信息。Java SDK是用Java進行開發(fā)的一個標準開發(fā)工具包。Java ME Wireless Toolkit(JWT)的作用相當于一個用來和Java SD
17、K協(xié)同工作的插件,它包括用來驗證和測試MIDlet的一個字節(jié)碼驗證器和幾個Java ME模擬器。Java ME技術架構分為:簡表(Profile)、配置(Configuration)和Java虛擬機(Java Virtual Machine)3層,它們都構建在本地操作系統(tǒng)之上。其中,簡表層定義了特定系列設備上可用的應用程序編程接口(API)的最小子集;配置層面對的是大量各種不同的小型嵌入式設備,通過定義其配置可以描述硬件的功能;Java虛擬機層是針對在本地操作系統(tǒng)定制的虛擬運行平臺。其架構圖如下:簡表層(Profile)配置層(Configuration)Java虛擬機(JVM)圖1 Java
18、 ME架構圖按照MIDP規(guī)范開發(fā)的Java ME應用程序叫做MIDlet。用Java ME MIDP創(chuàng)建的任何游戲實際上都是MIDlet。MIDlet類存儲在Java字節(jié)碼文件中,擴展文件名.class。而MIDlet類必須在發(fā)布之前進行驗證,以確保它們不會執(zhí)行任何非法操作。進行這個預驗證步驟的原因和移動設備所使用的虛擬機的限制有關。為了保證虛擬機盡可能地小且高效,在一個運行時MIDlet類上所執(zhí)行的驗證被最小化。預驗證在編譯之后發(fā)生,并生成一個新的class文件,這個文件是通過驗證后等待測試或發(fā)布的。最后MIDlet打包成JAR文件以便發(fā)布。應用程序描述符(JAD文件)提供了和一個JAR文件
19、中包含的多個MIDlet相關的描述信息。一個MIDlet套件中的JAR文件,能夠提供安裝和訪問單個MIDlet的相應的信息。本系統(tǒng)的編譯環(huán)境選用Java ME Wireless Toolkit(JWT)version 2.1,這樣對于游戲中包含的類,字節(jié)碼驗證器在打包前對它們進行驗證。Java ME模擬器可以用來在PC上測試,而不必下載到移動設備上。2.2 Java ME Wireless Toolkit(WTK)簡介Java ME Wireless Toolkit(WTK) 的全稱是:Java ME無線開發(fā)工具包。這一工具包的設計目的是為了幫助開發(fā)人員簡化Java ME的開發(fā)過程。它的功能包
20、括了編譯、打包、模擬執(zhí)行MIDP應用程序。其中包括了字節(jié)碼驗證器、Java ME模擬器、KToolBar、預配置服務器(provisioning server)等很有用的工具。該工具箱包含的生成工具、實用程序以及設備仿真器。現(xiàn)在共推出有四個版本,分別是1.0.4, 2.0, 2.1和2.2。每個版本都包括英語,日語,簡體中文,繁體中文4個語種包。它的功能包括了編譯、打包、模擬執(zhí)行MIDP應用程序。1.0.4版只能夠開發(fā)MIDP1.0 應用程序,2.0版只能夠開發(fā)MIDP2.0應用程序,2.1版則可以同時開發(fā)MIDP1.0、JTWI(CLDC1.0,MIDP2.0,WMA1.1)可改用CLDC1
21、.1或加入MMAPI1.1)、自定義(隨機組合Configuration、Profile以及Optional Package)三種環(huán)境下的應用程序。2.2版中,WTK全面的支持JTWI規(guī)范。即MIDP 2.0、CLDC 1.1、 WMA 2.0、 MMAPI 1.1、Web Services(JSR 172)、File and PIM APIs(JSR 75)、Bluetooth and OBEX APIs(JSR 182)和3DGraphics(JSR 184),同時也可以使用該版本開發(fā)面向CLDC1.0 和MIDP1.0的應用程序。WTK工具包中的KToolBar是一個可視化的開發(fā)環(huán)境,可
22、以通過一個圖形用戶界面來創(chuàng)建、編譯、打包和測試Java ME應用程序。它也提供了直接的方法來管理MIDlet項目并生成設置。這里我選用WTK 2.1作為開發(fā)環(huán)境。安裝WTK 2.1后,將得到一個包括多種實用工具的開發(fā)包。以下是安裝顯示的菜單項,見下圖:圖2 WTK文件結構無論哪個版本的WTK 都會包括以下幾個目錄:appdb 目錄: RMS 數(shù)據(jù)庫信息apps 目錄: WTK 自帶的demo 程序bin 目錄: Java ME 開發(fā)工具執(zhí)行文件docs 目錄: 各種幫助與說明文件lib 目錄: Java ME 程序庫,Jar 包與控制文件session 目錄:性能監(jiān)控保存信息wtklib 目錄
23、: JWTK 主程序與模擬器外觀2.3 Java ME Wireless Toolkit(WTK)開發(fā)環(huán)境的簡介打開WTK下的KTookBar。選擇打開項目,WTK 會把自身apps目錄下的應用項目全部顯示出來,選擇“打開項目”后,能夠對apps目錄下的MIDlet項目進行開發(fā)更改, 見下圖:圖3 打開一個項目直接運行MIDP應用程序可以在程序組中直接選擇Run MIDP Application。在彈出的對話框中選擇其它路徑中的JAD程序運行。JAD描述文件與其指定的JAR文件需在同一個目錄下。同時運行目錄路徑中不能包含中文。KToolBar的生成功能只能幫將源代碼編譯并預先審核并不會幫產(chǎn)生J
24、AR 文件,如果要發(fā)布MIDP程序,除了JAD描述文件,還必須打包成JAR文件。在KToolbar選中Project-Package-Create Package,可以把整個程序,包括資源文件打包成JAR文件。形成的JAR保存在項目對應的bin目錄下,如下圖:圖4 創(chuàng)建一個包KToolBar除了“產(chǎn)生包”,另外還有“產(chǎn)生混淆包”功能。為了防止別人反編譯后讀取源代碼,將程序(.class 文件)進行混淆,經(jīng)過混淆的Java Byte Code可以增加反編譯源代碼的時間。在KToolBar的Edit-Preferences里面提供很多實用的功能,如下圖:圖5 選擇Preferences菜單KToo
25、lBar除了“產(chǎn)生包”,另外還有“產(chǎn)生混淆包”功能。為了防止別人反編譯后讀取源代碼,將程序(.class 文件)進行混淆,經(jīng)過混淆的Java Byte Code可以增加反編譯源代碼的時間。在需要監(jiān)視程序性能的時候,可以在Edit-Preferences里選中“Enable Memory Monitor”,在下一次模擬器執(zhí)行的時候,就可讀出程序運行時的內(nèi)存消耗均值,消耗峰值以及具體產(chǎn)生對象的個數(shù)使用情況。除了內(nèi)存監(jiān)視,還可以執(zhí)行網(wǎng)絡監(jiān)視,設定存儲區(qū)大小和堆棧大小,設定安全簽名和藍牙操作屬性,以盡可能模擬手機實際運行環(huán)境。3 游戲設計3.1 俄羅斯方塊游戲的背景俄羅斯方塊是俄羅斯人阿列克謝帕基特諾
26、夫(Alexey Pazhitnov)發(fā)明。人們一開始并沒預料到它將會有如此廣泛的吸引力。實際上,在游戲發(fā)明后的數(shù)年間,俄羅斯方塊成了無數(shù)場專利官司和法律糾紛的目標,而許多公司也不遺余力地上陣廝殺,想要將游戲的創(chuàng)意據(jù)為己有。一個最初的版本是SpectrumHolobyte為IBM兼容機開發(fā)的游戲。1988年,俄羅斯方塊在街機上也變得非常流行,這歸功于Atari,因為他們發(fā)布了一個能讓兩名玩家同時游戲的版本。俄羅斯方塊經(jīng)常被稱為拼圖游戲。玩家需要找出如何能把各塊積木最好的拼在一起的方法。俄羅斯方塊相當于直角的智力拼圖游戲,或者其它一種“在這有限空間內(nèi)組織幾何體”的拼圖。俄羅斯方塊為了創(chuàng)造真正引人
27、入勝的游戲,它巧妙的平衡了拼圖游戲與動作游戲的機制。因而每個人玩這個游戲都會有一次不同的體驗。俄羅斯方塊所用到的一種動作游戲機制是越來越逼近的威脅感,留給玩家的時間總是非常有限。俄羅斯方塊中積木是從上面落下來。如果玩家不在積木落到屏幕底下或翻轉它,不能給它找一個最有利的位置,這塊積木就可能會堵住某處,而它下面的幾行也就沒有辦法拼接完整,玩家也就離游戲結束又靠近了一行或幾行。在游戲進程中,積木落下來的速度越來越快,這樣對玩家的挑戰(zhàn)也就越來越大,游戲的難度也逐步增加。3.2 俄羅斯方塊游戲的規(guī)則俄羅斯方塊游戲的玩法非常簡單易學,游戲界面是一個很高的長方形2D盒子,方塊出現(xiàn)在盒子的上方,這些方塊都由
28、四個小方塊組成,并按照各種方式排列,其中每一個方塊都至少和另一個方塊相連。然后,這些積木慢慢地落向盒子底部,玩家可以把這些方塊左右移動或旋轉。一旦這個方塊碰到阻礙,比如盒底或者另一個方塊,它就會停止,而玩家可以對之加以操作。當屏幕底端的方塊拼滿一橫行時,這個層的方塊就會消失,而這一行以上的所有方塊都會下降一層。而當那些沒有拼完的橫行填滿整個長方形盒子,新的方塊無法再出現(xiàn)時,游戲就結束了。3.3 俄羅斯方塊游戲的特性(1)單屏游戲:俄羅斯方塊全部反映在一個屏幕上。玩家可以在同一時間看到整個游戲環(huán)境,在此基礎上決定怎么處理手上的這塊積木。這個游戲當中沒有任何探險成分在內(nèi),它不會讓玩家真正大吃一驚,
29、玩家能夠看到讓游戲順利進行下去的所有信息,所以玩家輸了的話只能怪他自己。(2)無限游戲:只要積木還沒有堆到盒頂,俄羅斯方塊就允許玩家一直玩下去,不管他做出了多少錯誤的決定。每次游戲都以失敗而告終,沒有人真正能打敗這個游戲。玩家們總是能找到提高玩俄羅斯方塊技藝的方法,這就是俄羅斯方塊和傳統(tǒng)拼圖游戲的根本不同。一旦玩家拼好了一幅拼圖,只要他還記得他是怎么拼的,那么這個拼圖就對他再也無挑戰(zhàn)了。所以人們通常不會多次玩一個拼圖,但一個設計精巧的游戲卻總能讓人玩上一遍又一遍。俄羅斯方塊正是這樣一個游戲。(3)多條生命:和大多數(shù)的街機游戲不同,最早的俄羅斯方塊只給玩家一條生命。積木一堆到盒子頂部,玩家就輸了
30、。但是游戲的設計允許玩家出現(xiàn)錯誤,同時還不會立即敗下陣來。當積木疊在長方盒子的底部時,玩家可以看到自己所犯的錯誤,在游戲結束前,他還是有時間想一想如何把后面的積木拼放得更合理些。這樣,俄羅斯方塊雖然沒有給玩家多條生命,但卻在玩家重新開始前,給玩家一個改善游戲技巧、獲得一些小小成就的機會。(4)最高分機制:俄羅斯方塊引入一個計分模式,它給玩家計分并把分數(shù)記錄在高分排行榜上。實際上,因為玩家不可能擊敗這個游戲,所以,取得一個更高分數(shù)的可能性就成為玩家反復玩這個游戲真正的動力所在。(5)簡單易學,容易操作:俄羅斯方塊的真正杰出之處在于它的游戲機制簡單平樸,淺顯易懂。玩好這個游戲只需極少的鍵位,所有操
31、作都在屏幕上一覽無余。這意味著,不論是否熟悉計算機游戲,任何人都可以走過來并立即開始玩它。然而,玩家永遠不可能完全掌握這個游戲,因為這個游戲的難度與是遞增并且它在理論上可以玩無限長的時間。4 游戲系統(tǒng)分析設計4.1 系統(tǒng)解決方案本系統(tǒng)在Windows XP的操作系統(tǒng)下,以Java Micro Edition Wireless Toolkit 2.1為開發(fā)工具,用中文版UltraEdit做為代碼編輯器而實現(xiàn)的。在KToolBar開發(fā)包的DefaultColorPhone模擬器下進行調(diào)試。4.2 系統(tǒng)總體結構系統(tǒng)開發(fā)的主要任務是俄羅斯方塊游戲在無線移動端的實現(xiàn)。本系統(tǒng)的主要實現(xiàn)功能模塊分為:難度選
32、擇模塊、方塊處理模塊、游戲規(guī)則模塊。4.2.1 難度選擇模塊用戶在title屏按鍵數(shù)字鍵選擇09種游戲難度,進入相對應游戲關卡。進入游戲按鍵輸入(09)選擇關卡難度處理輸入選擇關卡難度進入關卡0進入關卡1進入關卡2進入關卡3。判斷游戲是否結束圖6 Title屏選擇關卡模塊圖4.2.2 方塊處理模塊方塊處理模塊定義方塊的7種狀態(tài),每種狀態(tài)都是由四個小方塊組合而成,如下: 圖7 方塊形狀模塊圖4.2.3 游戲規(guī)則模塊游戲規(guī)則模塊主要實現(xiàn)俄羅斯方塊游戲基本規(guī)則。比如,積滿一行后消減;能夠快速直接的下落;記錄游戲最高分;方塊翻轉;分數(shù)計算;隨機生成方塊,見下圖:游戲規(guī)則消減積滿行快速下落方塊翻轉分數(shù)計
33、算隨機生成方塊圖8 游戲規(guī)則模塊圖4.3 游戲中斷處理流程中斷處理是移動設備程序生命周期的重要組成特性,包括下圖三種階段:運行階段(startApp)掛起階段(pauseApp)結束階段(destroyApp)喚醒掛起結束結束圖9 系統(tǒng)生命周期圖5 系統(tǒng)實現(xiàn)與測試5.1 系統(tǒng)源文件結構本系統(tǒng)由10個類組成并實現(xiàn)全部功能。項目名字為TetrisMidlet,其項目文件結構如下圖:圖10 項目結構圖在項目源文件中,src文件夾下為實現(xiàn)系統(tǒng)的源文件。建了兩個包作為功能劃分,分別為:ui包和model包。5.2 難度選擇模塊5.2.1 難度選擇模塊結構ui包里包含以下類: InfoBox.java 用
34、于顯示數(shù)字的信息框TitleBox.java 顯示title屏,包含當前高分提示選擇一個難度NextPieceBox.java顯示下一個激活方塊TetrisCanvas.java處理程序的所有UIDisplayBox.java 在屏幕上顯示Box其結構圖如下:ui包InfoBoxTitleBoxNextPieceBoxTetrisCanvasDisplayBox圖11 ui包結構圖其中核心類DisplayBox.java的方法圖如下:圖12 類DisplayBox的方法圖在DisplayBox.java中方法paint()實現(xiàn)了title屏的顯示,其代碼如下:public final void
35、 paint(Graphics g) g.setColor(this.bgColor);g.fillRect(x, y, width, height);/ box的背景g.setColor(this.fgColor);g.drawRect(x, y, width, height);/ 邊框this.paintBoxContents(g);下面是TerisCanvas.java中繪制方塊paintBlock()方法的實現(xiàn)代碼:private void paintBlock(int x, int y, int blockType, Graphics g) int blockX = this.boa
36、rdX + (this.blockSize * x);int blockY=this.boardY+(this.blockSize* (y - TetrisConstants.TOP_VISIBLE_ROW);if(TetrisConstants.BLOCK_EMPTY != blockType) / 繪制下落時的陰影g.setColor(TetrisConstants.COLOR_BLACK);g.fillRect(blockX + 1, blockY + 1, this.blockSize - 1, this.blockSize - 1);/ 繪制一個實際的方塊覆蓋在陰影上this.set
37、Color(blockType, g);g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1); else /繪制顏色g.setColor(TetrisConstants.COLOR_WHITE);g.fillRect(blockX, blockY, this.blockSize, this.blockSize);其中,TOP_VISIBLE_ROW為TetrisConstants下定義,Y坐標的從行0開始索引的位置,初始值為2。BLOCK_EMPTY為TetrisConstants下定義的空方塊,初始值為-1。CO
38、LOR_BLACK為TetrisConstants下定義的預設RGB顏色,初始值為0x00000000。COLOR_WHITE為TetrisConstants下定義的預設RGB顏色,初始值為0x00ffffff。5.2.2 難度選擇模塊功能模擬器程序運行,在應用程序列表里顯示可以載入運行的模擬程序,如下圖:圖13 載入程序點擊運行程序后,在title屏顯示游戲名稱、作者、最高分記錄和按鍵提示,點擊數(shù)字鍵輸入0-9中的一個數(shù)字,以選擇不同難度的關卡,如下圖:圖14 運行游戲在title屏,也可以點擊左軟鍵退出程序。5.3 游戲規(guī)則模塊功能5.3.1 游戲規(guī)則模塊結構游戲規(guī)則模塊包含3個類:Dro
39、pThread.java 處理方塊下落問題TetrisConstants.java 常數(shù)定義TetrisMidlet.java 游戲規(guī)則和對鍵盤輸入的捕捉,以及中斷的處理其結構圖如下:TetrisMidletUi包Model包DropThreadTetrisConstantsTetrisMidlet圖15 游戲規(guī)則模塊結構圖其中核心類DropThread.java實現(xiàn)了方塊的下落,它的方法圖如下:圖16 類DropThread方法圖其中run()方法實現(xiàn)循環(huán)下落,代碼如下:public void run() /運行方法 while(this.running) / 當前下落的方塊if(this.
40、skipNextTick) this.skipNextTick = false; else this.game.tick();try Thread.sleep(this.game.getTickSpeed();/ 線程睡眠 catch(InterruptedException ie) 5.3.2 游戲規(guī)則模塊功能游戲規(guī)則模塊實現(xiàn)俄羅斯方塊游戲的主要功能包括,消減積滿的行、快速下落、方塊翻轉、分數(shù)計算、下落碰撞檢測、隨機生成方塊。下面是消減積滿行功能代碼,如下:private int clearCompletedRows(TetrisPiece piece) TetrisBoard board
41、= this.getBoard();/ 檢查方塊的每一行,看是否以完成for(int i = 0; i = 0; y-) /從下到上重復if(numClearedRows 0) board.dropRow(y, numClearedRows);if(this.isRowCompleted(y) numClearedRows+;this.markRowCompleted(y, false);/ 為下一次重置/ 清除最上面的完成行數(shù)for(int i = 0; i numClearedRows; i+) board.clearRow(i);return numClearedRows;為了增加玩家在
42、游戲過程中的游戲性,下落的方塊設置成隨機生成,這里利用rand.nextInt方法得到隨機數(shù),下面是隨機生成方塊功能的部分代碼,如下:private int getRandomPieceType() return Math.abs(rand.nextInt() % TetrisConstants.NUM_PIECE_TYPES) + 1;首先用rand.nextInt()方法得到隨機數(shù)后,用隨機數(shù)除以TetrisCanstants中定義的表示方塊類型數(shù)的常量NUM_PIECE_TYPE,其值初始值為7,取余后加1取其絕對值。實現(xiàn)效果如下圖:圖17 游戲進行狀態(tài)圖在前面4.3部分通過圖9的系統(tǒng)生
43、命周期流程圖,已經(jīng)了解了游戲中斷處理的過程。在游戲運行時可以按右軟鍵調(diào)用程序生命周期中pauseApp()方法暫停游戲,方塊會停在暫停位置,直到玩家再次點擊右軟鍵恢復游戲,pauseApp()方法代碼如下:protected void pauseApp() / 掛起程序使游戲進入暫停狀態(tài)if(TetrisConstants.RUNNING_STATE = this.gameState) this.pauseGame(); 在pauseApp方法中調(diào)用了pauseGame()方法,其實現(xiàn)代碼如下:private void pauseGame() / 把暫停命令替換成恢復命令this.gameCa
44、nvas.removeCommand(this.pauseCommand);this.gameCanvas.addCommand(this.resumeCommand);/ 進入暫停狀態(tài)并停止下落this.setGameState(TetrisConstants.PAUSED_STATE);this.dropThread.stopThread();游戲暫停階段畫面如下:圖18 游戲暫停狀態(tài)圖當點擊右軟件恢復游戲后,方塊從暫停位置繼續(xù)下落,這里用了resumeGame()來實現(xiàn)此功能,代碼如下:private void resumeGame() / 把恢復命令替換成暫停命令this.gameCa
45、nvas.removeCommand(this.resumeCommand);this.gameCanvas.addCommand(this.pauseCommand);/ 進入運行狀態(tài)并下落this.setGameState(TetrisConstants.RUNNING_STATE);this.runDropThread();游戲恢復階段狀態(tài),如下圖:圖19 游戲恢復狀態(tài)圖5.4 方塊處理模塊5.4.1 方塊處理模塊結構俄羅斯方塊游戲中出現(xiàn)的七種方塊是由4個小塊組合而成。方塊處理模塊包含在model包中:TetrisPiece.java當前下落方塊的處理TetrisBoard.java定義
46、方塊格子的狀態(tài)其類結構圖如下:ModelTetrisPieceTetrisBoard圖20XX塊處理模塊結構圖核心類TetrisPiece中實現(xiàn)了七種方塊下落時翻轉方式的下落,方塊翻轉方式分三種方式:自由翻轉(Free)、兩面翻轉(Toggle)、不能翻轉(None),下圖是判斷圖示:兩面翻轉(Toggle)自由翻轉(Free)無翻轉(None)圖21 方塊翻轉方式判斷圖示在四個組成的方塊的小塊中,有一個中心點小塊(1,1)在翻轉的時候坐標是不會變化的,這個坐標在參數(shù)設置類TetrisConstants.java中,名稱為:PIVOT_INDEX,其初始值為1。下面用方塊I舉例說明其進行翻轉判
47、斷的代碼:private void setAsNewIPiece(int x, int y) this.pieceType = TetrisConstants.I_PIECE;this.rotationType = TetrisConstants.ROTATION_TYPE_TOGGLE;/只能進行兩個方向的旋轉,設置類型為TOGGLEthis.rotationToggle = true;/ 設置TOGGLE標志為TUREthis.setBlockCoords(0, x - 1, y);this.setBlockCoords(1, x , y);this.setBlockCoords(2, x
48、 + 1, y);this.setBlockCoords(3, x + 2, y);下圖是類TetrisPiece的方法圖:圖22 類TetrisPiece方法圖其中rotate()方法實現(xiàn)了方塊的旋轉,(x,y)為小方塊坐標,其翻轉實現(xiàn)算法如下:(x,y)(-y,-x)如向左旋轉:(y,-x)如向右旋轉:(-y,x)(-y+1,x+1)(y+1,-x+1)圖23 方塊翻轉算法流程圖方塊翻轉算法流程實現(xiàn)代碼如下:public void rotate(int pivotX, int pivotY, boolean rotateDirection) if(TetrisConstants.ROTAT
49、ION_TYPE_TOGGLE = this.rotationType) / 如果翻轉類型為TOGGLErotateDirection = this.rotationToggle; /判斷翻轉方向this.rotationToggle = !this.rotationToggle; / 如果與canRotate匹配,中心點方塊將被使用/ 重構四個小塊,每個都轉動for(int i = 0; i TetrisConstants.FOUR_BLOCKS; i+) int blockX = this.getBlockX(i);int blockY = this.getBlockY(i);/ 左旋轉:
50、交換x和y坐標,x坐標取反/ 右旋轉:交換x和以坐標,y坐標取反int dx = blockY - pivotY;int dy = blockX - pivotX;if(rotateDirection) / 如向左旋轉dx *= -1; else / 如向右旋轉dy *= -1;int rotateX = pivotX + dx;int rotateY = pivotY + dy;this.setBlockCoords(i, rotateX, rotateY);/得到翻轉后的新坐標5.4.2 方塊處理模塊功能對當前下落方塊的處理,主要功能是及時刷新圖像,保證方塊狀態(tài)及時更新。核心類Tetris
51、Board.java實現(xiàn)了此功能,其方法圖如下:圖24 類TetrisBoard方法結構圖當下落方塊頂端積滿后,游戲系統(tǒng)判斷游戲結束。在TetrisBoard.java中的checkRowCompleted()方法實現(xiàn)了此功能,其代碼如下:public boolean checkRowCompleted(int rowY) for(int x = 0; x TetrisConstants.WIDTH; x+) if(TetrisConstants.BLOCK_EMPTY = this.getBlockType(x, rowY) / 有空方塊,行不被填充return false;return t
52、rue;如下圖:圖25 方塊下落游戲圖像刷新狀態(tài)圖當游戲結束時立即顯示title屏,計算并顯示出這次游戲的最高分。同時等待玩家鍵入數(shù)字,選擇游戲難度開始新的游戲。其實現(xiàn)由init()方法控制,其代碼如下:private void init() this.board = new TetrisBoard();this.gameCanvas = new TetrisCanvas(this);this.activePiece = new TetrisPiece(); /方塊處理pletedRows = new booleanTetrisConstants.HEIGHT; /初始化數(shù)組this.hiScore = this.openAndReadHiScore();/ 從RMS得到當前存儲的高分this.nextPieceType = TetrisConstants.UNINITIALIZED;this.rand = new Random();/ 設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務透明度與報表分析技巧
- 工程竣工結算編制和審查重慶市房屋建筑與市政基礎設施工程現(xiàn)場施工專業(yè)人員土建預算
- 遵循用戶習慣的在線調(diào)解平臺界面設計研究與實踐
- 金融投資中的財務管理技巧與風險識別
- 7.1《回望成長》教案- -2024-2025學年統(tǒng)編版道德與法治九年級下冊
- 北京2025年02月中國慈善聯(lián)合會招考2名工作人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 山東省泰安市肥城市2025年四年級數(shù)學第二學期期末教學質(zhì)量檢測試題含解析
- 廣東省廣州市天河區(qū)2024-2025學年數(shù)學四下期末達標測試試題含解析
- 重慶中醫(yī)藥學院《中級法語II》2023-2024學年第二學期期末試卷
- 日喀則地區(qū)2024-2025學年四年級數(shù)學第二學期期末統(tǒng)考試題含解析
- 陳銀子礦山基建施工組織方案方案
- 襄陽房地產(chǎn)市場月報2024年08月
- 工業(yè)互聯(lián)網(wǎng)平臺的架構與功能
- 八年級英語下冊課件教學
- 人教版(2019) 必修第二冊 Unit 1 Cultural Heritage Discovering Useful Structures(教案)
- 陳獨秀生平事跡
- 2024年人教版初三數(shù)學(下冊)模擬試卷及答案(各版本)
- 《大學美育》高職全套教學課件
- 醫(yī)院CT機房裝飾改造工程施工組織設計
- 軟件工程自考02333重點難點匯集
- DZ∕T 0213-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 石灰?guī)r、水泥配料類(正式版)
評論
0/150
提交評論