摘要:手機游戲開發基于J2ME技術,以五子棋游戲為開發實例并加以實現;基于Java特性使該系統具有較高的可移植性,可在主流手機平臺中正常運行,減少移植成本。
關鍵詞:手機游戲;J2ME;MIDP
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)33-9262-02
Development of GoBang Mobile Games System Based on J2ME
LIU Xin-e
(Nanjing College of Information Technology, Nanjing 210046, China)
Abstract: Development of mobile game system based on J2ME, and takes the chess game as the development example to implement; This system based on the Java characteristic is high portable,it can implement on the mainstream mobile platform,and reduce the cost of migration.
Key words: mobile games; java 2 Micro Edition(J2ME); mobile information device profile
1 概述
Sun認為,各種設備的功能相差很大,同時設備的硬件、軟件系統也千差萬別,對應各種不同的設備設計制造出一個單一的開發系統是一件不可能也沒有實際意義的事,一種Java平臺也不能適用于所有的設備。因此,在Java2平臺下,Sun針對消費類和嵌入式設備定義了Java2平臺小型版(J2ME)。J2ME作為Java的一個平臺,充分體現了Sun公司倡導的“一次編寫,處處運行”的理念。它以其不斷發展的技術優勢獲得了手機制造商越來越廣泛的支持。J2ME平臺被認為是當前移動開發領域中最杰出的手機程序開發平臺之一,它已被開發者、設備制造商、網絡通信公司和消費者廣泛接受[1]。
2 J2ME體系架構
2.1 J2ME體系架構概述
為了滿足各種各樣設備和目標市場的需要,J2ME架構定義了Configuration,Profile和可選包作為建立完整Java運行環境的元素。每種Configuration,Profile和可選包的組合都針對了一類設備,這樣就可以在內存、處理器能力,以及I/O能力方面對Java平臺的性能進行優化。不同的設備通過實現不同的Configuration,Profile,以及可選包組合來提供對Java的軟件支持。J2ME只是要求設備提供的最小功能,具體的設備提供商可以在J2ME之外提供其自定制的Java包,實現J2ME未定義的功能。J2ME通過引入Configuration和Profile的概念,為軟件開發者提供了一個通用的開發平臺,如圖1所示。其中Configuration主要定義了核心的Java語言的功能,而Profile則定義了在Java核心功能之上的功能擴展API包。
2.2 Configuration
Configuration通過定義類庫的最小集合和一個虛擬機指定了針對這些設備的J2ME平臺應具有的基本功能,即Configuration定義了Java編程語言的子集、Java虛擬機的功能特性、安全性、網絡特性以及核心平臺庫。目前J2ME規范只有兩種J2ME Configuration,即CLDC(Connected Limited Device Configuration,有限連接設備Configuration)和CDC(Connected Device Configuration,連接設備Configuration)。Configuration并不能單獨使用,必須與Profile組合使用。Configuration只是定義了設備必須具有的功能,并不是對所有的功能都要求實現。
2.3 Profile
Profile定義了應用的生命周期模型、用戶界面以及其他特性。Profile以Configuration為基礎,定義了附加的Java API庫和與特定市場相關的特性,是針對特定行業和設備而設計的。每個Configuration上都定義了一個或多個Profile,其中某些Profile需依賴其他Profile。定義在CLDC Configuration上的Profile目前只有MIDP(Mobile Information Device Profile,移動信息設備Profile)。在CDC上目前有FP(Foundation Profile,基礎Profile)、PP(Personal Profile,個人Profile)、PBP(Personal Basis Profile,個人基礎Profile)。由于Profile為設備定義了額外的功能,因此對設備硬件的要求通常會比Configuration的要求稍高。
3 基于J2ME的手機游戲開發
3.1 J2ME手機游戲概述
J2ME手機游戲通常由MIDlet類、用戶界面類和游戲對象類組成。其中,MIDlet是游戲的基本執行單元,負責游戲生命周期的控制,如游戲的活動、暫停、銷毀等;用戶界面類是游戲的線程類,它不斷的循環檢測收到的各種消息,計算游戲狀態,然后發出重繪事件要求屏幕重繪更新。游戲中所有可見的東西都是對象,它們是游戲中實際運動的實體。游戲對象類定義該類能夠執行的動作。當指定事件發生時,游戲會根據運行邏輯執行相應的動作。
3.2 基于J2ME手機游戲開發實例
本文開發了一個五子棋的游戲,有6個類組成,類的功能描述如下:
1) Class WzqMIDlet
WzqMIDlet類繼承自javax.microedition.midlet.MIDlet類,負責游戲生命周期管理和狀態轉換。MIDlet共有3中狀態:startApp()活動狀態、pauseApp()暫停狀態和destroyApp()銷毀狀態,WzqMIDlet狀態轉移圖如圖2所示。
運行一個程序的時候,虛擬機會調用該MIDlet的構造函數來生成MIDlet對象,然后被虛擬機置于暫停狀態。一旦虛擬機認為這個MIDlet對象可以執行時,就會調用startApp()方法,將此MIDlet置于活動狀態。
2) Class WzqChessBoard
WzqChessBoard類繼承自javax.microedition.lcdui.game.GameCanvas類,負責游戲的視圖,所有的游戲邏輯、用戶動作和圖像繪制都會在這里處理。下面列出此類當中幾個關鍵的成員函數。
繪制棋盤上的網格
protected void paintMap(Graphics g)
{函數實現代碼;}
在當前位置上繪制一個提示框
protected void paintSelectBox(Graphics g)
{函數實現代碼;}
繪制棋子
protected void paintChesses(Graphics g)
{函數實現代碼;}
繪制所有的屏幕內容
protected void paint(Graphics g)
{函數實現代碼;}
GameCanvas類提供了基本的游戲用戶接口。除了從Canvas類繼承下來的命令、輸入事件等特性以外,它還提供了專門針對游戲的功能。GameCanvas擁有雙緩沖機制,從而避免諸如屏幕閃爍、畫面撕裂和抖動等問題。
3) Class Splash
Splash類繼承自javax.microedition.lcdui.game.GameCanvas類,負責繪制背景、繪制圖片、繪制文字等信息。。
4) Class Chesses
自定義Chesses類負責存儲五子棋的數據信息,下面是其定義的成員變量。
public final static int NO_CHESS = 0; //定義常量NO_CHESS,表示當前位置沒有棋子
public final static int BLACK_CHESS = 1; //定義常量BLACK_CHESS,當前位置為黑子
public final static int WHITE_CHESS = -1; //定義常量WHITE_CHESS,當前位置為白子
public final static int BOARD_SIZE = 15; ////定義常量BOARD_SIZE,棋盤的大小
private short[][] chess; //棋子信息數組
private boolean bHumanPlayer; //當前是人還是機器在下棋
private boolean bHumanFirst; // 是人先手還是機器先手
private boolean bGameOver; //游戲是否結束
private short nChessType; // 當前的棋子的類型
private Vector messages = new Vector(); //消息隊列
5) Class AI
自定義Chesses類負責五子棋的人工智能部分,即找到最佳下棋點。基本思路是先計算每個點的權值,在權值最高的位置下棋。
6) Class Point
自定義Point類負責返回棋子的所在位置。
4 結束語
該文首先給出了J2ME的體系架構,對基于J2ME的手機游戲開發也進行了論述,最后給出了一個基于J2ME的手機游戲開發實例--五子棋游戲,其運行效果良好。
參考文獻:
[1] 唐自仰,劉瑾,張克君.基于J2ME/Servlet的手機聊天系統[J].計算機工程,2009,35(10):262-266.
[2] 朱全銀,章慧,孫文杰.基于J2ME技術的手機網絡游戲研究與開發[J].計算機工程與應用,2008,44(32):76-78.
[3] 朱全銀,章慧.基于J2ME和J2EE的移動網絡游戲系統[J].計算機工程,2008,34(16):135-137.
[4] 丁月華,劉佳,楊沛.J2ME手機游戲開發平臺的設計與實現[J].計算機工程,2007,33(5):261-263.
[5] Krikke J.Samurai Romanesque,J2ME and the Battle for Mobile Cyberspace [J].Computer Graphics and Applications,2003,23(1):16.
[6] 王森.Java手機/PDA程序設計入門[M].北京:電子工業出版社,2004.
[7] 孔明放.J2ME程序設計教程[M].北京:科學出版社,2005.