計算機專業(yè)畢業(yè)設(shè)計論文-java游戲_第1頁
計算機專業(yè)畢業(yè)設(shè)計論文-java游戲_第2頁
計算機專業(yè)畢業(yè)設(shè)計論文-java游戲_第3頁
計算機專業(yè)畢業(yè)設(shè)計論文-java游戲_第4頁
計算機專業(yè)畢業(yè)設(shè)計論文-java游戲_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

手持設(shè)備上游戲“連連看”的實現(xiàn)摘要J2ME(Java2MicroEdition)是近年來隨著各種不同設(shè)備,尤其是移動通信設(shè)備的飛速發(fā)展而誕生的一項新的開發(fā)技術(shù)。它定位在消費性電子產(chǎn)品的應(yīng)用上,對設(shè)備的智能化、多樣化,提供了革命性的解決方案。Java良好的跨平臺特性在移動平臺的開發(fā)中顯示出了巨大的威力。Java語言面向?qū)ο蟮膬?yōu)勢也使得游戲開發(fā)變得更容易。隨著手機的日益普及,以及手機性能的不斷攀升,移動游戲潛在的市場比其它任何游戲平臺都要大。本論文著眼于J2ME技術(shù)的應(yīng)用,利用MIDP2.0提供的強大的游戲開發(fā)能力,開發(fā)一款可商用的手機游戲程序——連連看。本程序通過函數(shù)重載,實現(xiàn)了進行單人游戲的功能。游戲加入了難度調(diào)整,游戲紀錄的存儲,大大增強了游戲的娛樂性和互動性。游戲提供了良好的界面,游戲Logo,游戲幫助,一應(yīng)俱全,游戲可以隨時暫停和繼續(xù),實現(xiàn)了更為人性化的要求。本系統(tǒng)介紹了基于移動平臺的Java無線網(wǎng)絡(luò)游戲開發(fā)須具備的基礎(chǔ)知識和高級技巧,包括無線游戲的發(fā)展前景,主要開發(fā)工具的使用,J2ME的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具體功能的實現(xiàn)等。關(guān)鍵詞:J2ME連連看Handhelddevicesontherealizationofgames“PictureMatching”ABSTRACTJ2MEisakindoffastdevelopingtechnologyimplementedonvariousdevicesespeciallymobilecommunicationequipments.Itfocusesonapplicationforconsumptiveelectronicproducts,providingrevolutionarysolutiontotheintelligentizationanddiversificationoftheequipment.Javacharacteristicsofagoodcross-platforminthedevelopmentofthemobileplatformtodisplayagreatpower.Theadvantagesofobject-orientedJavelanguagealsomakesgamedevelopmenteasier.Withtheincreasingpopularityofmobilephones,aswellasrisingmobileperformance,mobilegamingmarketpotentialthananyothermajorgamingplatformshave.ThispaperfocusonJ2MEtechnologyapplications,usingMIDP2.0provideapowerfulgamedevelopmentcapabilities,thedevelopmentofacommercialmobilephonecanGames-PictureMatching.Thisprocedurefunctionoverloadingtoachievethefunctionsofthesingleplayergame.Addedtoadjustthethegamedifficulty,thegamerecordstorage,greatlyenhancingthegameandinteractiveentertainment.Gamesprovideagoodinterface,gamesLogo,gamehelp,offeringavarietyofgamescanbesuspendedatanytimeandcontinuetoachieveamorepersonalizedrequirements.ThispaperintroducestheJava-basedmobileplatformgamedevelopershavetohavewirelessnetworkbasicsandadvancedtechniques,includingtheprospectsforthedevelopmentofwirelessgame,themaindevelopmenttoolsused,J2MErelatedtechnologiesandtheprocessofstructuralanalysisandtherealizationofspecificfunctionsandsoon.KeyWords:J2MEPictureMatchi目錄MACROBUTTONInsertCrossReference第一章緒論 11.1手機游戲現(xiàn)狀 11.2游戲開發(fā)可行性分析 11.2.1開發(fā)的條件環(huán)境要求,技術(shù)可行性 11.2.2經(jīng)濟可行性 21.2.3操作可行性 31.3實現(xiàn)上的困難 31.3.1不同的屏幕尺寸問題 31.3.2手機內(nèi)存過小的問題 31.3.3顯示速度方面的問題 31.3.4可中斷性的問題 41.4本課題實現(xiàn)的意義 4第二章開發(fā)環(huán)境介紹和系統(tǒng)分析概述 52.1系統(tǒng)的運行環(huán)境和開發(fā)平臺 52.1.1Java語言特點 52.1.2硬件設(shè)備 62.1.3系統(tǒng)開發(fā)平臺 62.1.4關(guān)于WirelessToolkit 62.1.5J2ME集成開發(fā)工具 72.2系統(tǒng)需求分析 82.2.1需求分析基礎(chǔ)知識 82.2.2系統(tǒng)的綜合要求 92.2.3功能需求 102.2.4游戲開發(fā)環(huán)境的需求 112.2.5可靠性、可用性需求 112.2.6故障處理需求 112.2.7接口需求 122.2.8將來可能提出的要求 12第三章游戲的總體設(shè)計及詳細設(shè)計 133.1游戲的總體設(shè)計 133.1.1總體設(shè)計的設(shè)計原則 133.1.2游戲的總體設(shè)計 143.1.3程序流程 143.1.4本程序中的幾項的技術(shù) 153.1.5PNG圖片格式 163.1.6混淆器(Obfuscator)的使用 173.2游戲的詳細設(shè)計 173.2.1詳細設(shè)計的介紹 173.2.2界面的詳細設(shè)計 183.2.3功能的詳細設(shè)計 19游戲結(jié)束時的判斷 19第四章程序的分析和具體實現(xiàn) 204.1游戲進入前的選擇 204.2游戲邏輯及幾個重要類的實現(xiàn) 224.2.1GameCanvas類所實現(xiàn)的功能 224.2.2地圖的創(chuàng)建 224.2.3地圖的移動 234.2.4關(guān)于commandAction()方法和paint()方法 254.2.5記錄系統(tǒng)-最高分 26第五章系統(tǒng)測試與安裝 275.1游戲安裝 275.2游戲測試 275.2.1部分模塊的測試 275.2.2運行界面測試 28結(jié)束語 32參考文獻 33附錄 34致謝 42天津理工大學(xué)2010屆本科畢業(yè)設(shè)計說明書PAGE42第一章緒論1.1手機游戲現(xiàn)狀在當(dāng)今社會中,手機及其他無線設(shè)備越來越多的走進普通百姓的工作和生活,隨著信息化的不斷進展,手機及其他無線設(shè)備上娛樂功能的普及勢在必行。手機游戲服務(wù)從2002年興起,目前3G將加快移動網(wǎng)絡(luò)和傳統(tǒng)互聯(lián)網(wǎng)之間的融合,手機終端也必將朝智能化和PC化方向發(fā)展。2005年全球手機線上游戲?qū)⒂薪?8億美金商機,預(yù)計2010全球移動游戲業(yè)創(chuàng)收將超過100億美元,中國的手機游戲市場也會達到400億元人民幣的規(guī)模。2010年中國手機游戲市場進入二次盤整后的成長期,手機聯(lián)網(wǎng)游戲是帶動其發(fā)展的必然因素。截至2009年12月,全國手機用戶數(shù)達5.22億戶[1],成為世界上最大的手機使用國?,F(xiàn)在,手機游戲正在處在一個快速發(fā)展的時期。在歐洲,已經(jīng)初步形成了一個規(guī)模達數(shù)10億美元的行業(yè)市場,在2010年,北美市場規(guī)模預(yù)期將超越10億美元大關(guān)。但是傳統(tǒng)手機存在以下弊端:傳統(tǒng)手機出廠時均由硬件廠商固化程序,程序不能增加、刪除,有了錯誤也不能更新、修改,若要增加新功能必須另換一部手機。而Java技術(shù)在無線應(yīng)用方面的優(yōu)勢非常明顯:1.應(yīng)用程序可按需下載,而不是購買由硬件商提供的套件,可升級空間大。2.Java技術(shù)使網(wǎng)絡(luò)帶寬的應(yīng)用更為有效,因為應(yīng)用程序可以下載到器件上,并在本地運行,僅僅是在連接到服務(wù)器時才會占用網(wǎng)絡(luò)帶寬。隨著JAVA手機的誕生,手機游戲編程的靈活性與輕便性使得JAVA手機游戲成為游戲市場的又一亮點。由Java/J2ME技術(shù)構(gòu)建的可下載游戲不僅使手機游戲可以更為輕易地吸引到用戶的興趣,同時也有利于創(chuàng)造更為多樣化的計費形式[2]。1.2游戲開發(fā)可行性分析1.2.1開發(fā)的條件環(huán)境要求,技術(shù)可行性Java平臺演進到Java2后,Java平臺分別針對不同領(lǐng)域的需求被分成四個版本,亦即J2EE、J2SE、J2ME以及JavaCard(其結(jié)構(gòu)示意圖見圖1.1)。越在同心圓外部的Java版本,所支持的核心類庫就越完整,所支持的Java基本數(shù)據(jù)類型就越完整[3]。其中J2ME定位在消費性電子產(chǎn)品的應(yīng)用上。這個版本針對資源有限的電子消費產(chǎn)品的需求精簡核心類庫,并提供了模塊化的架構(gòu)讓不同類型產(chǎn)品能夠隨時增加支持的能力[4]。圖1.1Java平臺的結(jié)構(gòu)J2ME平臺由多種配置(Configuration)、簡表(Profile)和可選包(OptionalPackage)組成。J2ME平臺主要包含兩個配置:ConnectedLimitedDevicesConfiguration(CLDC)和ConnectedDevicesConfiguration(CDC)。為了給目標(biāo)設(shè)備提供完整的運行環(huán)境,配置必須和簡表(Profile)組合。簡表位于配置之上,為運行環(huán)境提供高層的API,例如應(yīng)用程序模型和圖形用戶界面等。目前,CLDC上采用的最廣泛的簡表是移動信息設(shè)備簡表(MobileInformationDeviceProfile,MIDP)?;贑LDC與MIDP的J2ME平臺主要面對的目標(biāo)設(shè)備是移動電話。J2ME平臺可以通過添加可選包(OptionalPackage)進行擴展,可選包是針對特殊的技術(shù)的實現(xiàn),因此它是定位的是特定范圍的設(shè)備,而不是和作為一項特定定義在MIDP中。比較常見的可選包有無線消息API(WirelessMessageAPI,JSR120)、移動多媒體API(MobileMediaAPI,JSR135)和WEB服務(wù)API(WebServiceAPI,JSR172)等等。隨著移動終端設(shè)備內(nèi)存和處理能力的提高,越來越多的可選包被添加到具體的J2ME平臺上[5]。1.2.2經(jīng)濟可行性在經(jīng)濟方面,初步從成本來看,做這個游戲,主要是耗費人力,至于財力方面,不需要投入什么,只要游戲能夠在通用游戲平臺里運行就幾乎很成功了;從系統(tǒng)的經(jīng)濟效益來看,估計它一定可以超過游戲本身所開發(fā)的成本。理由有三個方面:其一是龐大的潛在用戶群,現(xiàn)在全球數(shù)十億部移動電話正在被使用,并且這個數(shù)目正在逐漸增加。移動游戲潛在的市場比其它任何平臺,比如Playstation3和XBOX360都要大;其二是便攜性,人們可以隨時隨地玩他們選擇的游戲。與現(xiàn)在的游戲控制臺或者個人電腦相比,手機可能不是一個好的游戲設(shè)備,但是人們基本上是隨時隨刻都把它們帶在身邊。在他們離開家的時候或者想玩的時候,開發(fā)者應(yīng)該為他們提供好玩的游戲;其三連連看這個游戲通俗易懂,簡單方便,老少皆宜,相信會有更多的人喜歡這款小游戲的。1.2.3操作可行性在操作方面,采用簡單的操作方式和必要的幫助說明,讓用戶一看就知道如何操作,主要有四個方向鍵(2,4,6,8),一個確認鍵(5),主要用數(shù)據(jù)結(jié)構(gòu)中的相關(guān)算法來實現(xiàn)。初步設(shè)想,此游戲的操作方式基本上都可以實現(xiàn)的1.3實現(xiàn)上的困難1.3.1不同的屏幕尺寸問題圖形是游戲的一個關(guān)鍵的方面,描畫速度是一個重要的程序函數(shù)。不同于控制臺游戲和PC游戲,移動設(shè)備沒有標(biāo)準的屏幕尺寸或者長寬比,這就導(dǎo)致了很多兼容性問題[41]。開發(fā)者可以通過編寫非常靈活的背景和前景描畫程序來解決這個問題。關(guān)鍵是創(chuàng)建一個允許快速擴展或者縮小游戲視窗的架構(gòu),并且不使圖像變形或者生成讓人看上去覺得別扭的屏幕比例。當(dāng)然,我們有很多方法來處理這個問題,最壞的情況就是可以為每種手機的顯示屏重新設(shè)計圖形?;蛘撸€可以動態(tài)地調(diào)節(jié)你的游戲背景和其它圖形。1.3.2手機內(nèi)存過小的雖然在一些新款智能手機上可以運行幾兆字節(jié)的應(yīng)用程序,但大部分手機只有很小的內(nèi)存空間供應(yīng)用程序使用。此外,對可運行的應(yīng)用程序的大小還有來自運營商的其他限制。1.3.3顯示速度方面的等待時間(機器發(fā)出請求和接到響應(yīng)之間所花費的時間)在計算機上是以微秒計算;在有線因特網(wǎng)上是以毫秒計算;而在無線網(wǎng)絡(luò)上則要以秒計算。在移動游戲開發(fā)過程中,最大的問題是缺乏對顯示速度的重視。雖然移動運營商已經(jīng)選擇了強大的處理器和彩色的顯示屏,但是他們忽略了對于游戲來說至關(guān)重要的一個方面。手機使用許多繪制程序,一些支持雙緩沖技術(shù),而另一些不支持。在某些情況下,可以更容易的直接繪制到屏幕上。直接繪制到屏幕有時比雙緩沖更快。然而,使用低刷新速率在屏幕上繪制大的圖像可能會引起閃爍。造成這一問題的原因在于,畫面在顯示的同時,程序又在改變它,于是畫面閃爍。1.3.4可中斷性的當(dāng)需要接聽或撥打電話時,我們通常會中斷進行中的游戲,游戲程序必須能夠暫停和繼續(xù)。這樣的暫停既不能造成游戲問題(例如,游戲者在打電話的時候游戲時間仍然在減少,造成玩家游戲時間不夠,導(dǎo)致玩家輸?shù)粲螒颍?,也不可以?dǎo)致內(nèi)存溢出。這些都是開發(fā)者需要在設(shè)計時給予充分考慮的問題。1.4本課題實現(xiàn)的意義手持設(shè)備上的游戲擁有龐大的用戶群體,現(xiàn)在全球有十幾億部移動電話正在被使用,并且這個數(shù)目還在不斷增加。在許多國家,擁有手機的人數(shù)比擁有計算機的人數(shù)更多。手持移動游戲潛在的市場比其它任何平臺都要大得多。由于手機游戲良好的便攜型,可以讓用戶在打發(fā)在旅途中和等人等車時候的無聊時間進行游戲,因此人們可以隨時隨地玩他們選擇的游戲,不受地域限制是手機游戲相比電腦最大的優(yōu)勢。因此過于復(fù)雜和耗時過長的游戲并不是手持設(shè)備未來的發(fā)展方向,用戶需要隨時可以開始和停止游戲,簡單而充滿樂趣的游戲才是最受手持設(shè)備用的青睞的游戲。第二章開發(fā)環(huán)境介紹和系統(tǒng)分析概述2.1系統(tǒng)的運行環(huán)境和開發(fā)平臺2.1.1Java語言特點1平臺無關(guān)性Java引進虛擬機原理,并運行于虛擬機,實現(xiàn)不同平臺之間的Java接口。Java的數(shù)據(jù)類型與機器無關(guān)。2安全性Java的編程類似C++,但舍棄了C++的指針對存儲器地址的直接操作,程序運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止程序的非法訪問。3面向?qū)ο驤ava吸收了C++面向?qū)ο蟮母拍?,將?shù)據(jù)封裝于類中,實現(xiàn)了程序的簡潔性和便于維護性,使程序代碼可以只需一次編譯就可反復(fù)利用。4分布式Java建立在TCP/IP網(wǎng)絡(luò)平臺上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應(yīng)用系統(tǒng)。5健壯性Java致力與檢查程序在編譯和運行時的錯誤,并自動回收內(nèi)存,減少了內(nèi)存出錯的可能性。Java取消了C語言的結(jié)構(gòu)、指針、#define語句、多重繼承、goto語句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動回收不用的內(nèi)存空間。通過集成的面向?qū)ο螽惓L幚頇C制,在編譯時,Java提示出可能出現(xiàn)但未被處理的異常,幫助程序員正確地進行選擇以防止系統(tǒng)崩潰。6多線程多線程機制使應(yīng)用程序能夠并行執(zhí)行,而且同步機制保證了對共享數(shù)據(jù)的正確操作。通過使用多線程,程序設(shè)計這可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機制,這樣就很容易地實現(xiàn)網(wǎng)絡(luò)上的實時交互行為。7動態(tài)性Java的設(shè)計使它適合于一個不斷發(fā)展的環(huán)境。在類庫中可以自由地加入新的方法和實例變量而不會影響用戶程序的執(zhí)行。并且,Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。2.1.2硬件設(shè)備測試手機需要支持JAVA應(yīng)用程序,支持CLDC1.1和MIDP2.0,支持MIDI音樂播放。彩色屏幕。硬件需要對多線程提供良好支持,支持無線網(wǎng)絡(luò)連接。測試手機Nokia612.1.3系統(tǒng)開發(fā)平臺電腦配置:Intel(R)Core(TM)DuoCPUT2250@1.73GHz1.31GHz,512M的內(nèi)存操作系統(tǒng):MicrosoftWindowsXPHomeEdition版本2002ServicePack2程序語言:Java2開發(fā)包:Java(TM)2StandardEdition(6.0) SunMicro.J2MEWirelessToolKit2.5.2測試手機:nokia6130C2.1.4關(guān)于WirelessToolkitWTK(WirelessToolkit)是Sun公司針對J2ME推出的用于手機和Palm等移動設(shè)備的開發(fā)包,是除手機廠商的專用開發(fā)包外唯一的手機模擬器開發(fā)包。它通用性高,開發(fā)出的應(yīng)用程序可保證能運行在大部分設(shè)備上,而不像專用廠商具有一定的不兼容性。雖然它沒有強大的功能和完善的調(diào)試手段,但它提供運行模擬器的最基本組件,是其他IDE需集成采用的必備元素。界面如圖2.1所示圖2.1WTK界面SunJava(TM)WirelessToolkit的目錄結(jié)構(gòu)見表2.1。表2.1SunJava(TM)WirelessToolkit的安裝目錄目錄包含的內(nèi)容{Install}/apps使用SunJava(TM)WirelessToolkit創(chuàng)建的工程源代碼、資源和配置文件將存放在這里。此外,SunJava(TM)WirelessToolkit所自帶的例子程序也存放在這里{Install}/bin存放著CLDC和MIDP以及SunJava(TM)WirelessToolkit的執(zhí)行程序。這些文件能完成編譯、校驗和運行的任務(wù){(diào)Install}/lib/midpapi.zipCLDC和MIDP的類庫包{Install}/docs包含CLDC、MIDP和SunJava(TM)WirelessToolkit的幫助文檔2.1.5J2ME集成開發(fā)工具J2ME集成開發(fā)工具市場上存在多種J2ME平臺,針對如此多樣化的環(huán)境,各家廠商都會推出屬于自己的開發(fā)工具。針對這種情況,工具廠商提供了集成開發(fā)工具,讓開發(fā)人員可以在統(tǒng)一環(huán)境下,隨時抽換開發(fā)時或測試時所使用的底層開發(fā)工具。Eclipse:Eclipse是一個開發(fā)源代碼的、基于java的可擴展開發(fā)平臺。Eclipse本身只是一個框架和一組響應(yīng)的服務(wù),并不能夠開發(fā)什么程序。在Eclipse中幾乎每樣?xùn)|西都是插件,實際上正是運行在Eclipse平臺上的種種插件提供我們開發(fā)程序的各種功能。同時各個領(lǐng)域的開發(fā)人員通過開發(fā)插件,可以構(gòu)建與Eclipse環(huán)境無縫集成的工具。EclipseME作為Eclipse一個插件,致力于幫助開發(fā)者開發(fā)J2ME應(yīng)用程序。EclipseME并不為開發(fā)者提供無線設(shè)備模擬器,而將各手機廠商的實用模擬器緊密連接到Eclipse開發(fā)環(huán)境中,為開發(fā)者提供一種無縫統(tǒng)一的集成開發(fā)環(huán)境。2.2系統(tǒng)需求分析2.2.1需求分析基礎(chǔ)知識需求分析是軟件生命周期的一個重要階段,它最根本的任務(wù)是確定為了滿足用戶的需要系統(tǒng)必須做什么。具體的說,應(yīng)該確定系統(tǒng)必須具有的功能和性能,系統(tǒng)要求的運行環(huán)境,并且預(yù)測系統(tǒng)發(fā)展的前景;必須仔細分析系統(tǒng)中的數(shù)據(jù),既要分析系統(tǒng)中的數(shù)據(jù)流又要分析長期使用的數(shù)據(jù)儲存。通過分析應(yīng)該得出用數(shù)據(jù)流圖、ER圖、數(shù)據(jù)字典和簡潔的算法描述所定義的詳細的系統(tǒng)邏輯模型。圖形工具比文字敘述能更好地表達重要的細節(jié),數(shù)據(jù)流圖能夠極好地概括描述一個系統(tǒng)的信息。ER圖能直觀、準確地描繪系統(tǒng)的數(shù)據(jù)要求。數(shù)據(jù)字典也是重要的,數(shù)據(jù)是把一個系統(tǒng)的各個組成元素連接在一起的“黏合劑”,為了成功地把所有系統(tǒng)元素連接起來,這些元素必須共享公共的數(shù)據(jù)定義,數(shù)據(jù)字典正是這些數(shù)據(jù)定義的集合。算法同樣是重要的,分析的目的是確定系統(tǒng)必須做什么,廣意的說,任何一個計算機系統(tǒng)的基本功能都是把輸入數(shù)據(jù)轉(zhuǎn)變成輸出信息,算法定義了轉(zhuǎn)變的規(guī)則。因此,沒有對算法的了解就不能確切知道系統(tǒng)必須做什么。軟件的需求分析是從用戶的業(yè)務(wù)中提取出軟件系統(tǒng)能夠幫助用戶解決的業(yè)務(wù)問題,通過對用戶業(yè)務(wù)問題的分析,規(guī)劃出我們的軟件產(chǎn)品。這個步驟是對用戶業(yè)務(wù)需求的一個升華,是一個把用戶業(yè)務(wù)管理流程優(yōu)化,轉(zhuǎn)化為軟件產(chǎn)品,從而提升管理而實現(xiàn)的質(zhì)的飛躍,這一步是否成功,直接關(guān)系到開發(fā)出來的軟件產(chǎn)品能否得到用戶認可,順利交付給客戶,客戶能否真正運用我們的產(chǎn)品幫助他解決業(yè)務(wù)或管理問題。需求分析的結(jié)果是軟件開發(fā)的基礎(chǔ),必須仔細驗證它的正確性,開發(fā)人員必須和用戶取得完全一致的意見,需求分析的文檔應(yīng)該被用戶所確認。然而這并不意味著分析員應(yīng)該不加分析地全盤接受用戶提出的所有要求,對用戶提出的籠統(tǒng)要求應(yīng)該加以細化,對用戶提出的含混要求需要進一步澄清,對用戶提出的不切實際的要求必須做深入細致的解釋說服工作,以便動員用戶放棄不合理的要求。為了提高軟件質(zhì)量,確保軟件開發(fā)成功,降低軟件開發(fā)成本,一旦對目標(biāo)系統(tǒng)提出一組要求之后,必須嚴格驗證這些需求的正確性。一般來說,應(yīng)該從以下述四個方面進行驗證:一致性所有需求必須是一致的,任何一條需求不能和其他的需求矛盾。完整行需求必須是完整,規(guī)格說明書應(yīng)該包括用戶需要的每一個功能或者性能?,F(xiàn)實性指定的技術(shù)應(yīng)該是用現(xiàn)有的硬件技術(shù)和軟件技術(shù)基本上可以實現(xiàn)的。對硬件技術(shù)的進步可以做些預(yù)測,對軟件技術(shù)的進步則很難做出預(yù)測,只能從現(xiàn)有的技術(shù)水平出發(fā)判斷需求的現(xiàn)實性。有效性必須證明需求是正確有效的,確實能解決用戶面對的問題。需求分析階段的具體任務(wù)包括以下幾個方面:確定對系統(tǒng)的綜合要求(包括系統(tǒng)功能要求、系統(tǒng)性能要求、運行要求、將來可能提出的要求。)、分析系統(tǒng)的數(shù)據(jù)要求、導(dǎo)出系統(tǒng)的邏輯模型、修正系統(tǒng)的開發(fā)計劃、開發(fā)原型系統(tǒng)。1.于需求分析的軟件工具應(yīng)該滿足以下幾點要求:必須有形式化的語法(或表),因此可以用計算機自動處理使用這種語法說明的內(nèi)容;2.使用這個軟件工具能夠?qū)С鲈敿毜奈臋n;3.必須提供分析(測試)規(guī)格說明書的不一致性和冗余性的手段,并且應(yīng)該能夠產(chǎn)生一組報告指明對完整性分析的結(jié)果;4.使用這個軟件工具之后,應(yīng)該能夠改進通信狀況。如圖2.2圖2.2軟件需求各組成部分關(guān)系2.2.2系統(tǒng)的綜合要求能夠通過控制鍵盤上的方向鍵來控制光標(biāo)的移動,使用回車鍵選中光標(biāo)所在位置的圖片,以特殊方式顯示;再次以光標(biāo)選擇其他圖片,若該圖片與被選中的圖片圖案相同,且把第一個圖片到第二個圖片連起來,中間的直線不超過3根,則消掉這一對圖片,并且分數(shù)增加;否則第一個圖片恢復(fù)成未被選中狀態(tài),而第二個變成被選中狀態(tài)。能夠通過暫停、退出按鈕控制游戲的暫停和退出。該游戲還可以讓用戶選擇游戲的難度,隨著難度的增加,并且游戲還能記錄游戲的最高分,并且提供用戶查詢最高分。2.2.3為了便于游戲者操作,游戲的界面簡潔明了,控制區(qū)和操作區(qū)分別在游戲界面的上部分和下部分,這樣游戲者不至于在進行游戲時搞混。控制區(qū)由一排按鈕組成,里面包括游戲的模式選擇,游戲的開始、暫停,游戲成績分數(shù)點,游戲的幫助主題以及游戲的設(shè)置選項。游戲開始由函數(shù)調(diào)用來完成游戲圖片的加載,隨機產(chǎn)生圖片排列。游戲操作區(qū)是用手機的上下左右鍵來控制圖片的移動,用中間鍵作為選中鍵,當(dāng)連續(xù)選定兩個相同圖片后,且兩者的連線在算法允許消去的范圍內(nèi),則消去這兩個相同的圖形。當(dāng)游戲者一時找不到可消去的相同的圖片時,就可以利用控制區(qū)中的提示按鈕,則會隨機的產(chǎn)生一對可消去的圖片。當(dāng)游戲中還有圖片且不可消去時,則可利用控制區(qū)中重新洗牌按鈕,則會把存在的圖片打亂后重新組合,就可以繼續(xù)游戲。游戲0層數(shù)據(jù)流圖如圖2.3所示。圖2.30層數(shù)據(jù)流圖選擇游戲模式開始新游戲開始游戲暫停游戲退出游戲游戲設(shè)置最高分幫助退出系統(tǒng)數(shù)據(jù)模型如圖2.4用戶用戶圖片游戲時間游戲得分光標(biāo)坐標(biāo)圖片坐標(biāo)選中標(biāo)識畫線標(biāo)識圖2.4系統(tǒng)數(shù)據(jù)模型(E-R圖)2.2.4游戲開發(fā)環(huán)境的需求為了游戲者安裝的方便以及游戲的兼容性,考慮到游戲者大多數(shù)用的都是Windows操作系統(tǒng),游戲在Windows操作系統(tǒng)下開發(fā),把游戲的兼容性問題降低到最低限度。游戲是Jbuilder的環(huán)境下開發(fā)的。2.2.5可靠性、可用性需求系統(tǒng)在設(shè)計時應(yīng)注意設(shè)計風(fēng)格統(tǒng)一,使系統(tǒng)可調(diào)試性良好,盡可能把系統(tǒng)錯誤消滅在調(diào)試階段,系統(tǒng)一旦交付使用,就應(yīng)該有很好的可靠性。玩家:按照提示進行游戲。只關(guān)心可玩性和速度,不需要了解程序內(nèi)部結(jié)構(gòu),軟件具有很好的可用性。2.2.對于任何硬件或軟件系統(tǒng)來說,都不可避免的會存在問題,當(dāng)機器或者軟件出現(xiàn)故障的時候,就應(yīng)要有可靠的辦法來解決才行。2.2.硬件接口無軟件接口鍵盤控制對應(yīng)的聲音圖形的相應(yīng)處理。2.2.8將游戲的界面更加美化。用戶可以保存游戲并且根據(jù)保存的信息可以重新載入游戲。第三章游戲的總體設(shè)計及詳細設(shè)計從工程管理的角度來看,軟件設(shè)計分兩步完成。概要設(shè)計,將軟件需求轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和軟件的系統(tǒng)結(jié)構(gòu)。詳細設(shè)計,即過程設(shè)計。通過對結(jié)構(gòu)表示進行細化,得到軟件的詳細的數(shù)據(jù)結(jié)構(gòu)和算法[6]。3.1游戲的總體設(shè)計總體設(shè)計通常由系統(tǒng)設(shè)計和結(jié)構(gòu)設(shè)計兩個階段組成。其中系統(tǒng)設(shè)計階段確定系統(tǒng)的具體實現(xiàn)方案,結(jié)構(gòu)設(shè)計階段確定軟件的結(jié)構(gòu),包括設(shè)想供選擇的方案(取得數(shù)據(jù)流圖中處理分組的各種可能的方法)、選取合理的方案、推薦最佳方案、功能分解、設(shè)計軟件結(jié)構(gòu)等步驟。3.1.1總體設(shè)計的設(shè)計原則1、模塊化模塊化設(shè)計是把大型軟件按照規(guī)定的原則劃分為一個個較小的、相對獨立但又相關(guān)的模塊的設(shè)計方法,軟件系統(tǒng)的模塊化是指整個軟件被劃分成若干單獨命名和可編址的部分,稱之為模塊。這些模塊可以被組裝起來以滿足整個問題的需求。把問題/子問題的分解與軟件開發(fā)中的系統(tǒng)/子系統(tǒng)或系統(tǒng)/模塊對應(yīng)起來,就能夠把一個大而復(fù)雜的軟件系統(tǒng)劃分成易于理解的比較單純的模塊結(jié)構(gòu)。2、抽象軟件系統(tǒng)進行模塊設(shè)計時,可有不同的抽象層次。在最高的抽象層次上,可以使用問題所處環(huán)境的語言概括地描述問題的解法。在較低的抽象層次上,則采用過程化的方法。在設(shè)計過程中,從系統(tǒng)定義到實現(xiàn),每進展一步都可以看做是對軟件解決方法的抽象化過程的一次細化。在軟件需求分析階段,用“問題所處環(huán)境的為大家所熟悉的術(shù)語”來描述軟件的解決方法。在從概要設(shè)計到詳細設(shè)計的過程中,抽象化的層次逐次降低。當(dāng)產(chǎn)生源程序時到達最低抽象層次。3、逐步求精逐步求精方法是由Wirth提出的一種早期的自頂向下的設(shè)計策略。面對現(xiàn)實的復(fù)雜問題,我們首先不要一下子就力圖觸及到問題解法的細節(jié),而應(yīng)當(dāng)先從問題的全局出發(fā),用較自然的抽象語句來表示問題,從而得到抽象算法。這時的算法主要是描述“做什么”,或者說是把問題描述為幾個子問題或子功能。接下來對子問題,也就是對抽象算法進行細化,在這一階段設(shè)計的算法中,已經(jīng)開始含有程序設(shè)計語言的成分。隨著算法的不斷細化,越來越多地開始完成“如何做”,算法中程序設(shè)計語言的成分也越來越多,當(dāng)最后把算法全部細化為程序設(shè)計語言描述時,程序設(shè)計也就隨之完成了.4、信息隱藏和局部化信息隱蔽是指,每個模塊的實現(xiàn)細節(jié)對于其它模塊來說是隱蔽的。也就是說,模塊中所包含的信息(包括數(shù)據(jù)和過程)不允許其它不需要這些信息的模塊使用。5、模塊獨立一個完整的模塊應(yīng)當(dāng)有以下幾部分:①執(zhí)行規(guī)定的功能的部分;②出錯處理的部分。當(dāng)模塊不能完成規(guī)定的功能時,必須回送出錯標(biāo)志,出現(xiàn)例外情況的原因。③如果需要返回一系列數(shù)據(jù)給它的調(diào)用者,在完成數(shù)據(jù)加工或結(jié)束時,應(yīng)當(dāng)給它的調(diào)用者返回一個結(jié)束狀態(tài)標(biāo)志。3.1.2游戲的總體設(shè)計本系統(tǒng)在主菜單界面上采用Screen類提供的高級界面。游戲界面采用Canvas類提供的低級界面開發(fā)。Screen是高級圖形用戶界面,從Screen派生的如TextBox,List,F(xiàn)orm不需要我們自己繪制,只需制定合適的參數(shù),系統(tǒng)就會將標(biāo)題、文本框、滾動條等自動繪制出來。在繪制開始菜單等界面上滿足了實際的需求,同時實現(xiàn)了很大的便捷。Canvas則正好相反,它是一個低級圖形用戶界面,在手機界面大小的范圍內(nèi),我們可以控制任意像素的繪制,顯示效果完全取決于我們設(shè)計的代碼,這在游戲的開發(fā)中是必不可少的。Socket原先是Unix系統(tǒng)中的概念,后來在網(wǎng)絡(luò)編成中廣泛應(yīng)用。在用J2ME進行手機游戲開發(fā)中,將Socket類和ServerSocket類分別用于Client端和Server端,在任意兩臺機器間建立連接。3.1.3程序流程MIDP規(guī)范中定義了MIDlet的生命周期,以及可以存在的三種狀態(tài),包括Paused、Active以及Destroyed,每一個MIDlet在任何時刻只可能處于其中的一個狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關(guān)系如圖3.1所示:MIDlet有三個狀態(tài),分別是pause、active和destroyed。在啟動一個MIDlet的時候,應(yīng)用管理軟件會首先創(chuàng)建一個MIDlet實例并使得他處于pause狀態(tài),當(dāng)startApp()方法被調(diào)用的時候MIDlet進入active狀態(tài),也就是所說的運行狀態(tài)。在active狀態(tài)調(diào)用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet進入destroyed或者pause狀態(tài)[7]。如圖3.1圖3.1Midlet流程值得一提的是destroyApp(booleanunconditional)方法,事實上,當(dāng)destroyApp()方法被調(diào)用的時候,AMS通知MIDlet進入destroyed狀態(tài)。在destroyed狀態(tài)的MIDlet必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果unconditional為false的時候,MIDlet可以在接到通知后拋出MIDletStateChangeException而保持在當(dāng)前狀態(tài),如果設(shè)置為true的話,則必須立即進入destroyed狀態(tài)。本程序運行程序后允許用戶選擇執(zhí)行選項菜單,在開始游戲后將先從外部文件圖片文件,進行繪圖。在程序運行的主線程中,畫面刷新將以一定的頻率對屏幕重繪,實時反映整個游戲的進行狀態(tài)。游戲開始后先繪制圖片,并將個圖片成對出現(xiàn),隨機排列。對光標(biāo)進行監(jiān)聽,當(dāng)選中某圖片時,對其特殊顯示,選中第二張圖片時候,對兩個圖片進行比對,相同時,調(diào)用畫線程序,并將圖片消去;否則取消圖片的特殊標(biāo)識。3.1.4本程序中的幾項的技術(shù)1.Canvas類Canvas是MIDP提供的低級用戶界面類。和高級用戶界面相比,Canvas擁有更大的靈活性。由于Canvas不提供任何現(xiàn)成的可視化組件,所有在Canvas顯示的圖形和文本都必須通過Graphics繪制出來。因此,開發(fā)人員可以完全獲得界面控制能力,能精確控制每一個像素的位置,在游戲開發(fā)中,這是必不可少的。Canvas提供了鍵盤事件,并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù)。鍵盤事件由鍵代碼指定,但這樣控制游戲會導(dǎo)致缺乏通用性,并不是每個設(shè)備的鍵盤布局都適合游戲的操作。應(yīng)當(dāng)將鍵代碼轉(zhuǎn)換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。2.Graphics類Graphics是javax.microedition.lcdui包中用于繪制簡單2D圖形的類[8]。它具有24位深度色彩的繪制能力,以三原色分別各占一個字節(jié)表示其顏色。程序只能在paint()函數(shù)中使用Graphics繪制。文本的繪制是基于定位點操作的。定位點的最大作用就是最小化計算文本繪制位置所需的工作量。定位點是由三個水平常量(LEFT,HCENTER,RIGHT)和三個垂直常量(BOTTOM,BASELINE,TOP)組合而成的,組合的方式按照“或”操作。數(shù)字零也可以做定位點的值,它代表的組合方式是TOP|LEFT。在Graphics中還定義了一個垂直常量VCENTER,但是它不能用于繪制文本。一般認為文本的垂直居中沒有意義,而且也很難實現(xiàn)[9]。但是VCENTER可以用于繪制圖片的drawImage()方法[10]。繪制圖片的方法與文本非常類似,不同的是由于圖片沒有基線(baseline)的概念,因此在繪制圖片時不能使用BASELINE常量。3.RMS數(shù)據(jù)庫系統(tǒng)MIDP為MIDlets提供了一種永久存儲和后來讀出數(shù)據(jù)的數(shù)據(jù)庫解決方案,被稱為RecordManagermentSystem(RMS),是一種類簡單的基于記錄的數(shù)據(jù)庫[11]。很顯然,手機上的數(shù)據(jù)庫系統(tǒng)不可能有PC上的強大功能。微小的存儲空間也限制了它們的結(jié)構(gòu)不能過于復(fù)雜。RMS是專門針對移動設(shè)備的服務(wù)的。RMS包中包括RecordStore類。在一個MIDletsuite包里的所有MIDlet都允許創(chuàng)建多個記錄集,只要它們賦有不同的名稱。當(dāng)MIDlet包從平臺中被移除后,所有與該包有關(guān)的的記錄集都同時會被移除。同一個包內(nèi)的MIDlets可以直接互相訪問它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。訪問模式會在準備提供共享的RecordStore被建立時被創(chuàng)建。訪問模式允許私有使用或訪問。記錄是字節(jié)數(shù)組。開發(fā)者可以利用InputStream的派生類DataInputStream、DataOutputStream以及ByteArrayInputStream、ByteArrayOutputStream將不同種類的數(shù)據(jù)類型打包,以字節(jié)流的形式發(fā)送和接收。區(qū)別記錄的唯一標(biāo)記是他們的ID值,作為記錄集的主鍵。第一項記錄的ID是1,其后的每個記錄ID遞增。Record是以字節(jié)為基本單位來存放的,所以所有要寫入record的數(shù)據(jù)都必須先將其轉(zhuǎn)為字節(jié)才能寫入,從record所讀出來的數(shù)據(jù)也是字節(jié),必須將其轉(zhuǎn)換為原先寫入時的數(shù)據(jù)類型才有意義。然而讀取或?qū)懭氲淖止?jié)數(shù)組都只能代表一個字段的信息,如果需要讀取或?qū)懭攵鄠€字段就必須要將數(shù)據(jù)轉(zhuǎn)換成字節(jié)信息,并且提供適當(dāng)?shù)臋C制來分隔這些信息。3.1.5PNG圖片格式PNG(PortableNetworkGraphics)格式是MIDlet唯一支持的圖象格式[12],PNG具體格式由PNGSpecification,Version1.0定義的。PNG格式提供透明背景的圖象,這對繪制游戲畫面和被操縱主角極有幫助。物體之間重疊時最上層圖片也不會覆蓋超過其有效象素外的部分。3.1.6混淆器(Obfuscator)的使用Java語言并沒有完全編譯成二進制可執(zhí)行文件,編譯出的.class文件是一種介于源程序和二進制之間的一中基于半解釋的字節(jié)碼,需要虛擬機來執(zhí)行。它包括了所有的信息。然而這樣會導(dǎo)致.class很容易被反編譯為源代碼,從而不能保護作者的知識成果。目前流行的如decode,JAD等反編譯工具可以以很快的速度生成源文件。如果不加以施行有效的措施,將造成嚴重的后果。由此引入混淆器的概念?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹喍痰挠⑽淖帜复?,如果缺乏相?yīng)的函數(shù)名指示和程序注釋,即使被反編譯,也將難以閱讀。混淆器的作用不僅僅是保護代碼,它也有精簡編譯后程序大小的作用。由于以上介紹的減少變量、函數(shù)的命名長度的關(guān)系,編譯后也會從.class文件中減少這些冗余的信息?;煜?,體積大約能減少25%。3.2游戲的詳細設(shè)計3.2.1詳細設(shè)計的介紹詳細設(shè)計以總體設(shè)計階段的工作為基礎(chǔ)的,但又不同于總體設(shè)計,主要表現(xiàn)為以下兩個方面:(1)在總體設(shè)計階段,數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)以比較抽象的方式描述,而詳細設(shè)計階段則應(yīng)在此基礎(chǔ)上給出足夠詳細描述。(2)詳細設(shè)計要提供關(guān)于算法的更多的細節(jié)。1.詳細設(shè)計的任務(wù)(1)確定每個模塊的算法。

(2)確定每一個模塊的數(shù)據(jù)組織。

(3)為每個模塊設(shè)計一組測試用例。

(4)編寫詳細設(shè)計說明書。2.詳細設(shè)計的原則(1)模塊的邏輯描述正確可靠、清晰易讀。(2)采用結(jié)構(gòu)化程序設(shè)計方法,改善控制結(jié)構(gòu),降低程序復(fù)雜度,提高程序的可讀性、可測試性和可維護性。3.2.2界面的詳細設(shè)計游戲的界面分為控制區(qū)和操作區(qū),控制區(qū)是整個游戲的控制按鈕的集中區(qū)域,操作區(qū)是游戲者進行游戲的場所??刂茀^(qū)中有以下一些按鈕:開始游戲按鈕:進入游戲開始界面,玩游戲顯示分數(shù)點數(shù)與所用時間。放棄游戲按鈕:放棄本局游戲,進行游戲模式選擇重新開始游戲。退出按鈕:退出游戲程序。重新洗牌按鈕:把游戲中的圖片重新排列。暫停按鈕:暫停游戲。游戲說明按鈕:游戲規(guī)則的說明。操作區(qū)是游戲者進行游戲的場所,游戲的規(guī)則很簡單,就是用不超過兩次轉(zhuǎn)折的連線把兩個相同的圖片連起來,直到把游戲畫面中的圖片消完為止。游戲采用GameMap類,用來加載圖片和連連看的核心算法來選擇圖片選中以及消除圖片的算法,用GameCanvas來接收手機鍵盤消息來消除圖片和重畫地圖,用UITimer與GameCanvas來控制時間來計算游戲時間與判斷是否能成功完成游戲通關(guān)。如圖3.2圖功能的詳細設(shè)計功能的詳細設(shè)計主要采用程序流程圖作為工具來闡述。程序流程圖是詳細設(shè)計的一種工具,能指明控制流程、處理過程、數(shù)據(jù)組織以及其他的方面的實現(xiàn)細節(jié),從而在編碼階段能把對設(shè)計的描述直接翻譯成程序代碼。程序流程圖一直是軟件設(shè)計的主要工具,優(yōu)點是對控制流程的描繪很直觀,便于初學(xué)者掌握。游戲結(jié)束時的判斷這個主要表現(xiàn)兩個問題:每一次消去圖片后,均將相應(yīng)位置的flag數(shù)組元素置0,且遍歷flag數(shù)組是否為0。如果全部為0,則游戲結(jié)束。當(dāng)游戲結(jié)束時,直接向玩家發(fā)送gameover指令。解決的辦法:首先,每次消去圖片后僅將圖片數(shù)目(gamevalue變量控制)減2,當(dāng)為0時,將gameover變量設(shè)為真值。而每次都向函數(shù)發(fā)送圖片數(shù)目,當(dāng)圖片數(shù)目值為0時,即判斷玩家已經(jīng)勝利。如圖3.3自動游戲自動游戲開始游戲退出游戲暫停游戲圖3.3第四章程序的分析和具體實現(xiàn)4.1游戲進入前的選擇每個MIDlet程序都必須有一個主類,該類必須繼承自MIDlet。它控制著整個程序的運行,并且可以通過相應(yīng)函數(shù)從程序描述文件中獲取相關(guān)的信息。該類中擁有可以管理程序的創(chuàng)建、開始、暫停(手機中很可能有正在運行程序卻突然來電的情況,這時應(yīng)進入暫停狀態(tài)。)、結(jié)束的函數(shù)。本程序主類為MainMIDP,并實現(xiàn)接口CommandLIstener。首先顯示的是游戲的背景介紹(圖3.2),為此,在類MainMIDP定義Form類對象m_frmMain,在startApp()函數(shù)中判斷是否為剛進入游戲,如果為假的話,將創(chuàng)建Form類的實例,并且調(diào)用append()方法在表單上放置m_MainList菜單。調(diào)用setCommandListener()命令使Form與CommandListener建立關(guān)聯(lián)。調(diào)用Displayable顯示。圖3.2游戲背景介紹seturrent()函數(shù)顯示背景介紹窗口。當(dāng)玩家點擊ok后將調(diào)用display.setCurrent(m_MainList)以顯示游戲菜單m_MainList(圖3.2)。當(dāng)玩家按住上或下鍵時,在函數(shù)keyPressed(intcode)中的整型變量menuIndex相應(yīng)的減1或加1,相應(yīng)的,在paint()函數(shù)中會根據(jù)menuIndex繪制選項是否被選中。當(dāng)移動選項條到某項,并點擊ok時,在commandAction()方法中根據(jù)menuIndex開始游戲游戲幫助游戲設(shè)置最高分退出MainMIDP類主要關(guān)系流程圖例如當(dāng)選擇“游戲幫助”時,將調(diào)用MainMIDP類中的commandAction()方法以顯示“游戲幫助”界面。如圖4.1圖4.1操作區(qū)是游戲者進行游戲的場所,游戲的規(guī)則很簡單,就是用不超過兩次轉(zhuǎn)折的連線把兩個相同的圖片連起來,直到把游戲畫面中的圖片消完為止。游戲采用GameMap類,用來加載圖片和連連看的核心算法來選擇圖片選中以及消除圖片的算法,用GameCanvas來接收手機鍵盤消息來消除圖片和重畫地圖,用UITimer與GameCanvas來控制時間來計算游戲時間與判斷是否能成功完成游戲通關(guān)。如圖4.2圖4.24.2游戲邏輯及幾個重要類的實現(xiàn)4.2.1GameCanvas類所實現(xiàn)的功能畫游戲屏幕的時間間隔:privateintm_paintTime;玩得時間計數(shù):privateintm_timeCount;一局游戲總共花費的時間:privateintm_GameTimeCount;定時次調(diào)用次數(shù)計數(shù):privateintm_timeMcount;顯示地圖裝載效果狀態(tài)計數(shù):privateintm_IniGameMapCount;畫連接線標(biāo)志privatebooleanm_bPaintCleanFlag;privatebooleanm_bPaintCleanStart;privateintm_iPaintCleanCount;游戲運行狀態(tài)標(biāo)志:privateintm_StatusFlag;0:游戲圖片文件裝載過程,在程序啟動的時候,另外一線程裝載。1:游戲地圖文件初始化狀態(tài),出現(xiàn)地圖初始化的效果2:游戲進行中,檢查剩下時間,調(diào)整狀態(tài)條,顯示分數(shù)等信息3:單節(jié)游戲結(jié)束,處理是否繼續(xù)游戲、退出游戲、保存記錄;4:一局游戲結(jié)束,顯示畫面慶祝游戲地圖信息:privateGameMapm_gameMap;接收鍵盤狀態(tài)信息,調(diào)用keyPressed()函數(shù)來消除相同圖片后的設(shè)置以及畫面的重畫。并調(diào)用GameMap類來進行游戲算法和規(guī)則的調(diào)用與判斷。4.2.2地圖的創(chuàng)建由于手機存儲空間的限制,不可能將整張地圖完整地存儲在手機中,為了節(jié)約空間,往往提出地圖中相同的圖片組成一張PNG格式的圖片,然后象拼圖一樣拼出地圖來,專業(yè)的游戲設(shè)計者往往自己寫一個地圖編輯器,以使拼圖過程不是那么痛苦。創(chuàng)建地圖就需要使用TiledLayer。TiledLayer指的是由一塊一塊類似用瓷磚拼湊起來的畫面。地圖實際即為TiledLayer的一個對象。先利用TiledLayer的構(gòu)造函數(shù)建立TiledLayer,根據(jù)構(gòu)造函數(shù)的參數(shù)可以給定Cell數(shù)組的大小,并且地圖圖片切割成等尺寸的畫面,并調(diào)用setCell()設(shè)置具體的圖象格內(nèi)容。

因此,創(chuàng)建一個返回TtiledLayer的方法createBackGround(),以便在gameScreen()的構(gòu)造函數(shù)中調(diào)用。在方法中,定義整型數(shù)組map1[]以存儲Cell的索引值。并使用tiledLayer.setCell(column,row,map1[i])設(shè)定TtiledLayer的內(nèi)容,以形成地圖。其中i的值由循環(huán)for(inti=0;i<map1.length;i++)取得,column由語句column=i%15取得、行由row=(i-column)/15取得。畫出地圖后,由lm.append()將地圖添加到LayerManager類對象lm中。由于地圖位于Layer的最低層,即離用戶視線最遠的層,所以Tiledlayer最后一個被添加到lm中。4.2.3地圖的移動根據(jù)游戲的設(shè)定,游戲中選圖片是向下向上移動的,實現(xiàn)此功能的方法;publicintRoleMove(intGameAction){intiRtn;iRtn=0; switch(GameAction){ caseCanvas.LEFT: if((m_role_x-1)>=1){ { m_role_x--; } } iRtn=1; break; caseCanvas.RIGHT: if((m_role_x+1)<stMap_x-1){ { m_role_x++; } } iRtn=1; break; caseCanvas.UP: if((m_role_y-1)>=1){ { m_role_y--; } } iRtn=1; break; caseCanvas.DOWN: if((m_role_y+1)<stMap_y-1){ { m_role_y++; } } iRtn=1; break; caseCanvas.FIRE: //是否在空區(qū)域做了選擇動作 if(m_map[m_role_y][m_role_x]==ISEMPTY) break; if(!m_SelectOne){ //第一次選擇 m_select_x=m_role_x; m_select_y=m_role_y; m_SelectOne=true; }else{ //是否重復(fù)點,如果重復(fù)點,取消上次所選擇的 if((m_select_x==m_role_x)&&(m_select_y==m_role_y)){ m_SelectOne=false; break; } //第二次選擇 if((m_map[m_select_y][m_select_x]==m_map[m_role_y][m_role_x]) &&(!m_cleanFlag))//還沒有處理完已經(jīng)連接好的塊 {if(CheckPoint(m_select_x,m_select_y,m_role_x,m_role_y)==0){ m_SelectOne=false; //選擇的與規(guī)則相符 m_cleanFlag=true; m_cf_sx=m_select_x; m_cf_sy=m_select_y; m_cf_ex=m_role_x; m_cf_ey=m_role_y;iRtn=2; m_iLeaveImageCount=m_iLeaveImageCount-2; break; } } //選擇的不合符規(guī)則 m_select_x=m_role_x; m_select_y=m_role_y; m_SelectOne=true; } iRtn=1; break; default: iRtn=0;}returniRtn; };4.2.4關(guān)于commandAction()方法和paint()方法每個創(chuàng)建Command實例的J2ME的應(yīng)用程序也必須創(chuàng)建實現(xiàn)CommandListener接口的實例。每當(dāng)用戶通過commandAction()方法的方式與命令進行交互的時候,就會通過CommandLIstener.所以實現(xiàn)CommandListener的類必須實現(xiàn)commandAction()方法。

在commandAction()方法中,使用getabel()方法獲取命令的標(biāo)簽。如果getLabel()=“暫?!睍r,表示玩家點擊了暫停鍵,此時,conti賦值為false,游戲畫面的繪制及游戲相關(guān)的運算暫停,并且,使用removeCommand(c)語句將“暫?!币瞥?,使用addCommand(newCommand("繼續(xù)",Command.OK,2));將”繼續(xù)“按紐”添加進來。當(dāng)玩家點擊“繼續(xù)“時,conti賦值為true,并且,一定要調(diào)用start()方法,否則繼續(xù)功能不可用。必須調(diào)用start()方法的原因是:J2ME的線程已stop()方法拿掉,如果想停止線程的運做,就必須依靠一個旗標(biāo)(flag),在本程序中,flag就是boolean型變量conti。所以一旦此標(biāo)識變量被設(shè)為false,那么while(conti)循環(huán)就會結(jié)束,線程也會跟著結(jié)束。當(dāng)用戶按下“繼續(xù)”的時候,start()將重新產(chǎn)生一個線程繼續(xù)執(zhí)行相關(guān)的運算和畫面繪制。在方法paint()過程中,除了要重繪地圖、圖片外還要在上方繪制關(guān)卡信息、玩家分數(shù)點、及所用時間等。首先使用lm.setViewWindow()和lm.paint()設(shè)定可視范圍ViewWindow和從哪里畫起(見4.3.3)。其次,使用g.drawString()繪制屏幕上方的關(guān)卡信息、戰(zhàn)績、玩家剩余生命標(biāo)志。當(dāng)每次刷新繪圖頁面時,應(yīng)使用GameCanvas的flushGraphics()將屏幕后臺的緩沖區(qū)內(nèi)的圖像刷新到前臺來(flushGraphics()應(yīng)該寫在paint(){}的最后)。4.2.5記錄系統(tǒng)-最高分記分系統(tǒng)的功能采用的是手機專用的一種簡化的數(shù)據(jù)庫RMS。RecordStore等同于數(shù)據(jù)庫系統(tǒng)中的表(table)。程序中需要用到的接口是javax.microedition.rms.RecordStore。游戲結(jié)束需要對游戲的分數(shù)進行記錄時,需要先創(chuàng)建記錄集,mfirst.addCommand(m_Frm_Help_Back); Stringfs="0"; byte[]f=fs.getBytes(); RecordStorers=null; try{ rs=RecordStore.openRecordStore("firstman",true); if(rs.getNumRecords()==0){ rs.addRecord(fs.getBytes(),0,fs.getBytes().length); } else{ f=rs.getRecord(0); fs=newString(f); }在每個Midlet包中RecordStore的名字必須是唯一的。然后通過輸出流將需要進行存儲的數(shù)據(jù),游戲的高分紀錄存入byte數(shù)組,并以字節(jié)流的方式存入記錄集中,最后關(guān)閉流對象,關(guān)閉記錄集。當(dāng)需要查看游戲的高分榜時,在游戲的主菜單中進入游戲的最高紀律查看,首先打開記錄集,創(chuàng)建輸入流對象,并對數(shù)據(jù)進行恢復(fù),將游戲的高分附值給臨時變量,并在屏幕上予以顯示。然后依次關(guān)閉流對象,關(guān)閉記錄集。第五章系統(tǒng)測試與安裝5.1游戲安裝使用Eclipse完成代碼的調(diào)試之后,需要使用WTK生成包(即jar和jad文件),其過程如下:首先,使用WTK的新建項目功能建立一個新項目,要求與Eclipse工作區(qū)下的項目名稱、MIDlet類名相同。

新建項目后,將Eclipse工作區(qū)下的.java文件拷入src文件夾,將.class文件拷入class文件夾(需要新建),將pic文件夾拷入res文件夾,點擊生成,如一切正常之后,選擇項目-包-生成包。生成的jar和jad文件存儲在LLK/bin目錄下。運行MotorolaSDKv4.2forJ2ME。5.2游戲測試5.2.1部分模塊的測試模塊邏輯:1.主界面如圖5.1圖5.12.游戲幫助如圖5.2圖運行界面測試運行程序,首先顯示游戲的Logo界面,Logo的顯示時間為3秒鐘,3秒鐘之后游戲便會進入主菜單,或者在Logo顯示時按任意鍵便可進入游戲的主菜單,游戲Logo界面如圖5.3圖5.3游戲Logo界面之后進入游戲的主菜單界面,如圖5.4圖5.4主菜單界面選擇開始游戲,進入操作界面,如圖5.5,5.6,.7圖5.5游戲界面圖5.6游戲成功圖5.7游戲失敗選擇游戲幫助,進入幫助界面,如圖5.8圖5.8游戲幫助選擇游戲設(shè)置,進入設(shè)置界面,如圖5.9圖5.9游戲設(shè)置選擇最高分,進入最高分界面,如圖5.10圖5.10游戲最高分結(jié)束語J2ME針對嵌入式和移動設(shè)備,提供了開發(fā)和運行應(yīng)用程序的平臺,隨著新的規(guī)范的不斷推出和眾多制造商、軟件開發(fā)商的支持,J2ME正在飛速向前發(fā)展。JTWI將保證J2ME應(yīng)用程序在不同制造商的產(chǎn)品上的兼容性。今后J2ME將借助WebServices的力量,真正成為企業(yè)級信息解決方案中不可或缺的一部分。J2ME是一種針對移動電話和PDA這樣的小型設(shè)備的Java語言。大部分的手機廠商都迫切希望Java手機推廣應(yīng)用。上千萬的Java手機已經(jīng)到了消費者的手中。J2ME與臺式機中的Java相比還是有很大的限制,但是它已經(jīng)極大的提高了移動電話支持游戲的能力。它有比SMS或WAP更好控制的界面,允許使用子圖形動畫,并且可以通過無線網(wǎng)絡(luò)連接到遠程服務(wù)器。支持Java的手機的普及,所以它成為目前最好的移動游戲開發(fā)環(huán)境,我們在這里將詳細研究J2ME游戲的開發(fā)。J2ME不是手機上配置的唯一的解釋語言,但是它是一個許多廠商支持的行業(yè)標(biāo)準。本程序設(shè)計實現(xiàn)了手機上以J2ME為平臺的游戲連連看的開發(fā),同時實現(xiàn)了難度調(diào)整與游戲紀錄存儲的功能。提供了游戲得分的計算,使游戲具有一定的可玩性和復(fù)雜性。經(jīng)過了細心的調(diào)試和排錯解決了絕大部分的問題。在學(xué)習(xí)J2ME開發(fā)游戲的過程中,遇到的困難遠遠超出了想象。很多相關(guān)的技術(shù),如需要使用到的線程、低級圖形界面的使用、貼圖等,每一項都需要花一定的時間去掌握和熟悉。J2ME為一種剛出現(xiàn)僅幾年的新技術(shù),國內(nèi)的參考資料非常少,僅有的幾本也停留在簡單的介紹階段。J2ME應(yīng)用程序開發(fā)這本書給了我很大的幫助。通過對本課題的研究與實現(xiàn),增強了我的實踐能力。使我對J2ME軟件開發(fā)方法有了更進一步的理解,獨立的完成了系統(tǒng)的整個開發(fā)過程。通過對手機游戲的設(shè)計與實現(xiàn),使我對軟件工程,開發(fā)語言及開發(fā)工具等都有了比較全面的實踐和掌握。參考文獻[1]上海證券報./a/20100319/000031.htm,20[2]陳立偉,張克非,黎秀紅.精通Java手機游戲與應(yīng)用程序設(shè)計.中國青年出版社,2005年5月[3]洪維恩.Java2面向?qū)ο蟪绦蛟O(shè)計.中國鐵道出版社,2002年8月[4]盧軍編.J2ME應(yīng)用程序開發(fā).中國鐵道出版,2002年9月[5][美]JamesKeogh.潘穎,王磊譯.J2ME開發(fā)大全.清華大學(xué)出版社,2004年[6]張海藩.軟件工程.北京人民郵電出版社,2006年1月[7]王森.Java手機程序設(shè)計入門.電子工業(yè)出版社,2004[8]李鵬,陳煒,任俊偉.J2ME游戲編程.清華大學(xué)出版社.2005年11月[9]詹建飛.J2ME開發(fā)精解.電子工業(yè)出版社,2006年1月[10][美]DonaldHearn,M.PaulineBaker.蔡士杰,宋繼強,蔡敏譯.計算機圖形學(xué)(第三版).電子工業(yè)出版社,2005年6月[11]邵明武.J2ME平臺手機游戲的設(shè)計與實現(xiàn).西南交通大學(xué),2007[12]米川英樹.J2MEMIDP手機游戲程序設(shè)計.中國鐵道出版社,2005[13]RogersCadenhead.淡文剛,于紅梅譯.循序漸進Java2教程(第三版).人民郵電出版社,2003年4月[14]H.M.Deitel,P.J.Deitel.施平安,施惠瓊,柳賜佳譯.java程序設(shè)計教程(第五版).清華大學(xué)出版社,2004年3月[15]Keogh,J.潘穎,王磊譯.J2ME開發(fā)大全.清華大學(xué)出版社,2004[16][美]Wells,M.J.陳宗斌譯.J2ME游戲編程.清華大學(xué)出版社,2005年11月[17]張小瑋.J2ME無線平臺應(yīng)用開發(fā).清華大學(xué)出版社,2004[18]印薅.Java語言與面向?qū)ο蟪绦蛟O(shè)計.清華大學(xué)出版社.2000[19]JoshuaBloce.潘愛民譯.EffectiveJava中文版.機械工業(yè)出版社,2004年7月[20]BruceEckel.侯捷譯.Java編程思想.機械工業(yè)出版社出版社,2005年3月[21]IanSommerville著.程成等譯.軟件工程.機械工業(yè)出版社,2003年1月[22]飛思科技產(chǎn)品研發(fā)中心.精通Jbuilder9.電子工業(yè)出版社,2004[23]微型爪哇人.Java手機程序開發(fā).中國鐵道出版社,2003[24][美]FrandM.Carrano,Janet

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論