版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、畢業(yè)設(shè)計(論文)題 目基于J2ME的RPG小游戲的設(shè)計與實現(xiàn)系 (院)計算機科學(xué)技術(shù)系專 業(yè)計算機科學(xué)與技術(shù)班 級學(xué)生姓名學(xué) 號指導(dǎo)教師職 稱53 / 58文檔可自由編輯打印基于J2ME的RPG小游戲的設(shè)計與實現(xiàn)摘 要手機通訊時代已經(jīng)到來,手機游戲產(chǎn)業(yè)得到迅猛的發(fā)展,手機游戲正在變成互動、交流、娛樂的重要媒介之一,并且越來越受到青少年的青睞。該課題旨在設(shè)計并開發(fā)一款有利于青少年身心健康的手機游戲。該課題所研究闖關(guān)類手機游戲是RPG類手機游戲中的經(jīng)典類型,該課題通過制作一款簡單有趣的RPG類手機游戲,給出了開發(fā)RPG類手機游戲的完整的軟件架構(gòu)。課題對RPG游戲的實現(xiàn)算法和技巧進行了詳細(xì)的闡述,對
2、于代碼的重用和游戲的擴展具有很好的借鑒意義。本課題對游戲的優(yōu)化進行了研究,詳細(xì)說明了手機游戲優(yōu)化的必要性,對一些實用優(yōu)化方法進行了分析。關(guān)鍵詞:J2ME;RPG游戲;局部刷新;軟件架構(gòu)The Design and Development of Mobile Phone Puzzle Game Based on Java MEAbstractWith the advent of mobile age, mobile games industry has a rapid development. And the mobile phone games are becoming one of the
3、important ways of interactive, communication and entertainment. It has taken the fancy of the young people.The subject aimed at the design and development of physical and mental of young people of a mobile game. The subject category of mobile RPG games is a classic mobile phone game, it given a comp
4、lete production process of the type of RPG mobile game. The subject is also described in detail of the realization of algorithm. This is a great significance of code reuse and extension of other games. And the subject has been studied in detail of the optimization methods and made a number of practi
5、cal optimization methods of the game. Key words: J2ME;RPG;Partial refresh;Software architecture目 錄摘 要IAbstractII目 錄1第一章 引言11.1 研究的背景和范圍11.2 研究的目的11.3 課題研究的預(yù)期結(jié)果11.4 課題研究的地位、作用和意義2第二章 理論依據(jù)、試驗基礎(chǔ)和研究方法的闡述32.1 J2ME的體系結(jié)構(gòu)32.2 MIDlet及其運行機制42.3 本課題的開發(fā)環(huán)境5第三章 游戲的軟件總體設(shè)計與設(shè)計思想73.1 游戲的總體要求73.2 游戲的主要模塊的功能73.3 游戲程序的設(shè)
6、計思想8第四章 游戲的詳細(xì)設(shè)計104.1 游戲流程設(shè)計104.2 游戲類的設(shè)計及功能10第五章 游戲的具體實現(xiàn)125.1閃屏的實現(xiàn)125.2主菜單的實現(xiàn)135.3 RMS系統(tǒng)的實現(xiàn)145.4 游戲類算法與實現(xiàn)155.4.1 游戲界面的具體設(shè)計155.4.2 游戲過關(guān)的算法155.5 游戲說明類的實現(xiàn)165.6 游戲聲音控制類的實現(xiàn)16第六章 游戲優(yōu)化技巧的研究186.1手機游戲優(yōu)化的必要性186.2代碼的優(yōu)化技巧186.2.1合理利用“垃圾回收器”186.2.2優(yōu)化資源文件196.2.3使用代碼混淆器優(yōu)化內(nèi)存196.2.4對paint()方法的優(yōu)化196.2.5靜態(tài)變量的使用196.2.6局部
7、刷新20結(jié)論21參考文獻22謝 辭23第一章 引言1.1 研究的背景和范圍通信無限暢通時代已經(jīng)到來,手機以其快捷便利的特點極大的滿足了人們交流的需求。手機已與現(xiàn)代生活緊密地結(jié)合在一起。與之同時,手機用戶越來越注重手機提供的娛樂質(zhì)量,調(diào)查表明,人們尤其是年輕人使用手機的部分需求是玩手機游戲1。消費者希望手機盡可能的整合一些娛樂功能,特別是游戲功能。手機游戲正在快速的走進每個手機用戶的生活。如果需要源代碼聯(lián)系我近年來,各種手機游戲平臺的成熟和完善使得高質(zhì)量的手機游戲的生產(chǎn)成為現(xiàn)實。集成在手機等移動信息設(shè)備中的J2ME平臺能夠出色的完成手機游戲各種苛刻的條件,所以開發(fā)基于J2ME的手機游戲已成為開發(fā)
8、人員和手機制造商的首選2。手機游戲市場的發(fā)展導(dǎo)致了手機游戲需求量的迅猛增長,手機游戲制作業(yè)的偏快發(fā)展,很大程度上缺少開發(fā)經(jīng)營規(guī)范和游戲內(nèi)容是否健康有益的監(jiān)督。有一部分手機游戲不利于青少年的健康成長,很多家長和老師十分擔(dān)心手機游戲也會像電腦網(wǎng)絡(luò)游戲一樣給青少年帶來負(fù)面影響2。所以開發(fā)出既能娛樂身心,又能開發(fā)智力的手機游戲勢在必行。并且手機游戲市場需求中,對RPG類手機游戲的需求占很大一部分。1.2 研究的目的RPG類手機游戲具有很強的娛樂性和趣味性。在上述基礎(chǔ)上,本課題準(zhǔn)備開發(fā)一款簡單有趣的RPG類手機游戲。著眼于J2ME技術(shù)在手機娛樂上的應(yīng)用,開發(fā)一個基于MIDP2.0的手機RPG游戲程序,并
9、介紹了游戲的結(jié)構(gòu)分析和具體功能的實現(xiàn)。游戲的界面和運作方式,盡力模擬手機的普遍性形式,成為一個完整的手機游戲。本課題針對市場上開發(fā)小型手機游戲缺少有效的優(yōu)化方法,提出一些實用的優(yōu)化技巧。1.3 課題研究的預(yù)期結(jié)果本課題旨在開發(fā)一款RPG類手機闖關(guān)游戲。其主要目的就是為了娛樂身心。它采用目前最流行的J2ME平臺。使用的開發(fā)工具有NetBeans6.1,WTK 2.5.2。支持類型為MIDP2.0,CLDC1.1。開發(fā)出的闖關(guān)游戲是RPG類游戲中的典型類型,具有很強的娛樂性和趣味性。玩家通過按鍵操作游戲的進行,過關(guān)之后可直接進入下一關(guān)。游戲可以暫停和繼續(xù)游戲。游戲中有聲音并有聲音控制。本課題將設(shè)計
10、出一個完整的、科學(xué)的RPG類手機游戲,并就每個功能模塊的實現(xiàn)方法給出詳細(xì)的闡述,對某些技巧和算法做出細(xì)致的解釋說明。此外,本課題還將詳細(xì)說明手機游戲優(yōu)化的必要性,并提出幾種實用的優(yōu)化方法。如果需要源代碼聯(lián)系我1.4 課題研究的地位、作用和意義本課題將制作一款集娛樂性和趣味性于一體的手機RPG類游戲。并且要規(guī)范化編程,使用戶界面和操作更加的合理和人性化。本課題設(shè)計的特點如下:(1) 游戲老幼皆宜,娛樂身心。(2) 游戲可以隨時存檔退出或繼續(xù)游戲,不會因中斷而必須重新開始游戲。(3) 游戲引擎的合理設(shè)計和用戶高級界面的充分利用,使得玩家時刻感受到游戲快速響應(yīng)。(4) 本設(shè)計將通過精致的美工設(shè)計吸引
11、玩家的注意力。(5) 將運用Java多線程的編程機制。(6) 將通過人性化的操作設(shè)計,隨時開啟或關(guān)閉游戲的音效。(7) 將通過獨立的閃屏來顯示玩家成功通關(guān)所用的時間,并顯示其他歷史最好的記錄。做成之后,本課題將一般手機開發(fā)具有通用性和指導(dǎo)性。本課題對RPG游戲每個功能模塊做出詳細(xì)的闡述,這對今后RPG類手機游戲的開發(fā)起很大的作用。本課題還將分析幾種實用的優(yōu)化方法,這對今后類似軟件的制作提供參考價值。第二章 理論依據(jù)、試驗基礎(chǔ)和研究方法的闡述2.1 J2ME的體系結(jié)構(gòu)Sun公司的Java目前有三個平臺,即J2EE( Java2 EnterpriseEdition )、J2SE( Java2 St
12、andard Edition )和J2ME。作為平臺,J2EE定位于服務(wù)器端,J2SE定位于客戶端,J2ME則定位于嵌入式系統(tǒng)。它們都要基于Java虛擬機(JVM)才能運行。J2ME采用模塊化的結(jié)構(gòu),底層是宿主機的操作系統(tǒng),內(nèi)部則分為三層,Java VirtualMachine(虛擬機層);Configuration(配置層);Profile(簡表層)。J2ME有兩類虛擬機:CVM(C虛擬機)和KVM(K虛擬機),CVM功能比KVM功能更為強大;Configu-ration層:Configuration是J2ME對于嵌入式設(shè)備的規(guī)范,在這些規(guī)范中,定義了設(shè)備至少要符合的運算能力、供電能力和內(nèi)存
13、大小等規(guī)范,按照規(guī)范一般把嵌入式設(shè)備分為CLDC和CDC兩大類。Profile層:這一層對于用戶和程序開發(fā)人員來說是最常見的。Profile中定義了與特定嵌入式設(shè)備緊密相關(guān)的擴充類庫,這些擴充類庫是建立在Configuration所定義的核心類庫基礎(chǔ)上的,它是架構(gòu)在Configuration之上的規(guī)范。針對移動電話內(nèi)存小、速度慢和I/O差的特點,J2ME對JVM、Configuration和Profile三層做了特殊的實現(xiàn)。在JVM層,J2ME在手機上移植了KVM(Kilobyte VirtualMachine),只需要幾百KB的內(nèi)存就可以運行;在Configuration層,J2ME規(guī)定了C
14、LDC(Connected Limited Device Configutation),它對設(shè)備的運算能力和內(nèi)存大小都有具體的限制。CLDC不支持浮點運算;在Profile層,J2ME規(guī)定了MIDP(Mobile Information Device Profile)。MIDP定義了在手機上運行的Java程序的規(guī)范,包括應(yīng)用程序生命周期、各種UI界面組件、支持Record存儲數(shù)據(jù)和HTTP連接等等,這些在CLDC的基礎(chǔ)上的附加功能是通過擴充新的Java類庫來實現(xiàn)的。J2ME通用結(jié)構(gòu)與手機中的J2ME結(jié)構(gòu)之間的對應(yīng)關(guān)系如表所示。表2-1 J2ME通用結(jié)構(gòu)和用于手機的J2ME結(jié)構(gòu)之間的對應(yīng)關(guān)系用戶
15、程序應(yīng)用程序應(yīng)用模型層MIDP配置層CLDCJAVA核心PIJAVA虛擬機層KVM本地操作系統(tǒng)手機操作系統(tǒng)J2ME的通用結(jié)構(gòu) 用于手機的J2ME結(jié)構(gòu)2.2 MIDlet及其運行機制在MIDP的上層的應(yīng)用程序被稱為MIDlet。這些MIDlet在底層CLDC的支持下,通過MIDP中提供的包獲得更多的功能。MIDlet可以直接使用MIDP本身提供的類庫以及MIDP從CLDC中繼承的那部分API。MIDlet程序的運行是由startApp(),pauseApp()和destroyApp()這3個方法控制的。它們都在javax.microedition.midlet.MIDlet中定義。所有的MIDl
16、et都必須實現(xiàn)這3個方法。startApp()方法用于標(biāo)志一個MIDlet的開始執(zhí)行,與HelloWorld程序的Constructor不同,startApp()不光是在初始化完一個MIDlet時執(zhí)行,只要該MIDLet被從Paused態(tài)激活變?yōu)锳ctive態(tài),startApp()就會被調(diào)用。pauseApp()方法標(biāo)志著MIDlet進入Pause態(tài),而destroyApp()方法標(biāo)志著MIDlet進入destroyed態(tài)10。MIDlet的執(zhí)行是通過AMS(Application Management software)來管理的11。AMS是位于操作系統(tǒng)級別上來管理MIDlet運行的底層機制
17、的總稱,所謂MIDlet state(MIDlet)狀態(tài)就是它控制管理的.MIDlet state確保了AMS隨時可以銷毀該MIDlet,同時MIDlet請求進入Pause態(tài),當(dāng)需要時再次激活。MIDlet State 分為Paused,Active,destroyed三種狀態(tài)。當(dāng)AMS創(chuàng)建一個新的MIDlet實體時,對應(yīng)于MIDlet,表現(xiàn)為其constructor被調(diào)用,進入Paused狀態(tài)。當(dāng)所有的準(zhǔn)備工作都做好后,AMS判斷現(xiàn)在MIDlet可以運行了,于是調(diào)MIDlet.startApp()方法,進入Active態(tài)。當(dāng)AMS決定要把MIDlet轉(zhuǎn)入Paused態(tài),就會調(diào)用MIDlet.
18、pauseApp()方法,MIDlet就會暫停執(zhí)行,通常Paused態(tài)會用于釋放所占資源。當(dāng)AMS判斷不再需要某個MIDlet實體時,就會調(diào)用MIDlet.destroyApp()把它銷毀掉12。2.3 本課題的開發(fā)環(huán)境開發(fā)J2ME手機游戲程序,有很多開發(fā)工具,本課題采用NetBeans6.1、JDK和WTK進行開發(fā)。JDK是Java開發(fā)工具包(Java development kit)的縮寫,使用Java必須安裝JDK。J2ME是Java語言的一種,所以在安裝其他J2ME開發(fā)工具之前,也必須安裝JDK。本課題采用的JDK是JDK1.6.0。WTK的全稱是Sun J2ME Wireless T
19、oolkit,它是Sun公司提供的無線開發(fā)工具包。此工具包是為了幫助開發(fā)人員簡化J2ME的開發(fā)過程而設(shè)計的。該工具包包含了完整的生成工具、實用程序以及設(shè)備仿真器。使用WTK工具開發(fā)的J2ME應(yīng)用程序可在兼容“Java Technology for the Wireless Industry(JTWI,JSR 185)”規(guī)范的設(shè)備上運行13。本課題采用的WTK的版本是WTK2.5.2版。在這個版本中,WTK全面的支持JTWI 規(guī)范,同時也可以使用該版本開發(fā)面向CLDC1.0 和MIDP1.0 的應(yīng)用程序。系統(tǒng)要求上,WTK2.5.2至少需要50MB的可用硬盤,128MB的系統(tǒng)RAM和800MHZ
20、 Pentium CPU。在實際應(yīng)用中,僅僅使用Sun公司提供的WTK還不夠。想開發(fā)更適合某種手機的應(yīng)用程序,還需要有手機廠商提供的SDK。我們可以這樣理解各手機廠商提供的SDK:它在WTK的基礎(chǔ)上增加了自己的模擬器和自己的擴展API(應(yīng)用程序接口)。廠商的SDK提供了額外的針對其手機性能的擴展類庫和模擬器。每個廠商提供的SDK是不同的。本課題采用Nokia的SDK,Nokia廠商對J2ME的支持是一流的。NetBeans是一個全功能的開放源碼Java IDE,可以幫助開發(fā)人員編寫、編譯、調(diào)試和部署Java應(yīng)用,并將版本控制和XML編輯融入其眾多功能之中。NetBeans可支持Java 2平臺
21、標(biāo)準(zhǔn)版(J2SE)應(yīng)用的創(chuàng)建、采用JSP和Servlet的2層Web應(yīng)用的創(chuàng)建,以及用于2層Web應(yīng)用的API及軟件的核心組的創(chuàng)建。此外,NetBeans 最新牒還預(yù)裝了兩個Web服務(wù)器,即Tomcat和GlassFish,從而免除了繁瑣的配置和安裝過程。所有這些都為Java開發(fā)人員創(chuàng)造了一個可擴展的開放源多平臺的Java IDE,以支持他們在各自所選擇的環(huán)境中從事開發(fā)工作,如Solaris、Linux、Windows或Macintosh。第三章 游戲的軟件總體設(shè)計與設(shè)計思想3.1 游戲的總體要求(1) 運行平臺本課題軟件目標(biāo)運行平臺為所有支持CLDC1.1、MIDP2.0,屏幕分辨率不小于1
22、76208的手機設(shè)備。(2) 界面要求游戲的每個界面要求精致、美觀,所有界面采用高級界面和低級界面相結(jié)合繪制。(3) 速度要求要求在滿足平臺需求的各手機上運行時畫面流暢,聲音播放正常,操作無延遲感。(4) 游戲規(guī)則玩家通過移動人物,使用人物的技能打敗怪物而完成游戲。3.2 游戲的主要模塊的功能(1) 閃屏模塊實現(xiàn)打開游戲時的動畫,用來顯示軟件的名稱、版本和其他信息,用戶可按鍵跳過閃屏進入菜單界面。并且閃屏顯示的版本信息是使用線程繪制上去的,字體具有陰影效果。(2) 主菜單模塊玩家通過主菜單界面可選擇新游戲、繼續(xù)游戲、游戲說明、高分紀(jì)錄、聲音控制和退出游戲選項。(3) 游戲界面模塊游戲進行的界面
23、,玩家通過按鍵進行操作,并可以看到自己所用的時間。(4) 高分紀(jì)錄模塊用來顯示歷史上的最少用時。(5) 游戲結(jié)束模塊只有玩家通關(guān)后才會出現(xiàn),它顯示玩家過關(guān)所用的時間和歷史上的最少用時。(6) 游戲說明模塊介紹游戲的情況和游戲的操作方法等。3.3 游戲程序的設(shè)計思想在游戲中我們要MIDP用戶界面,所謂“用戶界面”是指設(shè)備內(nèi)的應(yīng)用程序與用戶之間的機制。MIDlet的事件處理分為高級與低級事件處理。MIDP所提供的javax.microedition.lcdui包用于手機用戶界面與應(yīng)用。LCDUI包的體系如圖3.1所示。圖3.1 LCDUI包的體系Screen類屬于高級圖形用戶界面組件,Canvas
24、是低級圖形用戶界面組件,在同一時刻,只能有唯一一個Screen或者Canvas類的子類顯示在屏幕上,我們可以調(diào)用Display的setCurrent()的方法來將前一個畫面替換掉,我們必須自行將前一個畫面的狀態(tài)保留起來,并自己控制整個程序畫面的切換。同時我們可以運用javax.microedition.lcdui.Command類來給我們的提供菜單項目的功能,分別是:Command.BACKCommand、Command.CANCEL、Command.EXIT、Command.HELP、Command.ITEM、Command.OK、Command.SCREEN和Command.STOP,我們
25、在Displayable對象中定義了addCommand()和removeCommand()兩個方法,這就意味著我們可以在高級UI和低級UI中同時使用Command類,同時我們通過注冊Command事件來達到事件處理的目的,即Command必須與CommandListener接口配合使用才能反映用戶的動作。Screen類的主要結(jié)構(gòu)如圖3.2所示。圖3.2 Screen類的結(jié)構(gòu)第四章 游戲的詳細(xì)設(shè)計4.1 游戲流程設(shè)計圖4.1是這個游戲的流程設(shè)計,主要是對游戲的功能有一個很直觀的顯示。圖4.1 游戲流程設(shè)計4.2 游戲類的設(shè)計及功能下面分別對游戲中設(shè)計的類和功能做一個描述。MainMidlet類
26、游戲的啟動MenuCanvas類游戲菜單類SplashScreenCanvas類游戲加載畫面BulletSprite類生成子彈并控制其行為EnemySprite類、PlayerSprite 類 、MainSprites類三個類控制所有人物精靈的移動以及其他行為!ToolSprite類道具生成類gamePass類控制游戲上下關(guān)的類gameStore類、gameGuan類用來控制游戲進度和關(guān)數(shù)的存儲!SoundEffects類游戲音樂的控制類InfoBar類用于生成滾動字幕第五章 游戲的具體實現(xiàn)5.1閃屏的實現(xiàn)如果需要源代碼聯(lián)系我閃屏類的設(shè)計考慮在閃屏運行時玩家可以通過按鍵跳過閃屏。閃屏在啟動游戲
27、時出現(xiàn),顯示一張圖片和游戲的名稱版本,并且2秒鐘后自動結(jié)束。效果如圖5.1所示:圖5.1 閃屏效果圖閃屏類SplashScreen.java繼承了Canvas類,初始化時加載圖片并創(chuàng)建一個線程。首先使用Canvas.getHeight()方法和Canvas.getWidth()方法獲得屏幕的高度和寬度,并將這兩個值傳入drawImage()方法中繪制圖片,實現(xiàn)了對分辨率的自適應(yīng)。閃屏的線程啟動后,系統(tǒng)對是否已經(jīng)運行閃屏進行判斷,如果閃屏還沒有加載圖片等資源,系統(tǒng)將給它分配資源。在繪制版本號和游戲名稱的陰影效果時,我采用了增減坐標(biāo)的方法進行繪制。/將文字繪制在(centerX,CenterY-1
28、)坐標(biāo)處;drawText(g,centerX,CenterY - 1);/將文字繪制在(centerX,CenterY+1)坐標(biāo)處;drawText(g, centerX, centerY + 1);/將文字繪制在(centerX-1,CenterY)坐標(biāo)處;drawText(g, centerX - 1, centerY);/將文字繪制在(centerX+1,CenterY)坐標(biāo)處;drawText(g, centerX + 1, centerY); 經(jīng)過上述四步的繪制,就會在屏幕上實現(xiàn)文字的陰影效果,并且,可以在某兩步之間修改畫筆的顏色,這樣可以實現(xiàn)文字的彩色陰影。為了實現(xiàn)用戶通過按鍵跳
29、過閃屏,通過Runable接口,我在keyPressed(int keyCode)方法中采用如下策略:/對keyPressed(int keyCode)進行重寫public synchronized void keyPressed(int keyCode) if (!dismissed)/如果閃屏正在運行 dismissed = true;/閃屏停止運行 midlet.splashScreenDone();/轉(zhuǎn)入主菜單 /if執(zhí)行完畢 /keyPressed執(zhí)行完畢玩家在閃屏運行時進行了按鍵,那么系統(tǒng)調(diào)用splashScreenDone()方法用來裝載主菜單。此時,Java語言的垃圾回收器會將
30、閃屏所占用的資源進行回收8。5.2主菜單的實現(xiàn)閃屏結(jié)束之后進入主菜單界面,用戶通過主菜單可以進入新游戲,繼續(xù)游戲,游戲說明,聲音控制和退出游戲。效果如圖5.2所示。圖5.2 初次運行的主菜單效果圖游戲菜單的設(shè)計是整個游戲的開始,首先進行必要的變量初始化。接下來就是游戲進行的代碼編寫。每次開啟新游戲的時候,首先便是游戲的菜單。具體算法如下: public static Font mFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_LARGE); static GraphicsEffects ge = Graphic
31、sEffects.getInstance(); static SoundEffects se = SoundEffects.getInstance(); protected String helpStr =游戲背景:+nn+代表世界正義的奧運福娃們,在森林中玩耍,不小心有四個被不法之徒所逮捕,從而上演一個福娃挽救四個哥哥,同時為尋回奧運圣火的歷險記。+nn+操作方法:+nn+游戲中用方向鍵和2、4、6、8鍵控制主角移動以及進行菜單選擇,5鍵或OK鍵選定,1鍵英雄可以釋放技能,右軟鍵調(diào)出操作菜單,可保存游戲、暫停游戲、繼續(xù)游戲或退出游戲。+nn+關(guān)鍵提示:+nn+玩家每次打死一個Boss后將得到
32、一個道具,每個都有其特殊的作用。注意玩家的技能的使用次數(shù)使用限制的,只有不斷的通過道具來補充魔法值才能持久使用。;(初始化完畢)public MenuCanvas(MainMidlet midlet) public static void loadResource()public void start()public void run()public void keyPressed(int keyCode)public void selectedChoice(byte choice, boolean timeOut)public void showPopup(char imgMenu, cha
33、r altTexts,int timeOutInSeconds, int defaultChoice, int timeOutChoice)public void paint(Graphics g)5.3 RMS系統(tǒng)的實現(xiàn)游戲在主菜單界面,如果游戲選擇了讀取存檔,那么游戲載入RMS記錄的上次游戲暫停的各種數(shù)據(jù),當(dāng)游戲結(jié)束時,系統(tǒng)將所用的時間傳給結(jié)束屏幕,并且將這個時間與已經(jīng)記錄的最少時間進行比較,如果是最小時間,則刷新記錄。在玩家打開高分記錄時,系統(tǒng)要將最小時間傳給高分記錄屏幕。RMS系統(tǒng)是游戲中不可缺少的部分。J2ME提供了一個記錄管理系統(tǒng),即RMS,能夠持久的存儲數(shù)據(jù)。RMS提供了Reco
34、rdStore類,用于MIDlet應(yīng)用程序與RMS進行通信。RMS相當(dāng)于一個小型的數(shù)據(jù)庫,RecordStore相當(dāng)于數(shù)據(jù)庫的表。每個表中有若干條記錄,每條記錄由一個int型的記錄號和一個byte型的數(shù)組構(gòu)成。記錄號可以看作是“表”的“主鍵”,byte型數(shù)組用來存儲數(shù)據(jù)結(jié)構(gòu)。本游戲中建立了兩種方法來保存和讀取數(shù)據(jù):讀取存檔:讀取存檔就是從數(shù)據(jù)庫的記錄集中讀取游戲數(shù)據(jù),使用RecordStore類的靜態(tài)方法openRecordStore(recordStoreName,createIfNecessary)來打開一個RecordStore,將createIfNecessary的值設(shè)置為true,表
35、示如果這個RecordStore不存在就會新建一個RecordStore。打開“數(shù)據(jù)表”后,可采用RecordStore類的getRecord(recordId)方法來得到一個記錄,利用這個記錄構(gòu)造一個ByteArrayInputStream的實例bais,再使用DataInputStream包裝它,得到一個實例dis,使用dis的readLong()方法讀出存檔并強制轉(zhuǎn)換成int型的變量,這樣,數(shù)據(jù)就被讀取出來了。最后關(guān)閉RecordStore。存儲數(shù)據(jù):首先打開一個RecordStore,方法與讀取存檔中的打開一個RecordStore相同,建立一個ByteArrayOutputStrea
36、m的實例baos,然后將它作為參數(shù)傳入DataOutputStream的構(gòu)造函數(shù)來產(chǎn)生一個實例dos。然后使用dos的方法writeLong()將游戲產(chǎn)生的需要存儲的數(shù)據(jù)寫入byte型的數(shù)組中。將這個數(shù)組傳給addRecord()方法就可以增加一條記錄了。最后關(guān)閉RecordStore。5.4 游戲類算法與實現(xiàn)5.4.1 游戲界面的具體設(shè)計游戲界面的設(shè)計分場景設(shè)計和操作設(shè)計。(1)場景設(shè)計游戲每關(guān)有一個福娃為主角色,福娃有技能殺死怪物,每關(guān)有自己的地圖,福娃有一定的血量,當(dāng)福娃的血條里的血量沒有時,游戲結(jié)束。(2)操作設(shè)計角色的走位用手機的四個方向鍵控制,確認(rèn)鍵是角色的技能鍵。5.4.2 游戲
37、過關(guān)的關(guān)鍵程序在游戲進行中共分為五關(guān),當(dāng)一關(guān)結(jié)束后要進入下一關(guān)。實現(xiàn)算法如下:public class gamePass extends Canvas implements CommandListener public gamePass() / 全屏幕顯示 public void run() public void kongzhi() public void draw() repaint();public void commandAction(Command command, Displayable displayable) 5.5 游戲說明類的實現(xiàn)游戲說明類的設(shè)計,告訴玩家一些關(guān)于游戲操作方
38、法和游戲設(shè)計者的信息。如圖5.3所示。圖5.3 游戲說明效果圖5.6 游戲聲音控制類的實現(xiàn)游戲聲音控制類用來控制游戲進行中聲音的開關(guān)。如圖5.4所示。圖5.4 游戲聲音控制效果圖關(guān)鍵程序如下:public class SoundEffects ()public Player createPlayer(String , int loop)public Player createPlayerMP3(String , int loop)public void playSound(Player p)public void pauseSound(Player p)public void stopSoun
39、d(Player p)public void closeSound(Player p)第六章 游戲優(yōu)化技巧的研究6.1手機游戲優(yōu)化的必要性J2ME是被修剪過后的Java版本,它適合于性能有限的小型設(shè)備,比如手機。手機設(shè)備在內(nèi)存和CPU等方面與臺式計算機相比具有很大的局限性,這種設(shè)備具有如下特征:(1) 輸入能力受限制(按鍵數(shù)目少)。(2) 顯示區(qū)域較小。(3) 存儲空間有限。(4) CPU計算速度較慢。用J2ME平臺來開發(fā)手機游戲,對于開發(fā)者來講是一個挑戰(zhàn),因為所開發(fā)的游戲必須運行在性能相對較低的手機設(shè)備上。一般情況下,剛剛開發(fā)完成的游戲運行在真機設(shè)備上常常會出現(xiàn)一些問題,如:占用內(nèi)存資源過多
40、,運行緩慢等。在這些情況下,必須對游戲產(chǎn)品進行各方面的優(yōu)化,提高游戲的生存能力。6.2代碼的優(yōu)化技巧6.2.1合理利用“垃圾回收器”使用Java的人都知道垃圾回收機制是Java的一大優(yōu)點,它使得Java開發(fā)者可以不用考慮內(nèi)存的分配和釋放工作。顯然,Java語言的這個特性方便了我們的開發(fā),但這個特性也帶來了一些隱患。舉個例子來說,游戲中經(jīng)常需要進行場景的切換,例如在本游戲中玩家需要從游戲場景返回主菜單場景。進入菜單場景后,游戲場景已經(jīng)沒有實際顯示的價值了,這時需要釋放游戲場景所占用的資源。在處理這種切換操作時,很多開發(fā)者采用垃圾回收器來回收游戲場景所占用的資源。咋看之下,這種處理方法似乎并無不妥
41、,垃圾回收器的確可以自動回收不再使用的內(nèi)存資源。但是垃圾回收器不會立即處理游戲場景所占用的資源,而是等待一段時間后才對這些資源進行回收。在游戲從游戲場景切換到主菜單場景的開始階段,系統(tǒng)的內(nèi)存中會同時存儲兩個場景的資源,此時,系統(tǒng)內(nèi)存將很可能溢出。既然垃圾回收器存在上面所述的問題,那么該如何解決這個問題呢?我們通常采用的方法是手工釋放多余的內(nèi)存資源。也就是說,除了簡單類型的變量外,必須將所有不再使用的對象設(shè)置為Null。6.2.2優(yōu)化資源文件在手機游戲中,對資源文件的優(yōu)化也可以有效的減少占用的內(nèi)存資源。優(yōu)化資源文件主要是對圖片資源進行優(yōu)化,游戲中使用圖片會占用大量的內(nèi)存資源,一張3K大小的圖片可
42、以占用30K甚至更多的手機內(nèi)存空間。所以很有必要對其進行優(yōu)化。我們使用PhotoShop等工具軟件制作出一張圖片后,把圖片的“模式”改為“索引”模式,可以大大減少圖片所占用的空間。如果有多張規(guī)則相同的圖片,建議使用Photoshop等工具軟件將這些圖片拼成一張長條的大圖片,之所以這樣做不僅可以節(jié)省存儲空間,還可以減少I/O操作的次數(shù)。這是不難理解的,因為系統(tǒng)每次讀一張圖片都要進行一次I/O操作。本課題中游戲場景需要8張圖片,如果獨立存儲,程序需要進行8次I/O操作;而將小圖片拼成大圖片后,程序只需要做一次I/O操作即可。6.2.3使用代碼混淆器優(yōu)化內(nèi)存代碼混淆器可以用來保護手機游戲的代碼,加大
43、對代碼反編譯的難度。實際上使用代碼混淆器來進行游戲占用內(nèi)存的優(yōu)化也是不錯的選擇。經(jīng)過混淆器打包后,游戲的代碼會變小,因而,內(nèi)存中用來存儲代碼的空間也自然就會變小。如果有一款手機游戲,它的代碼部分占用60K的空間,那么該游戲經(jīng)過代碼混淆器打包后,代碼部分占用的部分可以是50K左右。這樣就節(jié)省了10K左右的存儲空間,這對于制作手機游戲來講是非常值得的。本課題使用WTK進行混淆處理,打包后代碼比混淆前少了20K。6.2.4對paint()方法的優(yōu)化制作手機游戲經(jīng)常會遇到這樣的問題:在模擬器上跑得很好的程序在實際的手機上卻很慢,甚至無法運行,這主要是因為“重畫機制”的使用不當(dāng)所致,J2ME中Canva
44、s類的paint()方法的程序會導(dǎo)致設(shè)備無法正常工作。所以,對于paint()方法的優(yōu)化就顯得特別重要。代碼中耗費CPU計算時間的操作盡量不好在paint()中出現(xiàn),尤其是創(chuàng)建圖片或加載其他資源的操作。本課題中對所有創(chuàng)建圖片和加載其他資源的操作進行了方法的抽取和分離,當(dāng)某一資源使用前才對其進行加載,并且需要調(diào)用的時候才讓其占據(jù)空間,運行完畢后自動調(diào)用方法釋放相應(yīng)的空間。6.2.5靜態(tài)變量的使用在Java程序中,靜態(tài)變量是指使用static關(guān)鍵字定義的變量。靜態(tài)變量在內(nèi)存中只保存一份拷貝,但它可以被公用,在程序運行期間靜態(tài)變量可以被任何對象訪問,從而避免了重復(fù)拷貝所造成的內(nèi)存資源的浪費。不過使用
45、靜態(tài)變量時要加以小心,因為靜態(tài)變量的生命周期較長,而且不容易被垃圾回收器所“回收”,所以要合理的運用靜態(tài)變量,不要適得其反。通常情況下例如變量所包含的對象體積較大或某類的變量需要與其他類共享時使用靜態(tài)變量。通常使用靜態(tài)變量對程序進行優(yōu)化后,程序所占用的內(nèi)存空間會減少5K到10K。結(jié)合本課題來講,游戲中的MIDlet傳入到其他類中的對象就是一個靜態(tài)的變量。因為它在整個程序運行過程中生命周期最長,需要被所有的對象訪問。6.2.6局部刷新手機游戲的程序中每次調(diào)用repaint()方法,系統(tǒng)就要調(diào)用paint()方法,對整個手機屏幕的圖像進行刷新。但是,并不是每次調(diào)用repaint()方法都需要刷新屏
46、幕,例如有時只需要刷新屏幕左上角的一小部分圖像。所以只需要實現(xiàn)局部刷新就可以了。局部刷新的方法有多種,例如,利用Canvas類的Clip方法來實現(xiàn)局部刷新。可以先通過setClip()方法設(shè)定一個矩形區(qū)域,這時再調(diào)用Clip方法就僅僅刷新屏幕在該區(qū)域的圖像,因此可以節(jié)省CPU的開銷。結(jié)合本課題,當(dāng)玩家在游戲進行中每操作一次,程序調(diào)用一次repaint()方法將整個屏幕重繪。事實上,玩家有時進行了空操作,如非法按鍵導(dǎo)致的操作無效,這時就不應(yīng)該進行重繪操作,但由于線程正在運行,運行標(biāo)志依然為true,所以run()方法就會被調(diào)用進行一次重繪。針對這個問題,我設(shè)置了操作判斷,只有有效的修改屏幕的操作
47、才調(diào)用repaint()方法。而且,游戲界面的右下方顯示運行的時間要隨時的更新,就采用Canvas類的Clip方法來局部刷新,其他的地方無需重繪,這樣就節(jié)省了CPU大量的開銷。結(jié)論目前,手機游戲以其“隨時隨地”玩的優(yōu)勢呈現(xiàn)快速增長的態(tài)勢。而且,手機游戲已經(jīng)向網(wǎng)絡(luò)游戲開發(fā)全面的滲透。目前,手機游戲業(yè)已進入一個高利潤的穩(wěn)定增長期。中國擁有世界上最大的手機用戶群,所以國內(nèi)手機游戲產(chǎn)業(yè)將擁有一個巨大的市場空間。手機游戲產(chǎn)業(yè)不僅在國內(nèi)如此火爆,而且在全世界也正爆發(fā)性地成長。雖然手機游戲市場呈現(xiàn)火爆的趨勢,但目前國內(nèi)手機游戲產(chǎn)業(yè)仍然存在著一些急需解決的問題,如人才匱乏制約手機游戲產(chǎn)業(yè)的發(fā)展。而且,游戲產(chǎn)品
48、質(zhì)量存在一定的問題,內(nèi)容的不健康和樣式的粗制濫造等問題十分令人擔(dān)憂。開發(fā)J2ME手機游戲程序,通常使用WTK、NetBeans和JBuilder三種工具。安裝J2ME程序開發(fā)工具之前需要正確的安裝和配置JDK。安裝WTK后,若針對某一型號的手機進行開發(fā),還需要下載并安裝該手機廠商提供的SDK。本課題采用NetBeans環(huán)境進行J2ME開發(fā)。本課題開發(fā)了一款有利于青少年健康的RPG類游戲,這款RPG游戲有很強的趣味性和娛樂性。課題從軟件需求入手,詳細(xì)的闡述了本游戲的設(shè)計思想和設(shè)計流程,開發(fā)出一個適合拼圖類手機游戲的軟件架構(gòu)。在設(shè)計這個框架的過程中,我盡力的從面向?qū)ο蟮闹R和敏捷開發(fā)知識中汲取營養(yǎng)
49、,將不同的知識架構(gòu)進行整合,內(nèi)化為自己的認(rèn)知。并在此基礎(chǔ)上,將這些認(rèn)知應(yīng)用在手機游戲軟件架構(gòu)的設(shè)計上。課題系統(tǒng)的給出了每種菜單、RMS系統(tǒng)和游戲的算法的實現(xiàn)方法和技巧。在設(shè)計游戲的各種菜單時,我基本上采用了軟件工程的思想進行了設(shè)計。本課題較為詳細(xì)的研究了手機游戲的優(yōu)化問題,給出了手機游戲優(yōu)化的必要性,而且提出了集中實用的優(yōu)化方法。雖然有些方法很普通,但是可以有效的優(yōu)化很多資源。本課題的進一步的設(shè)想是增加藍牙聯(lián)機功能,如此類似的游戲都可以使用本課題的軟件架構(gòu)來快速實現(xiàn)。參考文獻1張鵬,寧瑩璋,王雪梅.Java手機游戲?qū)嵗謨訫.北京:海洋出版社,2006:22-32.2榮欽科技.J2ME手機游戲
50、設(shè)計技術(shù)與實戰(zhàn)M.北京:電子工業(yè)出版社,2007:120-200.3劉斌.JavaME實用詳解M.北京:電子工業(yè)出版社,2007:110-112.4陳晉波,李雪娟,熊飛.白領(lǐng)就業(yè)指南:手機游戲開發(fā)實踐M.北京:電子工業(yè)出版社,2005:10-13.5陳躍峰.J2ME就業(yè)培訓(xùn)教程M.北京:中國電力出版社,2006:20-45.6楚軍華,李治柱.J2ME應(yīng)用程序性能優(yōu)化的探討J.計算機應(yīng)用與軟件,2008(1):10-13.7金春霞,白秋產(chǎn).基于J2ME的手機游戲開發(fā)與實現(xiàn)J.計算機與數(shù)字工程,2008(2):177-178.8丁月華,劉佳,楊沛.J2ME手機游戲開發(fā)平臺的設(shè)計與實現(xiàn)J.計算機工程
51、,2007(3):261.9Michael Morrison. Beginning Mobile Phone Game ProgtammingM,北京:人民郵電出版社,2005:20-145.10Yang Yiming,Pederson JO.A Comparative Study on Feature Selection in Text CategorizationA,Proceedings of the 14th International Conference on Machine learning Nashville,Morgan Kaufmann,1997(10):412-420.如
52、果需要源代碼聯(lián)系我。在這里我要鄭重的感謝老師,不僅僅因為他是我的指導(dǎo)老師。他在我的畢業(yè)設(shè)計過程中指引我如何去發(fā)現(xiàn)問題,教給我解決問題的方法。他對我的論文選題、理論研究、工作計劃安排以及論文的完成都給予了精心指導(dǎo)和嚴(yán)格要求。我認(rèn)為我需要強調(diào)的是,他是我的班主任,他教會了我樂觀面對生活和認(rèn)真面對工作的態(tài)度,這對我的課題的完成有直接的作用。在課題開發(fā)的過程中,我發(fā)現(xiàn)這個課題別人已經(jīng)做過了。宋鋒老師就鼓勵我,每個人眼中的世界都是不同的,你可以發(fā)現(xiàn)別人沒有發(fā)現(xiàn)的地方,偉人的成功況且是站在前人的肩膀上,我們這些學(xué)習(xí)者更要認(rèn)真的總結(jié)別人開發(fā)的經(jīng)驗,重要的是發(fā)現(xiàn)別人沒有研究到的領(lǐng)域,在這個領(lǐng)域創(chuàng)新,并努力提出
53、自己經(jīng)過科學(xué)驗證過的理論。非常的感謝老師,我想這種思想就是大膽的創(chuàng)新思想,并且還要科學(xué)務(wù)實的驗證自己的想法。感謝答辯組對本畢業(yè)設(shè)計的考核,如果可以得到專家的認(rèn)可將對我的學(xué)習(xí)和工作給予極大的鼓勵。你們客觀的評價和建議我將牢記在心,在今后的發(fā)展中揚長避短,更加努力的嚴(yán)格要求自己。最后,真心感謝所有關(guān)心和幫助過我的人們,我會繼續(xù)努力,不斷的提高自己的知識水平。參考: 畢 業(yè) 論 文論文題目學(xué) 院專 業(yè)年 級姓 名指導(dǎo)教師職 稱(200 年 月)教務(wù)處制畢業(yè)設(shè)計說明書與畢業(yè)論文撰寫的規(guī)范化要求一篇完整的畢業(yè)設(shè)計說明書或畢業(yè)論文有題目、摘要及關(guān)鍵詞、目錄、引言(前言)、正文、結(jié)論、謝辭、參考文獻、附錄等
54、幾部分構(gòu)成。要求理工科專業(yè)不少于4000字,文科專業(yè)不少于6000字。一、畢業(yè)設(shè)計說明書撰寫的主要內(nèi)容與基本要求一份完整的畢業(yè)設(shè)計說明書應(yīng)包括如下主要內(nèi)容:1題目設(shè)計課題名稱,要求簡潔、確切、鮮明。2中外文摘要及關(guān)鍵詞應(yīng)扼要敘述本設(shè)計的主要內(nèi)容、特點,文字要簡練。中文摘要約300字左右;外文摘要約250個實詞左右。關(guān)鍵詞35個。3目錄主要內(nèi)容的目錄。4前言應(yīng)說明本設(shè)計的目的、意義、范圍及應(yīng)達到的技術(shù)要求;簡述本課題在國內(nèi)(外)的發(fā)展概況及存在的問題;本設(shè)計的指導(dǎo)思想;闡述本設(shè)計應(yīng)解決的主要問題。 5正文(1)設(shè)計方案論證:應(yīng)說明設(shè)計原理并進行方案選擇。應(yīng)說明為什么要選擇這個方案(包括各種方案的
55、分析、比較);還應(yīng)闡述所采用方案的特點(如采用了何種新技術(shù)、新措施、提高了什么性能等)。(2)設(shè)計及計算部分:這是設(shè)計說明書的重要組成部分,應(yīng)詳細(xì)寫明設(shè)計結(jié)果及計算結(jié)果。(3)樣機或試件的各種實驗及測試情況:包括實驗方法、線路及數(shù)據(jù)處理等。(4)方案的校驗:說明所設(shè)計的系統(tǒng)是否滿足各項性能指標(biāo)的要求,能否達到預(yù)期效果。校驗的方法可以是理論分析(即反推算),包括系統(tǒng)分析;也可以是實驗測試及計算機的上機運算等。6結(jié)論概括說明本設(shè)計的情況和價值 ,分析其優(yōu)點、特色,有何創(chuàng)新,性能達到何水平,并指出其中存在的問題和今后的改進方向。7謝辭簡述自己通過本設(shè)計的體會,并對指導(dǎo)老師和協(xié)助完成設(shè)計的有關(guān)人員表示
56、謝意。8參考文獻應(yīng)列出主要參考文獻。9附錄將各種篇幅較大的圖紙、數(shù)據(jù)表格、計算機程序等作為附錄附于說明書之后。二、畢業(yè)論文撰寫的主要內(nèi)容與基本要求1題目題目應(yīng)該簡短、明確,要有概括性,讓人看后能大致了解文章的確切內(nèi)容、專業(yè)的特點和學(xué)科的范疇。題目的字?jǐn)?shù)要適當(dāng),一般不宜超過20字。字體為2中外文摘要及關(guān)鍵詞摘要也稱內(nèi)容提要,應(yīng)當(dāng)以濃縮的形式概括研究課題的主要內(nèi)容、方法和觀點,以及取得的主要成果和結(jié)論,應(yīng)反映整個論文的精華。中文摘要約300字左右為宜,同時要求寫出250個實詞左右的外文摘要。關(guān)鍵詞3-5個。摘要應(yīng)寫得扼要、準(zhǔn)確,一般在畢業(yè)論文全文完成后再寫摘要。在寫作中要注意以下幾點:(1)用精練、概括的語言表達,每項內(nèi)容均不宜展開論證。(2)要客觀陳述,不宜加主觀評價。(3)成果和結(jié)論性意見是摘要的重點內(nèi)容,在文字上用量較多,以加深讀者的印象。(4)要獨立
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安然公司培訓(xùn)制度
- 舞蹈培訓(xùn)班遲到制度
- 加強社會工作者培訓(xùn)制度
- 營養(yǎng)餐從業(yè)人員培訓(xùn)制度
- 教育培訓(xùn)崗位薪酬制度
- 商混站試驗人員培訓(xùn)制度
- 就業(yè)培訓(xùn)工作制度及流程
- 培訓(xùn)班上課規(guī)章制度
- 田野課程培訓(xùn)制度
- 美術(shù)培訓(xùn)機構(gòu)老師制度
- 魯科版高中化學(xué)必修一教案全冊
- 管理養(yǎng)老機構(gòu) 養(yǎng)老機構(gòu)的服務(wù)提供與管理
- 提高隧道初支平整度合格率
- 2022年環(huán)保標(biāo)記試題庫(含答案)
- 2023年版測量結(jié)果的計量溯源性要求
- 建筑能耗與碳排放研究報告
- GB 29415-2013耐火電纜槽盒
- 中國古代經(jīng)濟試題
- 真空采血管的分類及應(yīng)用及采血順序課件
- 軟件定義汽車:產(chǎn)業(yè)生態(tài)創(chuàng)新白皮書
- 安裝工程實體質(zhì)量情況評價表
評論
0/150
提交評論