




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于嵌入式系統的java 游戲的設計與實現網絡工程專業論文題 目:基于嵌入式系統的java游戲的設計與實現 專 業: 網 絡 工 程 目 錄摘 要7abstract7一 前 言71.2引 言81.3手機游戲特征81.4手機游戲的類型91.5 手機軟件現狀91.6 本游戲的未來91.7 手機未來的發展方向10二 開發環境及相關技術的介紹112.1 java語言的特點112.2 j2me 是什么?112.3 j2me智能客戶端122.4 j2me 總體架構122.5 簡單環境的搭建:13三 j2me 手機游戲需求分析143.1 本程序需解決的有關技術問題143.2 程序流程圖153.3 繪圖與mi
2、dp2.0新增的gamecanvas包163.3.1 提供低級繪制的canvas類163.3.2 graphics類163.3.3 png格式163.4 有關繪圖的一些技術163.5 內存使用的最佳化173.6 混淆器(obfuscator)的使用173.7 模擬器的相關調試18四 程序分析和編寫手機代碼184.1 游戲進入前的選擇184.2 主游戲邏輯及其涉及到的若干類184.2.2 游戲的設定204.2.3 游戲中的幫助和程序控制器204.2.4 游戲版權聲明234.2.5 游戲的主要程序244.2.6 游戲的主程序33五 常見錯誤分析345.1 畫圖錯誤345.2 變量沒有定義或沒有初始
3、化345.3 在 gamescreen 類中不能用線程345.4 在玩游戲時出會發出兩張同樣的牌35參考資料36致 謝36摘 要j2me(java 2 micro edition) 是近年來隨著各種不同設備,尤其是移動通信設備的飛速發展而誕生的一項新的開發技術。它定位在消費性電子產品的應用上,對設備的智能化、多樣化,提供了革命性的解決方案,并因其“write once, run anywhere”的java特性而提高開發的效率。 隨著手機的日益普及、java功能在移動設備上的實現,java應用程序產生的手機增值服務逐漸體現出其影響力,對豐富人們的生活內容、提供快捷的資訊起著不可忽視的作用。本論
4、文著眼于j2me技術的應用,開發一款可商用的手機游戲程序撲克豪斯。本程序的界面和運作方式于臺式游戲豪斯,將老少皆宜的經典作品移植到手機上來,為更流行的硬件平臺提供應用軟件。 本論文介紹了手機的軟硬件特性、j2me的相關技術及本程序的結構分析和具體功能的實現。 關鍵詞:j2me,手機游戲, java,撲克豪斯 abstractj2me is a kind of fast developing technology implemented on various devices especially mobile communication equipments. it focuses on app
5、lication for consumptive electronic products, providing revolutionary solution to the intelligentization and diversification of the equipment. it improve the efficiency of the development process thanks to its “write once, run anywhere” nature. when cell phone is getting ever more popular nowadays,
6、with the implementation of java technology on mobile equipment, increment of capital on communication service exhibits its force on peoples everyday life, providing them ever fast information just in hand. this dissertation focuses on implementation of j2me technology and has developed a commercial
7、game suite run on mobile phonespokermachine. this application inherits many characters of the old fashioned game battle city which developed by nintendo in 1980s. it transports the classical product to mobile phones, offering corresponding software for such more popular hardware platform. this disse
8、rtation introduces the characteristic of nintendo fc machine and its software, j2me and its relative technology as well as this programs structure and analysis of implementation in details. key words: j2me, mobile game, java, tank, battle city. 一 前 言 1.2引 言 手機游戲成績斐然,成為it產業中增長最快的部分之一.縱觀it產業的歷史,計算機游戲已
9、經成為技術創新背后的動者渴望更加強大的硬件計算能力;渴望不受不同的軟件的限制?無論是將圖形強制在人工智能(ai)上 還是網絡安全性。游戲開發者和玩家常常是前沿計算機技術的最早的采用者。由于他們的創新天性,游戲不再是由大型采購公司控制的技術產品?游戲領域總是有充足的空間給那此 在這方面有天分的單個創新者。隨著技術對游戲經驗的促進,游戲市場持續增長。商業it革命為我們節省了時間力之一。計算機游戲和金錢,從而提高了我們的工作水平,我們因此花費更多的時間和金錢在游戲上,來改善生活的整體質量。甚至在當今困難的經濟時代,游戲仍保持快速增長,他仍然是盈利行業的組成部分。java開發者應該注意到這里蘊藏著的巨
10、大的商機。1.3手機游戲特征手機游戲的盈利主要是由于它們的涉及面很廣。手機已經與現代生活方式緊緊地結合在一起。他們是最普遍攜帶的個人用品中僅次于鑰匙和錢包的東西。傳統的臺式機游戲將目標鎖定在低級趣味的人和青少年身上,而手機游戲則每個人都可以訪問的到?隨時,隨地。盡管每個手機游戲都不貴,但是巨大的使用量(如:每人每星期一個新游戲)將使得這個市場商機無限并且有利可圖。但是,對于開發者來說,將控制臺游戲遷移到手機游戲工程很大因為他們所面向的對象、生活方式和分布式模型都有著極大的區別。讓我們從手機游戲的需求談起吧。 一個成功的手機游戲大多具有以下特征: 1:易于學習: 既然手機游戲面向的是普通消費者而
11、不是計算機高手,那么他們不可能深入的學習游戲技巧。消費者不會花幾個小時去研究一個3美元的手動操作的游戲。所以游戲必須是一下載就可以玩的。保持游戲的簡單是最基本的要求。 2:可中斷性: 多任務處理是手機生活方式的基本特征。手機用戶常常在任務(如等一個電子郵件或者等車)之間有一小段時間。而游戲、日歷管理、通訊和工作數據訪問使用的是同一個設備。所以一個好的手機游戲應該提供短時間的娛樂功能,并且允許用戶在游戲和工作模式之間順利切換。3:基于訂閱:手機游戲的盈利成功取決于他們巨大的使用量。一開始開發和設計每個游戲都是昂貴的。如果一個手機游戲開發者要賺錢的話,重要的是:同一個游戲引擎,多個標題,基本的故事
12、情節類似。基于訂閱的游戲是不斷產生收入的最好方法。 4:豐富的社會交互: 不管一個游戲設計得多好,只要玩家找到了它的根本模式或者玩完了所有的游戲路徑很快就會厭煩這個游戲。對于一個基于訂閱的游戲,重要的是與別的玩家合作以增強所玩游戲的智力和隨機性。在今天紛繁復雜的多玩家游戲中具有豐富社會交互的游戲證明是成功的。 1.4手機游戲的類型 基于以上標準,最有可能成功的手機游戲就是那些臨時小游戲,它可為廣泛的玩家在所有的社交場合提供娛樂。特別是,下列類型的游戲將是明天最具有殺傷力的游戲: 1:多玩家游戲: 這些游戲可以提供手機訪問以便建立在線游戲團體。或者,他們利用手機專有特征如多媒體通訊和基于位置的服
13、務,從而創建完全不同的社會結構。好的游戲設計和管理是這種類型游戲成功的關鍵。 2:基于內容的游戲:這些游戲傳送版權的多媒體內容,如名人的圖片、視頻片斷、音頻立體聲、和私人的體育節目,給那些音樂/電影/體育迷們。它成功的關鍵就是提供值得訂閱的高品質的內容流。 3:高沖擊的視頻游戲:pc 和臺式游戲已經從2d 進化到3d。手機游戲也會遵循這種趨勢。現在已經出現手機3d工具箱和聽筒。但是,3d是非常資源集中型的。他們要求開發者和圖形設計者都是專家級的。專業的商店最有可能開發這些游戲。 1.5 手機軟件現狀 在信息社會中,手機及其他無線設備越來越多的走進普通百姓的工作和生活,隨著信息網絡化的不斷進展,
14、手機及其他無線設備上網絡勢在必行。但是傳統手機存在以下弊端: 1. 傳統手機出廠時均由硬件廠商固化程序,程序不能增加、刪除,有了錯誤也不能更新、修改,若要增加新功能必須另換一部手機。 2. 傳統手機訪問互聯網是通過wap(wireless application protocal),所有網絡資源必須接通網絡才能在線訪問,非常耗時、費用亦很高。 而java技術在無線應用方面的優勢非常明顯: 1. 應用程序可按需下載,而不是購買由硬件商提供的套件,可升級空間大。 2. java技術提供了一個類庫,它使的應用開發商可以創建更為直覺、豐富的用戶界面(gui); 3. java技術使網絡帶寬的應用更為有
15、效,因為應用程序可以下載到器件上,并在本地運行,僅僅是在連接到服務器時才會占用網絡帶寬。 基于以上分析,java手機將是未來手機的發展方向,是業界的熱點。1.6 本游戲的未來 看過周潤發主演的賭神都知道里的豪斯是很好玩的,也很有發展前途。一,這個游戲對手機的要求不高;二,這個游戲簡單;三,當這個游戲做成網絡游戲時,可以是各個玩家斗智的平臺;要實現這點技術要求并不難。在本設計的基礎上再加上某些技術就可以了:a) 網絡的連接 b) 能讀能存網絡數據庫 c) 牌不再是用隨機產生這么簡,它應該根據玩家的積分來產生,這樣會更好。 1.7 手機未來的發展方向 手機游戲的盈利主要是由于它們的涉及面很廣。手機
16、已經與現代生活方式緊緊地結合在一起。他們是最普遍攜帶的個人用品中僅次于鑰匙和錢包的東西。傳統的臺式機游戲將目標鎖定在低級趣味的人和青少年身上,而手機游戲則每個人都可以訪問的到隨時,隨地。盡管每個手機游戲都不貴,但是巨大的使用量(如:每人每星期一個新游戲)將使得這個市場商機無限。只要有好的游戲,就會有更廣的使用量。 二 開發環境及相關技術的介紹 2.1 java語言的特點 1. 平臺無關性 java引進虛擬機原理,并運行于虛擬機,實現不同平臺之間的java接口。使用java編寫的程序能在世界范圍內共享。java的數據類型與機器無關。 2. 安全性 java的編程類似c+,但舍棄了c+的指針對存儲
17、器地址的直接操作,程序運行時,內存由操作系統分配,這樣可以避免病毒通過指針入侵系統。它提供 了安全管理器,防止程序的非法訪問。 3. 面向對象 java吸收了c+面向對象的概念,將數據封裝于類中,實現了程序的簡潔性和 便于維護性,使程序代碼可以只需一次編譯就可反復利用。 4. 分布式 java建立在tcp/ip網絡平臺上,提供了用http和ftp協議傳送和接收信息的庫函數,使用其相關技術可以十分方便的構建分布式應用系統。 5. 健壯性 java致力與檢查程序在編譯和運行時的錯誤,并自動回收內存,減少了內存出錯的可能性。java取消了c語言的結構、指針、#define語句、多重繼承、goto語句
18、、操作符、重載等不易被掌握的特性,提供垃圾收集器自動回收不用的內存空間。 2.2 j2me 是什么? 據j2me應用程序調用的api,j2me應用程序分為標準應用程序和不易移植的應用程序兩種。 據j2me應用程序調用的api,j2me應用程序分為標準應用程序和不易移植的應用程序兩種。 術語: cdc:連接設備配置 cldc:連接限制設備配置 jre:java運行環境 midp:mobile information device profile規范 ota:over the air 非ota:數據線、藍牙(bluetooth)、紅外線(irda)、多媒體信息服務(mms)、email附件 2.3
19、 j2me智能客戶端 j2me平臺被認為是最杰出的手機游戲平臺,它為開發者、設備制造商、網絡通信公司和消費者廣泛接受。它有一些非常重要的特征對所有組織都有益 2.4 j2me 總體架構 j2me 使用配置和簡表定制 java 運行時環境 (jre)。作為一個完整的 jre,j2me 由配置和簡表組成,配置決定了使用的 jvm,而簡表通過添加特定于域的類來定義應用程序。 配置將基本運行時環境定義為一組核心類和一個運行在特定類型設備上的特定 jvm。我們將在 j2me 配置一章中詳細討論配置。 簡表定義應用程序;特別地,它向 j2me 配置中添加特定于域的類,定義設備的某種作用。我們將在 j2me
20、 簡表一章中深入介紹簡表。 下面的圖表描述了不同的虛擬機、配置和簡表之間的關系。它同時把 j2se api 和它的 java 虛擬機進行了比較。雖然 j2se 虛擬機通常被稱為一種 jvm,但是 j2me 虛擬機、kvm 和 cvm 都是 jvm 的子集。kvm 和 cvm 均可被看作是一種 java 虛擬機 - 它們是j2se jvm 的壓縮版,并特定于 j2me。 移動通信的時代即將來臨,通信相關待業變得前景可期,而除了移動通信的主要通信工具手機,其功能越來越強大之外,有更多的廠商相繼投入移動通信設備的生產與開發,其平臺和操作系統的復雜度比目前混亂的pda有過之而不及,除了symbian
21、針對手機推出操作系統 symbian os(過去稱做epoc,)操作系統之外,微軟也針對手機推出操作系統 smartphone 2002 (stinger),但是日前市面上的手機仍以使用廠商自行開發的操作系統者居多。 平臺的復雜紛亂對一般用戶當然沒什么影響,但是對于程序開發人員來說,這么多不同的程序發展平臺,光看完頭就昏了。如果每個平臺都有自己的程序寫法以及程序庫,那么光是看上面這些平臺至少就要學習五種以上程序的寫法。當然,只專精一種平臺當然是很好的事情。可是程序員不禁要說:“如果我們寫出來的軟件可以在不經過修改源代碼的情況下就能夠在這些平臺上執行,那不是更完美嗎?“對程序開發人員來說,這樣的
22、投資報酬率當然是最大的。 2.5 簡單環境的搭建: 1、 下載jdk和j2me無線工具包() 安裝sun jdk:j2sdk-1_4_0_03-windows=i386 安裝sun j2me sdk:j2me_wireless_toolkit-1_0_3-win 2 關于wireless tool kit wtk(wireless tool kit)是sun公司針對j2me推出的用于手機和palm等 移動設備的開發包,是除手機廠商的專用開發包外唯一的手機模擬器開發包。 它通用性高,開發出的應用程序可保證能運行在大部分設備上,而不像專用 廠商具有一定的不兼容性。雖然它沒有強大的功能和完善的調試手
23、段,但它 提供運行模擬器的最基本組件,是其他ide需集成采用的必備元素。 3, 用于手機游戲開發的環境不是只建立一個 java sdk 就可以了,它還需要了一個一個庫類,叫 java toolkit。首先安裝 java sdk 再在原來的目錄下安裝java toolkit這個新的環境就可以滿足我們的需要了。然后我們編寫一個最簡單的程序用來驗證這個環境是否可以用來編寫我們的手機程序。 編寫以下代碼: 保存成 hello.java 文件。 import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public cl
24、ass hello extends midlet private display display; public hello() display = display.getdisplay(this); public void startapp() textbox t = new textbox(hello midlet, hello midp!, 256, 0); display.setcurrent(t); public void pauseapp() public void destroyapp(boolean unconditional) 啟動ktoolbar 新建一個工程,取名 hel
25、lo 。把以上文件拷到 hello 文件的目錄編譯。能通過編譯并能運行,說明這個開發環境就能滿足我們的需要了。 三 j2me 手機游戲需求分析 3.1 本程序需解決的有關技術問題 1. 游戲程序是一項精度要求很高的程序系統,因為其代碼利用率很高。一個實時運行的最終作品,每秒都會運行成千上萬行程序,繪圖事件、鍵盤事件都會以極高的頻率在后臺等待響應,若有絲毫的差別都將很容易導致程序在運行不久后可能出現嚴重錯誤,甚至死循環。因此,其邏輯設計應當相當嚴謹,需將所有可能發生的事件及意外情況考慮在設計中。 2. 游戲中為了美觀,適用性強,可能需要采用外部文件引入的圖片貼圖,有關貼圖,在midp2.0中提供
26、了用于增強游戲功能的game包,使得解決靜態或動態、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。 3. 一開始就把牌全部分配好,這樣就可以簡單而有效地避免了牌的重復,也可以大大地簡化了程序代碼的編寫。 4. 牌的轉化可以用一個函數來實現,這樣就可以使代碼更模塊化,利用也就可以更高5牌慢慢移動的實現。牌的移動是用線程來實現的,用thread.sleep() 這個函數來作時間延遲,讓坐標變量緩慢地變化。然后通過刷新畫圖,就會使人覺得牌是在緩慢地移動。 6是否是要牌還是放棄(認輸),它通過向右鍵(要牌)和向左鍵(放棄)來操作的。當點擊向右鍵時,發生點擊事伯,變量發生相應的變化,然后觸發畫圖事件。
27、 7當玩家都跟到5張牌時,就要判斷牌的大小了,它通過多次循環,來確定其大小。 以上相關技術細節和整體流程將分別在以下小節闡述。 3.2 程序流程圖 midlet suite是midp應用程序的最小單位,jam負責將手機內的midlet suite以圖形 v 化的方式呈現,讓用戶能夠選取欲執行的midlet suite,一旦選取了某個midlet suite,操作系統就會激活kvm執行里面的midlet。midlet及相關的支持類組成了midp應用程序的實際內容。每個midlet都必須繼承javax.microedition.midlet.midlet這個抽象類。在midp規格中定義了midle
28、t的生命周期,以及可以存在的三種狀態,包括paused、active以及destroyed,每一個midlet在任何時刻只可能處于其中的一個狀態這 v 三種狀態的轉換關系如圖所示: 本程序采用面向對象的設計模式,對游戲中的所有物體賦予對象的概念和屬性。運行程序后允許用戶選擇執行選項菜單,在開始游戲后將先從外部文件載入牌的圖文件,對背景的所有物體進行繪圖。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術對屏幕重繪,實時反映整個游戲的進行狀態。用戶控制的牌運行在主線程中,隨屏幕刷新的頻率而移動。牌將在游戲開始時逐漸新增線程,每增加一個牌對象就新增加一條線程,一旦線程數滿到最大值(本程序暫
29、設置最大值為幾千多個),就不允許線程的再增加。這個線程問題就是本設計的一個 bug。 本程序主要的流程如圖32所示: 流程簡略解釋: 程序一開始執行是先從主類 test.java 來開始。這個類從 midlet 類繼承過 來,在程序的開始函數 startapp() 中我用 navigator.current = navigator.main_screen; 這個等式把程序的執行轉到 mainscreen.java 文件(程序的畫面)來。而這個類繼承 list ,這個 list 類可以更方便地控制程序的選擇。在這個文件中列出一個菜單供用戶去選擇,如下: 開始 設定 版權聲明 離開 當點擊開始時,
30、程序轉到 gamescreen 這個類去。gamescreen 這個類繼承 canvas,canvas 專門是用來控制游戲的。里面包括屏幕的繪圖,一些變量的初始化。 當點擊設定時,程序轉到setscreen 這個類。這個類用于登錄幫助網站的,當然這個是需要網絡支持的。 當點擊版權聲明時,程序轉到 copyscreen 這個類,這個類繼承 alert,它用于描述版權的一些信息。 當點擊離開時,程序退出 test 類。 3.3 繪圖與midp2.0新增的gamecanvas包 3.3.1 提供低級繪制的canvas類 為了能有程序開發人員控制接口的外觀和行為,需要使用大量的初級用戶接口類,尤其在游
31、戲程序中,幾乎完全依賴的就是canvas抽象類進行繪圖。從程序開發的觀點看,canvas類可與高級screen類交互,程序可在需要時在canvas中摻入高級類的組件。canvas提供了鍵盤事件、指點桿事件(如果設備支持),并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數。鍵盤事件由鍵代碼指定,但這樣控制游戲會導致缺乏通用性,并不是每個設備的鍵盤布局都適合游戲的操作。應當將鍵代碼轉換為游戲鍵的代碼,以便硬件開發商能定義他們自己的游戲鍵布局。本程序中,操縱用戶坦克運行的按鍵都定義為游戲控制鍵,這樣便能適應所有的機器。 3.3.2 graphics類 graphics類提供了簡單的2d繪圖功能。它具有2
32、4位深度色彩的繪制能力,以三原色分別各占一個字節表示其顏色。程序只能在paint()函數中使用graphics繪制,gamecanvas可調用getgraphics()函數直接繪制在緩沖區上,可以在任何時間請求傳輸到前臺。其對象會被傳給canvas的paint()函數, 以便最終顯示。 3.3.3 png格式 png(portable network graphics)格式是midlet唯一支持的圖象格式,png具體格式由png specification,version 1.0定義的。png格式提供透明背景的圖象,這對繪制游戲畫面和被操縱主角極有幫助。坦克之間或與障礙物碰撞時就不會因為背景有
33、特定的顏色,顯示出的效果像貼上的圖片而缺乏真實感,物體之間輕微重疊時最上層圖片也不會覆蓋超過其有效象素外的部分。 png格式圖片中包含許多定義其圖片特性的冗余部分(chunks)。這些代碼包含在每一個單獨的png格式圖象中,然而如果將多個png圖象合并在一張幅面稍大一些的整圖中,多個chunks就可以得到精簡,圖片的大小可以得到控制。使用image 類中的createimage函數可從整圖中分割出所需要的元素。在game包中的tiledlayer和sprite類都整合了這樣的 功能。本程序中的地圖元素都集成在一張tile.png圖片中,實現了方便的管理和程序體積的精簡。 3.4 有關繪圖的一些
34、技術 在沒有midp2.0前,進行游戲繪圖一般需要手動編程使用雙緩沖。需要在paint()方法內所想要畫的圖形畫在一張預先準備好的背景,等所有繪圖操作都完成后再將背景的數據拷貝到實際的屏幕上。image類提供了一個建立背景的靜態方法createimage(int width, int height),再利用getgraphics()方法取得屬于這個背景的graphics對象,所進行的繪圖操作都會作用在背景上,等到全部的繪圖操作完成后,再調用drawimage()方法將背景的數據復制到實際顯示的屏幕上。 3.5 內存使用的最佳化 通常在midp應用程序的手機執行環境中,所牽涉的內存有下列三種:
35、應用程序存儲內存 recordstore存儲內存 執行時期內存(java heap) 其中前兩種是持久性的內存,關閉電源后還能保持數據的正確性,通常這兩種內存所能存儲的容量是合并計算的,這個上限對每種手機都不一樣,大部分在一兩百kb內。在這樣的情況下需要在不影響原有功能的情況下適當的縮減jar文件的大小,除了可以克服內存空間的限制外,也能大幅度縮短下載的時間(費用也降低了),勢必會有更多的人愿意下載所開發的程序。其方法有第一就是盡量縮短命名的長度。在應用程序內,對于所建立的類、接口、方法及變量名而言,都需要賦予一個識別的名稱,所命名的名稱每多一個字符就會在類文件內多產生一個字節,對于一個較復雜
36、的應用程序而言就會增加為數不小的數據量。所有這些可以借助混淆器來幫助實現。 第二是減少復雜的程序結構,為一些共同的行為建立一個抽象類(abstract class) 來表示繼承的子類的共通性。 第三是減少圖形數據的大小。將png格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了chunks,將比合并前的總大小減少許多。 3.6 混淆器(obfuscator)的使用 java 語言并沒有完全編譯成二進制可執行文件,編譯出的.class文件是一種介于源程序和二進制之間的一中基于半解釋的字節碼,需要虛擬機來執行。它包括了所有的信息。然而這樣會導致.class很容易被反編譯為源代碼,從而不能保
37、護作者的知識成果。目前流行的如decode,jad等反編譯工具可以以很快的速度生成源文件。如果不加以施行有效的措施,將造成嚴重的后果。 由此引入混淆器的概念。混淆器將代碼中的所有變量、函數、類的名稱變為簡短的英文字母代號,如果缺乏相應的函數名指示和程序注釋,即使被反編譯,也將難以閱讀。 混淆器的作用不僅僅是保護代碼,它也有精簡編譯后程序大小的作用。由于以上介紹的減少變量、函數的命名長度的關系,編譯后也會從.class文件中減少這些冗余的信息。混淆后,體積大約能減少25%,這對當前費用較貴的無線網絡傳輸是有一定意義的。 為了能與各種ide集成,就像java2 sdk一樣,混淆器采用命令行參數的形
38、式,以便可被其調用。目前流行的obfuscator有retroguard等。 3.7 模擬器的相關調試 ide整合的wireless tool kit提供了許多在運行時監視運行狀態的工具。 包括內存狀況的檢測(手機上的內存空間十分有限,必須時刻關注機載內存是否大于程序所能使用到的最大可能的內存空間),網絡狀況的檢測,運行函數的跟蹤等。如圖3-4,是內存跟蹤測試隨時間變化的調試器。其中,允許強制垃圾回收(garbage collection)。由于java語言中,不像許多其他的如c+語言,不需要指定回收函數中特定不使用的資源,資源回收機制將自動清空無效變量占用的空間。在程序運行中也可以調用sys
39、tem類的gc()函數手動收回廢棄的內存。 四 程序分析和編寫手機代碼 4.1 游戲進入前的選擇 每個midlet程序都必須有一個主類,該類必須繼承自midlet。它控制著整個程序的運行,并且可以通過相應函數從程序描述文件中獲取相關的信息。該類中擁有可以管理程序的創建、開始、暫停(手機中很可能有正在運行程序卻突然來電的情況,這時應進入暫停狀態。)、結束的函數。 本設計程序進入時,首先載入畫面的不是游戲運行狀態,而是提供選項,當選擇 開始 時正式運行。因此,在 mainscreen的構造函數中分配了list類,即選項畫面的內存空間。在startapp()函數中,隨即調用了displable的se
40、tcurrent()函數將當前屏幕設置為navigator.main_screen。在 版權聲明 界面前,建造了一個alert類。alert對象用于顯示提示、警告,還有版權信息等告之用戶信息的臨時閃現的屏幕,它可作為setcurrent的參數,提前顯示在最終需要顯示的屏幕前。當程序轉到 gamescreen 時,畫面將永久顯示游戲本身,直到用戶點擊相應按鈕手動結束。但是當顯示的畫面元素超過一屏大小時,將自動轉換為永久狀態。 4.2 主游戲邏輯及其涉及到的若干類 4.2.1 程序的菜單選項 這個寫在 mainscreen.java 文件中,這個類繼承 list 。同時也繼承了接口commandl
41、istener,這樣,就可以使用高級界面的command按鈕。繼承了commandlistener的類必須擁有commandaction(),以決定對按鍵采取什么樣的行為。即按鈕事件觸發后需執行的函數。在設置好commandlistener后,需要調用setcommandlistener()以將按鈕事件激活。用append 方法來加入菜單: append(開始,null); append(設定,null); append(版權聲明,null); append(離開,null); setcommandlistener(this); 再用 getstring(int) 函數來獲得菜單的選項。 ma
42、inscreen.java 文件: import javax.microedition.lcdui.*; public class mainscreen extends list implements commandlistener private static displayable instance; synchronized public static displayable getinstance() if(instance = null) instance = new mainscreen(); return instance; private mainscreen() super(
43、進入game,implicit); / 菜單選擇 append(開始,null); append(設定,null); append(版權聲明,null); append(離開,null); / 事件偵聽 setcommandlistener(this); public void commandaction(command c,displayable s) / 事件偵聽 string cmd= getstring(getselectedindex(); / 把得到的值傳給程序控制器,用程序控制器來決定指引程序的執行。 navigator.flow(cmd); 4.2.2 游戲的設定 這個寫在 s
44、etscreen.java 文件中,而這個類繼承 form 類,同時也繼承了接口commandlistener,這樣,就可以使用高級界面的textfield按鈕。繼承了commandlistener的類必須擁有commandaction(),以決定對 textfield 值獲取采等行為。在設置好commandlistener后,需要調用setcommandlistener()函數來把值傳入程序中。 setscreen.java 文件: import javax.microedition.lcdui.*; public class setscreen extends form /繼承 comma
45、ndlistener 接口 implements commandlistener private static displayable instance; synchronized public static displayable getinstance() if(instance = null) instance = new setscreen(); return instance; / 定義 textfield (文本輸入框) textfield url; gauge volume; private setscreen() super(設定); url = new textfield(請
46、輸入服務器位置,socket:/:99,40,textfield.url); append(url); volume = new gauge(音量,true,10,3); / 軟鍵菜單 addcommand(new command(輔助說明,command.help,1); addcommand(new command(返回,command.back,1); / 事件偵聽 setcommandlistener(this); public void commandaction(command c,displayable s) navigator.flow(c.getlabel(
47、); 4.2.3 游戲中的幫助和程序控制器 首先調用 helpscreen 類,然后賦一個值輔助說明給 navigator 類,當navigator接收到這個值時,就顯示幫助字符串。 helpscreen.java import javax.microedition.lcdui.*; public class helpscreen extends form implements commandlistener public helpscreen(string c) super(輔助說明); append; addcommand(new command(返回,command.back,1); s
48、etcommandlistener(this); public void commandaction(command c,displayable s) navigator.flow(c.getlabel(); 這個寫在navigator.java 里,它接收 setscreen.,mainscreen等類傳過來的值。然后根據它觸發的按鈕事件,來調用相對應的事件。 /navigator.java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import java.util.*; public cla
49、ss navigator final public static int main_screen = 1; final public static int game_screen = 2; final public static int set_screen = 3; final public static int game_help_screen = 4; final public static int set_help_screen = 5; public static midlet midlet; public static display display; public static
50、int current; / 自定義一個類 / 重載函數 public static void show(object obj) switch(current) case main_screen: display.setcurrent(mainscreen.getinstance(); break; case game_screen: display.setcurrent(gamescreen.getinstance(); break; case set_screen: display.setcurrent(setscreen.getinstance(); break; case game_h
51、elp_screen: display.setcurrent(new helpscreen(string)obj); break; case set_help_screen: display.setcurrent(new helpscreen(string)obj); break; public static void flow(string cmd) switch(current) case main_screen : if(cmd.equals(開始) current = game_screen ; show(null); else if(cmd.equals(設定) current =
52、set_screen; show(null); else if(cmd.equals(版權聲明) display.setcurrent(copyscreen.getinstance(); else if(cmd.equals(離開) midlet.notifydestroyed(); break; case game_screen : if(cmd.equals(輔助說明) current = game_help_screen; show(游戲的操作方式:向右鍵要牌,向左鍵放棄!順子并同花最大,其次四張相同的牌,順子,再次三張相同的牌和兩個到順子,再次到同花.); else if(cmd.eq
53、uals(返回) current = main_screen; show(null); break; case set_screen : if(cmd.equals(輔助說明) current = set_help_screen; show(設定方式); else if(cmd.equals(返回) current = main_screen; show(null); break; case game_help_screen : if(cmd.equals(返回) current = main_screen; show(null); break; case set_help_screen: if(cmd.equals(返回) current = set_screen; show(null); break; 4.2.4 游戲版權聲明 / copyscreen.java import javax.microedition
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于情境教學的初中化學課堂教學效果評價研究論文
- 小學語文實驗:磁鐵磁力衰減故事創作的語文實驗探究與反思方法與技巧論文
- 基于綠色物流的電商包裝廢棄物回收體系優化論文
- 小學語文革命題材課文教學中的問題意識與解決策略研究論文
- 中國醫藥中間體市場供需格局及投資風險分析報告2025年
- 節假日公司管理制度
- 苗木進出庫管理制度
- 茶藝師外派管理制度
- 溶液-2021中考化學一模分類匯編(上海專用)
- 財務管理職位操作指南
- 行政職業能力測驗公務員考試行測試卷及答案指導(2025年)
- 夏令營安全管理工作制度
- 2024年黑龍江、吉林、遼寧高考生物試卷(含答案解析)
- 5【選必下】高中語文部編版教材選必下冊課內文言文精練
- 中醫疾病癥狀評分總表(終極版)
- 實驗室安全教育課件
- 透析病人不安腿綜合征
- 市政病媒生物防制基礎知識練習題及答案(200題)
- 2024年國資委研究中心事業單位招聘5人歷年(高頻重點復習提升訓練)共500題附帶答案詳解
- 2024江蘇省揚州市高一下學期期末考生物試題及答案
- 2024年個人勞務承包合同書
評論
0/150
提交評論