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