摘 要:隨著無線網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,手機及其他無線設(shè)備的普及將成為一種趨勢。由于的手機的攜帶方便,手機游戲又具有娛樂的功能,和J2ME技術(shù)的跨平臺特性,使得越來越多的國內(nèi)外廠商開始開發(fā)基于J2ME平臺的無線應(yīng)用服務(wù)。文章著眼于J2ME技術(shù)在手機游戲開發(fā)上的應(yīng)用,在結(jié)合實際的開發(fā)經(jīng)驗與一些MIDP2.0新技術(shù)的基礎(chǔ)上,講述一款自主研發(fā)的基于MIDP2.0的坦克大戰(zhàn)手機游戲設(shè)計。
關(guān)鍵詞:J2ME 手機游戲 MIDP2.0 無線設(shè)備
中圖分類號:F062.5文獻(xiàn)標(biāo)識碼:A
文章編號:1004-4914(2010)06-052-03
一、引言
隨著人們生活水平的不斷提高,手機用戶的數(shù)量也在不斷上升,而且手機的功能越來越豐富,也促進(jìn)了手機游戲產(chǎn)業(yè)的不斷發(fā)展。在市場上,手機游戲的內(nèi)容大多相近,但其中也不泛有經(jīng)典之作,它們的盈利方式主要是涉及面廣,盡管手機游戲的費用不高,但是巨大的使用量將使得這個市場商機很大。種種的數(shù)據(jù)調(diào)查顯示前中國手機游戲市場一片繁榮,然而手機游戲大多來自國外,這對國內(nèi)的手機游戲開發(fā)并非長遠(yuǎn)之計。
隨著無線應(yīng)用與嵌入式系統(tǒng)的愈來愈受到人們的重視,SUN公司推出了J2ME(Java 2 Platform, Micro Edition)來迎合這一趨勢,它把Java平臺的以網(wǎng)絡(luò)為中心和平臺不可知論的特性移植到有限存儲器和有限處理器的設(shè)備中,這些設(shè)備具有16位或32位處理器和總量不少于大約128K的存儲器;而MIDP2.0的新特性對手機游戲的開發(fā)提供了許多新的支持技術(shù),使得J2ME手機游戲開發(fā)的難度大大下降,簡化了設(shè)計的流程,也很大程度的促進(jìn)了J2ME應(yīng)用于手機游戲的發(fā)展。
由于Java語言相當(dāng)?shù)钠占埃瑢τ谟蠮ava語言基礎(chǔ)的人來說,J2ME技術(shù)的門檻較低,開發(fā)速度較快。J2ME技術(shù)擁有強大的移植性,可以經(jīng)過簡單的修改后,在不同廠商的手機上運行,現(xiàn)在在市場上的主要廠商有諾基亞、摩托羅拉、索愛等,它們之間在市場上進(jìn)行著激烈的競爭,進(jìn)而也促進(jìn)了J2ME技術(shù)的快速發(fā)展。本文的寫作目的就是通過使用J2ME游戲開發(fā)技術(shù)來開發(fā)一個基于Nokia S60的手機游戲,從而展現(xiàn)J2ME技術(shù)在手機游戲開發(fā)方面的優(yōu)勢。
二、J2ME體系結(jié)構(gòu)和MIDP2.0新技術(shù)
(一)J2ME體系結(jié)構(gòu)
Java自1995年發(fā)明以來以發(fā)生了很大的變化,從最早的為基于瀏覽器中運行的Applet的編程,到Servlet/EJB的Server編程,再到現(xiàn)在的MIDlet為無線信息設(shè)備的編程。它已發(fā)展成為為開發(fā)者提供一端到端編程開發(fā)的平臺,即我們常說的J2SE/J2EE/J2ME,Java的三個平臺(fig1)。由于無線編程有其完全不同于傳統(tǒng)編程的特殊性,比如:運行設(shè)備的多樣性,設(shè)備處理能力不如服務(wù)器和微機,用戶界面的差異性等。另外在加上無線技術(shù)的飛速發(fā)展,使得J2ME的體系架構(gòu)有者完全不同于J2SE/J2EE的特點。
由于嵌入式設(shè)備的種類太多樣,沒有統(tǒng)一的規(guī)范,于是J2ME定義了一種靈活的層次規(guī)范結(jié)構(gòu)來規(guī)范眾多的移動設(shè)備,不同層次的規(guī)范相互協(xié)作來提供一個完整的移動Java平臺。J2ME依照各種設(shè)備的資源特性,將J2ME技術(shù)架構(gòu)分為簡表(Profile),配置(Configuration)和Java虛擬機(Java Virtual Machine)三層,如圖1所示:
1.簡表層:簡表層定義了在特定的設(shè)備上可用的應(yīng)用程序編程接口(API)的最小集。它在一個特定的配置上面實現(xiàn),應(yīng)用程序是針對特定的簡表編寫的,因此可以移植到支持該簡表的任何設(shè)備上。SUN公司推出兩種可用的參考J2ME簡表:基礎(chǔ)簡表與MIDP?;A(chǔ)簡表主要用于CDC配置。MIDP連同功能較低的CLDC配置一起為開發(fā)移動設(shè)備應(yīng)用程序提供了完整的Java平臺。
2.配置層:面對的是大量各種不同的小型嵌入式設(shè)備,J2ME將這些設(shè)備進(jìn)行分類,將一些共性提取出來形成適合于某范疇中設(shè)備可用的規(guī)范,稱為“配置”。配置規(guī)范定義了硬件所必須具備的能力。目前J2ME可用的配置有兩種:CDC(Connected Device Configuration,連接設(shè)備配置)和CLDC(Connected Limited Device Configuration,連接有限設(shè)備配置)。CDC應(yīng)用于相對內(nèi)存量較大,更強處理器的移動設(shè)備。CLDC主要針對些資源有限的嵌入式設(shè)備。
3.Java虛擬機層:這一層是針對設(shè)備本地操作系統(tǒng)定制的Java虛擬機的實現(xiàn),支持特定的J2ME配置,就像使用所有Java技術(shù)一樣,其核心也在一種虛擬機中。
(二)MIDP2.0新技術(shù)
在MIDP1.0中這些功能包括:應(yīng)用的下載、應(yīng)用的生命周期、端到端的傳輸(http)、網(wǎng)絡(luò)聯(lián)結(jié)、數(shù)據(jù)庫存儲、計時器和用戶界面;通過用戶對MIDPv1.0的使用經(jīng)驗和反饋,MIDP2.0的專家組在MIDP1.0APIs的基礎(chǔ)上又新加了下面的APIs:
1.應(yīng)用的下載和計費。
2.端到端的安全傳輸(https)。
3.應(yīng)用的數(shù)字簽名和域的安全模式。
4.MIDlet的push注冊(server push model)。
5.聲音。
(三)MIDP2.0的安全機制
Java語言作為以種網(wǎng)絡(luò)編程語言,它具有很多特點來滿足網(wǎng)絡(luò)編程的需求,其中最為人們所津津樂道的是它的遍寫一次到處運行,以及它的安全性。特別是它的安全性,從它的發(fā)明到現(xiàn)在的7年的時間已經(jīng)為無數(shù)的事實所證明。Java語言的安全性,安全機制也有它發(fā)展的過程,下面我們簡單介紹以下Java的安全機制。
1.Java1.0的沙箱機制:
圖2 Java1.0安全的沙箱機制
2.Java1.1的可信任代碼的安全機制:
圖3 可信任代碼的安全機制
3.Java1.2/2的域安全機制:
圖4 Java1.2/2的域安全機制
三、坦克大戰(zhàn)手機游戲的設(shè)計流程和設(shè)計思路
(一)坦克大戰(zhàn)手機游戲的設(shè)計流程
1.游戲開發(fā)的流程。手機游戲開發(fā)不同于一般應(yīng)用程序開發(fā),它受到手機本身的限制,開發(fā)人員使用現(xiàn)有的技術(shù)去實現(xiàn),采用合理的開發(fā)流程非常重要,下面來介紹下手機游戲的簡要開發(fā)流程。
(1)提出方案:創(chuàng)意的產(chǎn)生。
(2)可行性分析:市場商業(yè)評估與開發(fā)難度評估。
(3)概要設(shè)計:策劃具體的游戲方案。
(4)詳細(xì)設(shè)計:包括框架設(shè)計、圖像設(shè)計、具體設(shè)計、代碼實現(xiàn)、初步測試等。
(5)品質(zhì)管理:跟蹤質(zhì)量評估,發(fā)布最終穩(wěn)定版產(chǎn)品。
2.游戲開發(fā)的詳細(xì)設(shè)計流程。在設(shè)計過程中,程序采用面向?qū)ο蟮脑O(shè)計方法,對游戲中的所有物體賦于對象的屬性。游戲的主要任務(wù)是在DemoCanvas類里實現(xiàn)的,該類聯(lián)系著與其他類的響應(yīng)。游戲運行后,首先在DemoCanvas類里初始化并啟動一個線程,由線程實時響應(yīng)按鍵狀態(tài),對屏幕進(jìn)行重繪并產(chǎn)生一個菜單選項,允許用戶進(jìn)行菜單選擇,根據(jù)不同的選擇可以產(chǎn)生不同的結(jié)果,選擇開始游戲后,游戲啟動接著載入玩家坦克圖片,敵方坦克圖片,爆炸圖片以及各種背景物體圖片,從外部文本文件載入地圖,然后產(chǎn)生玩家坦克與敵方坦克,最后對背景的所有物體進(jìn)行繪圖。在主程序運行的線程中將以一定的頻率對屏幕背景進(jìn)行重繪,實時反映整個游戲的進(jìn)行狀態(tài)。玩家控制坦克在主線程中運行,隨屏幕刷新的頻率而前進(jìn)。敵方坦克則由計算機控制,在游戲開始時逐漸增加線程,每增加一個敵方坦克就增加一個新線程,但屏幕上最多有兩輛敵方坦克,每輛敵方坦克是一個線程,一旦敵方坦克線程數(shù)滿達(dá)到最大值,就不允許敵人坦克再繼續(xù)出現(xiàn)在屏幕上。每輛坦克自產(chǎn)生之時起就只將擁有一發(fā)子彈,而且每發(fā)子彈均是一個線程,發(fā)生碰撞后并不結(jié)束子彈對象,只是將其線程終止。主程序在運行的過程中,將實時的監(jiān)測若干事件,如:玩家坦克是否被敵方坦克消滅,敵方坦克是否被消滅,且其剩余數(shù)量是否已經(jīng)為零,玩家是否在游戲中獲勝,各對象之間是否發(fā)生了碰撞等,并對屏幕進(jìn)行實時重繪,由程序進(jìn)入相關(guān)的分支執(zhí)行相應(yīng)的響應(yīng)代碼,是否結(jié)束游戲等。以便程序進(jìn)入相關(guān)的分支執(zhí)行相關(guān)的代碼處理,結(jié)束游戲等。主程序流程如圖5所示。
(二)坦克大戰(zhàn)手機游戲的設(shè)計思路
1.坦克控制的設(shè)計思路。在游戲中坦克分玩家坦克與敵方坦克,對坦克的邏輯設(shè)計讀者可以先參閱圖6,對玩家坦克的設(shè)計引入了GameCanvas類,GameCanvas類提供getKeyStates方法獲取當(dāng)前鍵盤上按鍵的信息。getKeyStates方法將以bit的形式返回鍵盤上按下鍵與釋放鍵的狀態(tài),當(dāng)鍵盤按下鍵時返回bit為1,當(dāng)鍵盤釋放鍵時返回bit為0。這里只需要getKeyStates方法的一個返回值就可以返回所有鍵的狀態(tài)。同時,getKeyStates方法的這個機制也可以檢測同時按下幾個鍵的狀態(tài),并能保證快速的按鍵和釋放也會被響應(yīng)。
2.子彈智能運行的設(shè)計思路。子彈的行為是雙方坦克的共同行為,每一輛坦克都有它自己的一個子彈,這個子彈在坦克被產(chǎn)生時就一直存在,在坦克未發(fā)射子彈前,其圖像被設(shè)置為不可見,只有當(dāng)坦克發(fā)射了子彈時,子彈的圖像才被設(shè)置為可見,并且該子彈只有直至和障礙物發(fā)生碰撞或坦克被消滅時才消失,子彈的再次出現(xiàn)只是在屏幕上重新置于坦克的炮口,并使其顯示出來,向坦克前進(jìn)的方向前進(jìn),對于子彈的邏輯設(shè)計讀者可參閱圖7。
四、結(jié)束語
J2ME是一種適合于手機游戲開發(fā)的技術(shù),它具有較強的移植性、入門技術(shù)門檻低和開發(fā)速度快等優(yōu)勢,而MIDP2.0規(guī)范提供的新特性增強了對手機游戲開發(fā)的支持,降低開發(fā)人員的開發(fā)難度,促進(jìn)了J2ME應(yīng)用于手機游戲的發(fā)展。本文是針對Nokia S60平臺開發(fā)一個完整的坦克大戰(zhàn)手機游戲,游戲的開發(fā)使用了許多復(fù)雜的技術(shù),實現(xiàn)了傳統(tǒng)游戲的大部分功能,發(fā)揮了J2ME技術(shù)在手機游戲開發(fā)上的優(yōu)勢。
參考文獻(xiàn):
1.http://java.sun.com/j2me
2.http://java.sun.com/Products/j2mewtoolkit/index.html
3.JSR-000139 Connected Limited Device Configuration 1.1
4.(美)Bruce Eckel.京京工作室譯.Java.編程思想.北京:機械工業(yè)出版社,1999
5.(美)Chuck Cavaness,Geoff Friesen,Brian Keeton.師夷工作室譯.Java完全探索(第二版).北京:中國青年出版社,2001
6.黃聰明.JAVA移動通信程序設(shè)計J2MEMIDP.北京:清華大學(xué)出版社,2002
7.洪維恩.Java2面向?qū)ο蟪绦蛟O(shè)計.北京:中國鐵道出版社,2002
8.盧軍.J2ME應(yīng)用程序開發(fā)手機、PDA程序開發(fā)捷徑.北京:中國鐵道出版社,2002
9.孫希,俞建新.Java虛擬機新技術(shù)探討.計算機應(yīng)用,2002(8)
(作者簡介:王卉玲,中山中專教師,碩士研究生;勞漢生,中山火炬職業(yè)技術(shù)學(xué)院教授、博士生導(dǎo)師 廣東中山 528400)
(責(zé)編:賈偉)