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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

因此,創(chuàng)建一個(gè)返回TtiledLayer的方法createBackGround(),以便在gameScreen()的構(gòu)造函數(shù)中調(diào)用。在方法中,定義整型數(shù)組map1[]以存儲(chǔ)Cell的索引值。并使用tiledLayer.setCell(column,row,map1[i])設(shè)定TtiledLayer的內(nèi)容,以形成地圖。其中i的值由循環(huán)for(inti=0;i<map1.length;i++)取得,column由語(yǔ)句column=i%15取得、行由row=(i-column)/15取得。畫出地圖后,由lm.append()將地圖添加到LayerManager類對(duì)象lm中。由于地圖位于Layer的最低層,即離用戶視線最遠(yuǎn)的層,所以Tiledlayer最后一個(gè)被添加到lm中。4.2.3地圖的移動(dòng)根據(jù)游戲的設(shè)定,游戲中選圖片是向下向上移動(dòng)的,實(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ū)域做了選擇動(dòng)作 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ù)點(diǎn),如果重復(fù)點(diǎn),取消上次所選擇的 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))//還沒(méi)有處理完已經(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()方法每個(gè)創(chuàng)建Command實(shí)例的J2ME的應(yīng)用程序也必須創(chuàng)建實(shí)現(xiàn)CommandListener接口的實(shí)例。每當(dāng)用戶通過(guò)commandAction()方法的方式與命令進(jìn)行交互的時(shí)候,就會(huì)通過(guò)CommandLIstener.所以實(shí)現(xiàn)CommandListener的類必須實(shí)現(xiàn)commandAction()方法。

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論