JavaME綜合實訓報告_第1頁
JavaME綜合實訓報告_第2頁
JavaME綜合實訓報告_第3頁
JavaME綜合實訓報告_第4頁
JavaME綜合實訓報告_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java ME綜合實訓實訓報告姓名 徐亮 學號 90917p35 系部 軟 件 學 院 專業(yè) 移 動 應 用 開 發(fā) 軟件項目 Java ME 實訓 指導教師 蔣理 完成時間 2020 年 6 月 28日 17 / 19文檔可自由編輯打印目 錄1 軟件項目概述11.1 J2ME開發(fā)背景11.2 手機游戲設計11.3 項目名稱12 項目策劃22.1 游戲需求分析22.2 游戲界面流程32.3 搭建平臺與環(huán)境32.3.1 平臺開發(fā)環(huán)境32.3.2 關于Wireless ToolKit32.3.3 關于Java Appication Manager43 模塊分析與設計43.1 程序的總體流程43.2

2、 構建游戲框架53.2.1 游戲啟動界面53.2.2 游戲設置界面54 功能編碼實現(xiàn)54.1 游戲主類MameCanvas64.2 通過游戲生成器生成的類74.3 游戲設置模塊94.3.1 游戲難度設計94.3.2 游戲環(huán)境設計124.3.3 游戲獲勝失敗設計135 運行與測試146 發(fā)布與運營157 實訓小結168 參考文獻171 軟件項目概述1.1 J2ME開發(fā)背景現(xiàn)在全球超過十億部移動電話正在被使用,并且這個數(shù)目正在逐漸增加。在除美國之外的每個發(fā)達國家,擁有手機的人數(shù)比擁有計算機的人數(shù)還多。統(tǒng)計表明,截止到2010年3月底,我國移動電話用戶已達7.8億戶,普及率為58.4部/百人,大約平

3、均每月增加720萬戶。2009年對計算機通信行業(yè)的開發(fā)者和從業(yè)者來說有太多的期待,而最值得期待的就是被稱之為純技術驅(qū)動的第三代移動通信系統(tǒng)的商用。姑且不談純技術驅(qū)動有沒有市場,能不能成功,但是3G的商用必定會給移動開發(fā)插上飛翔的翅膀,而且J2ME(Java 2 Micro Edition)將是移動開發(fā)這場競賽的領跑者。傳統(tǒng)手機出廠時均由硬件廠商固化程序,程序不能增加、刪除,有了錯誤也不能更新、修改,若要增加新功能必須另換一部手機。這極大的限制了手機軟件的發(fā)展。但隨著Java技術在手機上的應用,成功地解決這一問題。Java技術的開放性、安全性和龐大的社會已有資源,以及其跨平臺性,即“編寫一次,到

4、處運行”的特點,使Java技術成為這種智能手機軟件平臺的事實標準。1.2 手機游戲設計與傳統(tǒng)的主流的PC游戲相比,手機游戲的價值在于打發(fā)一些無聊的時間,作為一個移動的娛樂終端,手機游戲施展身手的機會永遠可能是在地鐵站、公交車或者是洗手間這些地方,也許在龐大的游戲行業(yè)里,手機游戲?qū)⒂肋h扮演著一個邊緣者的角色,因為誰也不能指望一個人在家的時候用手機玩游戲或者看電影。但是手機游戲的市場是巨大的,即便是只有十分之一的用戶來購買游戲,那也是一筆有利可圖的巨大利潤。1.3 項目名稱基于Netbeans IDE游戲生成器的一個簡單的神秘園游的手機游戲SercetGarden。2 項目策劃2.1 游戲需求分析

5、本次實訓程序采用面向?qū)ο蟮脑O計模式,對游戲中的所有物體賦予對象的概念和屬性,運行程序后允許用戶選擇執(zhí)行選項菜單;在開始游戲后先從外部文件載入游戲的圖片文件,對背景物體進行繪圖,并使用雙緩存技術保證屏幕重繪的精確性和實施性;有序程序中設定的游戲區(qū)域可能會大于實際的手機屏幕,必須進行合理的算法進行虛擬游戲區(qū)域與實際游戲區(qū)域的轉換,保證程序的正確性;同時,因為游戲中有眾多的移動對象,必須保證對游戲?qū)ο蠊δ芡暾那疤嵯?,盡量減少系統(tǒng)的資源消耗,否則在資源有限的手機中運行此程序是不現(xiàn)實的。根據(jù)游戲的特點,該游戲的需求如下:1一個玩家精靈Karel2隨關卡而改變數(shù)量和速度的敵方蜘蛛3通用的游戲控制4難度增

6、加的關卡模式5合理的過關功能6游戲背景音樂7游戲背景燈2.2 游戲界面流程圖2-1 游戲界面流程2.3 搭建平臺與環(huán)境2.3.1 平臺開發(fā)環(huán)境Microsoft Windows XP Professional SP3JDK(Java Development Kit)Netbeans IDE 6.8Sun Java Wireless Toolkit 2.5.2 for CLDC2.3.2 關于Wireless ToolKitWTK(Wireless Tool Kit)是Sun公司針對J2ME推出的用于手機和Palm等移動設備的開發(fā)包,是除手機廠商的專用開發(fā)包外唯一的手機模擬器開發(fā)包。它通用性高,

7、開發(fā)出的應用程序可保證能運行在大部分設備上,而不像專用廠商具有一定的不兼容性。雖然它沒有強大的功能和完善的調(diào)試手段,但它提供運行模擬器的最基本組件,是其他IDE需集成采用的必備元素。2.3.3 關于Java Appication Manager 手機中負責調(diào)配程序運行資源的管理后臺是Java Application Manager。它所使用的傳輸媒體可以是紅外線、網(wǎng)絡、以及其他可用來傳輸?shù)拿襟w。Java Application Manager 會從網(wǎng)絡上下載代表該Application Suite的JAR文檔,接著在手機上安裝此MIDlet Suite,然后在手機開始執(zhí)行該應用程序。包括MID

8、Plet套件被安裝、升級、刪除、啟動、停止以及常規(guī)的管理。3 模塊分析與設計3.1 程序的總體流程游戲的總體流程包含了整個游戲中的動作切換過程,這些動作切換包括:選擇進入游戲或者退出游戲,游戲進入主繪線程開始繪制游戲界面以及在主繪線程中產(chǎn)生的各種命令和消息。下圖描述了游戲的主控流程。圖3-1程序的總體流程3.2 構建游戲框架3.2.1 游戲啟動界面為了增加軟件的專業(yè)化效果,為游戲軟件添加啟動流程畫面可以增強游戲的商業(yè)化效果。下圖是該游戲啟動畫面的流設計界面。圖3-2 SecretGardenVisualMIDlet 流設計視圖3.2.2 游戲設置界面游戲設置表單的設計分為游戲等級,游戲環(huán)境的設

9、置。其中游戲等級分為四個等級,分別是簡單、高手、牛人、強人,依次對應游戲的難度的增加,即游戲中蜘蛛的數(shù)量和速度隨著等級的增加而增加;游戲環(huán)境的設置有背景燈和背景音樂的開啟。4 功能編碼實現(xiàn)本手機游戲中共有四個類,其中SecretGardenVisualMIDlet類主要負責屏幕的切換,它們分別是,游戲啟動的畫面閃屏,游戲菜單,設置,關于以及游戲屏幕等。游戲使用的類是主類MameCanvas以及SpriteRandomMovement類,游戲的設計類是GameDesign類,游戲的類UML圖如下圖所示:圖4-1游戲總體類圖游戲的線程主要由三個部分組成:檢測鍵盤輸入(與玩家交互),更新游戲場景(處

10、理游戲邏輯),繪制畫布。基本上所有的2D游戲都可以按章這三個模塊來設計,三個模塊相互聯(lián)系,按照模塊的思想來實現(xiàn)游戲線程將更加面向?qū)ο蠛捅阌诶斫?。如果程序運行快于預期速度會使玩家感覺到抖動,從而影響游戲效果,因此還需要檢測每幀的運行時間,如果過快則等待一段時間,如果過慢則掛起當前線程允許其他線程執(zhí)行,線程的模塊如下圖所示:圖4-2游戲線程模塊圖4.1 游戲主類MameCanvasMainCanvas 類是游戲的主類,控制著游戲角色的出現(xiàn)和行動方向,對游戲中的場景進行布局,并對游戲角色和場景中的裝飾物進行碰撞檢測。為了實現(xiàn)MIDP API中的游戲功能,將該類繼承自GameCanvas,并修改代碼如

11、下:public MainCanvas() extendeds GameCanvas super(true); try this.setFullScreenMode(true); initThomas(difficulty); this.init(); catch (IOException ex) ex.printStackTrace(); private void init() throws IOException 由于為游戲軟件添加啟動流程畫面,所以要將主類MainCanvas的實例顯示到手機屏幕上,修改啟動流程畫面SecretGardenVisualMIDlet類如下:if (_sele

12、ctedElement.equals(loading) this.mainCanvas = new MainCanvas(); this.t = new Thread(mainCanvas); t.start(); d = Display.getDisplay(this); d.setCurrent(mainCanvas);4.2 通過游戲生成器生成的類在NetBeans IDE提供的游戲生成器中可以設計游戲中地圖、場景和游戲角色等,通過簡單的退拽可以減少不必要的重復勞動,我覺得這個是我認為NetBeans IDE比其他IDE要好的主要原因之一。下圖是通過游戲生成起生成GameDesign類并

13、經(jīng)過簡單修改后形成的類圖:圖4-3通過游戲生成起生成的GameDesign類其中getTopview_titles()方法用于讀取創(chuàng)建平鋪層的圖片資源;getBase()方法用于創(chuàng)建平鋪層Base,返回TiledLayer類型對象。其中的數(shù)組tiles即為平鋪層的貼圖單元;updateLayerManagerForForest ()方法是游戲生成器的管理方法,用于管理場景中的平鋪層和動畫層。其中的m是LayerManager類型對象,是圖層的管理者。將生成好的場景Forset添加到MainCanvas中并顯示在屏幕上,在init()方法中初始化即可:private void init() th

14、rows IOException this.timer = new Timer(); this.gameDesign = new GameDesign(); this.waterAnimator = new TileAnimationTask( gameDesign.getWater(), gameDesign.AnimWaterWater, gameDesign.AnimWaterSeq001, true); this.timer.scheduleAtFixedRate( this.waterAnimator, 0, gameDesign.AnimWaterSeq001Delay); thi

15、s.tlThings = this.gameDesign.getThings(); this.tlTrees = this.gameDesign.getTrees(); this.tlWater = this.gameDesign.getWater(); this.tlBase = this.gameDesign.getBase(); this.tljian = this.gameDesign.getJiantiled(); this.lm = new LayerManager(); gameDesign.updateLayerManagerForForest(lm);4.3 游戲設置模塊為了

16、增加游戲的可玩性,在本游戲中設置了游戲的難度,游戲的背景燈和游戲的背景音樂。4.3.1 游戲難度設計表 4-1游戲難度的設計難度名稱難度等級蜘蛛數(shù)量蜘蛛速度簡單155高手2107牛人31510超人42015為了響應為了響應用戶在 setting 窗口的難度選擇,首先要在 getSetting()方法中添加以下代碼,以響應用戶的選擇:setting.setItemStateListener(this)同時,使 SecretGardenVisualMIDlet 擴展 ItemStateListener 接口,并實現(xiàn)下方的itemStateChanged()方法: public void itemS

17、tateChanged(Item item) if (item = levelchoice) if (levelchoice.isSelected(0) difficulty = 1; else if (levelchoice.isSelected(1) difficulty = 2; else if (levelchoice.isSelected(2) difficulty = 3; else if (levelchoice.isSelected(3) difficulty = 4; 并修改 MainCanvas 構造方法,在 try 中添加初始化 Thomas 的方法:initThomas

18、(difficulty)根據(jù)用戶不同的選擇生成的不同的Thomas對象組并初始化Thomas:private void initThomas(int numThomas) if (numThomas = 1) count = 5; speed = 5; spriteThomas = new Spritecount; spriteThomasAnimator = new SpriteAnimationTaskcount; spriteThomasRandomMovement = new SpriteRandomMovementcount; /此處省略用戶選擇其他的選項的代碼實現(xiàn) 修改 MainC

19、anvas 中的 init()方法:private void init() throws IOException this.spriteThomas = gameDesign.getThomasGroup(count); for (int i = 0; i count; i+) this.spriteThomasi.defineReferencePixel(8, 8); this.spriteThomasAnimatori = new SpriteAnimationTask(this.spriteThomasi, true); this.spriteThomasAnimatori.setMov

20、ing(true); this.timer.scheduleAtFixedRate( this.spriteThomasAnimatori, 0, gameDesign.ThomasSeqWalkHorizDelay); this.spriteThomasRandomMovementi = new SpriteRandomMovement( this, spriteThomasi, GameDesign.flagi, speed); this.spriteThomasRandomMovementi.setSequences( gameDesign.ThomasSeqWalkVert, Spri

21、te.TRANS_NONE, gameDesign.ThomasSeqWalkVert, Sprite.TRANS_ROT180, gameDesign.ThomasSeqWalkHoriz, Sprite.TRANS_ROT180, gameDesign.ThomasSeqWalkHoriz, Sprite.TRANS_NONE); (new Thread(spriteThomasRandomMovementi).start(); 在 GameDesign 中添加 getThomasGroup()構造方法: public Sprite getThomasGroup(int count) th

22、rows java.io.IOException GameDesign.countThomas=count; Random rm = new Random(); for (int i = 0; i count; i+) flagi = Math.abs(rm.nextInt() % 4; if (ThomasGroupi = null) ThomasGroupi = new Sprite(getTopview_tiles(), 16, 16); switch (flagi) case 0: ThomasGroupi.setFrameSequence(ThomasSeqWalkVert); br

23、eak; /此處省略其他case 語句 return ThomasGroup; 4.3.2 游戲環(huán)境設計背光燈是手機 LCD 發(fā)出的燈光,在 Java ME中可以通過 flashBacklight()方法設置背光燈的照亮時間。在 itemStateChanged()方法中添加以下監(jiān)聽代碼:public void itemStateChanged(Item item) if (item = environmentchoice) if (environmentchoice.isSelected(0) Display.getDisplay(this).flashBacklight(40000); e

24、lse Display.getDisplay(this).flashBacklight(0); 游戲的音效對游戲至關重要,好的游戲聲音可以增強手機游戲的效果。MIDP 2.0 支持mid 格式和 wav 格式聲音的播放。在Java ME 中可以通過 javax.microedition.media 包中提供的方法播放背景音樂。在 itemStateChanged()方法中添加以下代碼:public void itemStateChanged(Item item) if (item = environmentchoice) if (environmentchoice.isSelected(1)

25、isplaymusic = true; else isplaymusic = false; 修改 MainCanvas 構造方法,添加播放背景音樂的功能:public MainCanvas(boolean isplaymusic) if (isplaymusic) try player = Manager.createPlayer(getClass().getResourceAsStream(/res/bg.mid), audio/midi); player.realize(); player.setLoopCount(-1); player.start(); catch (Exception

26、 e) e.printStackTrace(); 4.3.3 游戲獲勝失敗設計為了刺激游戲玩家,可以為游戲添加獲勝和失利的判斷。在本游戲中,如果玩家獲得場景中的寶劍,即為獲勝;如果玩家不小心碰到爬蟲,則失利。修改 MainCanvas 中的碰撞檢測方法 spriteCollides(),在其中添加玩家獲取寶劍后獲勝的判斷和玩家碰到爬蟲失利的判斷:public boolean spriteCollides(Sprite sprite) if (sprite = this.spriteKarel) if (this.spriteKarel.collidesWith(this.tljian, tru

27、e) this.showAlert(null, midlet.getSvgMenu().getSvgCanvas(), /res/win.png, ); this.stop(); for (int i = 0; i count; i+) if (this.spriteKarel.collidesWith(this.spriteThomasi, true) this.showAlert(null, midlet.getSvgMenu().getSvgCanvas(), /res/gameover.png, ); this.stop(); /精靈Thomas 的碰撞檢測 for (int i =

28、0; i count; i+) if (this.spriteThomasi.collidesWith(this.spriteKarel, true) this.showAlert(null, midlet.getSvgMenu().getSvgCanvas(), /res/gameover.png, ); this.stop(); return sprite.collidesWith( sprite = this.spriteKarel ? this.spriteThomas0 : this.spriteKarel, true) | sprite.collidesWith(this.tlTh

29、ings, true) | sprite.collidesWith(this.tlTrees, true) | sprite.collidesWith(this.tlWater, true) | sprite.getX() 0 | sprite.getY() (this.tlBase.getWidth() - sprite.getWidth() | sprite.getY() (this.tlBase.getHeight() - sprite.getHeight(); 5 運行與測試一個完整的開發(fā)周期通常包括:編輯源代碼 - 打包 - 安裝 - 運行 - 測試。Netbeans IDE能自動對MIDlet套件進行打包。打包產(chǎn)生兩個文件,即一個 MIDlet描述符JAD和一個MIDlet套件JAR。描述符是一個JAD文件,包含有關 MIDlet套件的信息。JAR包含組成MIDlet套件的類文件和資源。在下載整個JAR之前,設備可以使用該描述符了解有關應用程序的信息,這在內(nèi)存匱乏、帶寬極缺的無線環(huán)境中很值得重視。通過Netbeans IDE運行該手機游戲程序生成的游戲界面如下圖所示:圖5-1啟動進入游戲的各個畫面6 發(fā)布與運營在Java當中,會有Class文件被反編譯之后,程序代碼就很容易被解析出來的弱點。Netbeans IDE中就提供了

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論