劉曉崢
(長江工程職業(yè)技術(shù)學(xué)院,湖北武漢430212)
淺析基于J 2 M E平臺(tái)的貪吃蛇游戲開發(fā)
劉曉崢
(長江工程職業(yè)技術(shù)學(xué)院,湖北武漢430212)
本文介紹了J2ME及其體系結(jié)構(gòu)的基礎(chǔ)上,以貪吃蛇游戲?yàn)閷?shí)例,描述了借助J2ME的MIDlet類庫開發(fā)手機(jī)游戲的全過程。
J2ME;MIDlet;手機(jī)游戲
Java自從20世紀(jì)90年代早期誕生以來,以其強(qiáng)大的功能迅速為廣大程序員們所接受。J2ME是由SUN公司于1999年在 JavaOne Developer Conference大會(huì)上正式推出,是為機(jī)頂盒、移動(dòng)電話和PDA之類嵌入式消費(fèi)電子設(shè)備提供的Java語言平臺(tái),包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的Java API。它和Java SE、Java EE一起構(gòu)成了Java技術(shù)的三大版本。它將Java語言的與平臺(tái)無關(guān)的特性移植到小型電子設(shè)備上,允許移動(dòng)無線設(shè)備之間共享應(yīng)用程序。開發(fā)Java ME程序一般不需要特別的開發(fā)工具,開發(fā)者只需要裝上Java SDK及下載免費(fèi)的Sun Java Wireless Toolkit 2.xx系列開發(fā)包,就可以開始編寫Java ME程式,編譯及測試,此外目前主要的IDE(Eclipse及NetBeans)都支持Java ME的開發(fā)。
近年來的計(jì)算機(jī)技術(shù)一方面向著巨型化、智能化發(fā)展,另一方面同時(shí)向著微型化、便攜化等方向發(fā)展。如今,隨著人們對于嵌入式技術(shù)的深入研究,使得手機(jī)的功能不再僅限于通信,誕生了智能手機(jī)。所謂的智能手機(jī)(Smartphone),是指像個(gè)人電腦一樣,具有獨(dú)立的操作系統(tǒng),可以由用戶自行安裝軟件、游戲等第三方服務(wù)商提供的程序,并可以通過移動(dòng)通訊網(wǎng)絡(luò)來實(shí)現(xiàn)無線網(wǎng)絡(luò)接入的這樣一類手機(jī)的總稱。
智能手機(jī)操作系統(tǒng)包括早年的以多普達(dá)、HTC(宏達(dá))為代表的Windows Mobile操作系統(tǒng)、以諾基亞為代表的Symbian操作系統(tǒng),還有目前最流行,市場占有份額最大的Google公司開發(fā)的基于Linux的Android操作系統(tǒng),另外蘋果公司開發(fā)的基于類Unix的ios操作系統(tǒng)也后來居上,占有全球市場很大份額。不同操作系統(tǒng)的手機(jī)之間的應(yīng)用軟件互不兼容,而相同系統(tǒng)的手機(jī)軟件基本通用,使用起來相當(dāng)?shù)谋憷R驗(yàn)榭梢园惭b第三方軟件,所以智能手機(jī)有豐富的擴(kuò)展功能。但是,J2ME的實(shí)現(xiàn)并不要求手機(jī)一定要安裝操作系統(tǒng),它只要手機(jī)芯片支持java就可以運(yùn)行,而目前絕大部分手機(jī)都內(nèi)置Java虛擬機(jī),所以J2ME技術(shù)以其移植性強(qiáng),技術(shù)入門快的優(yōu)勢仍然在業(yè)內(nèi)流行。
手機(jī)游戲發(fā)展到如今已超過十年。大致總結(jié),手機(jī)游戲可分為文字類游戲與圖形類游戲。早期的電子寵物、短信游戲和WAP游戲,都屬于文字類游戲,娛樂性較差。隨著手機(jī)硬件和軟件技術(shù)的不斷發(fā)展,手機(jī)游戲開發(fā)也得到了快速的發(fā)展和商業(yè)應(yīng)用,現(xiàn)在的手機(jī)游戲采用了更為直觀且更為精美的畫面直接表現(xiàn),已發(fā)展到了可以和掌上游戲機(jī)媲美的程度,具有很強(qiáng)的娛樂性和交互性的復(fù)雜形態(tài)了,因此廣受玩家們的歡迎。從早期的嵌入式游戲、短信游戲、WAP游戲、Java游戲再到網(wǎng)絡(luò)游戲,手機(jī)游戲產(chǎn)業(yè)已經(jīng)形成多元化發(fā)展,以畫面精美為特點(diǎn)的小游戲、網(wǎng)絡(luò)游戲?yàn)橹鞯拇笮吐?lián)網(wǎng)游戲、多人聯(lián)網(wǎng)游戲,以及跨平臺(tái)聯(lián)網(wǎng)游戲都是未來的發(fā)展方向。隨著中國3G用戶滲透率的提升和無線網(wǎng)絡(luò)覆蓋范圍的延伸,未來通過3G和WIFI接入網(wǎng)絡(luò)玩手機(jī)游戲的用戶將可以玩更多大型的網(wǎng)絡(luò)游戲。如今的手機(jī),已不僅僅只是一部手機(jī),它更是一部微電腦或者游戲機(jī),而手機(jī)的發(fā)展史,同時(shí)也是手機(jī)游戲的一部發(fā)展史。而本文介紹的貪吃蛇游戲,是諾基亞早期的一款代表性嵌入式游戲,直接嵌入手機(jī)芯片,可以運(yùn)行但不能修改。以當(dāng)今的眼光看,它的畫面不夠精美,娛樂性不是很強(qiáng)。但在手機(jī)游戲出現(xiàn)的早期,它是一款相當(dāng)經(jīng)典的游戲。
本文中游戲開發(fā)背景如下:操作系統(tǒng):Microsoft Windows XP;程序語言:Java 2;開發(fā)包:Sun Java(TM)Wireless Toolkit 2.5.2 for CLDC;IDE:Eclipse 3.2。
3.1.1 WTK
WTK的全稱是Sun J2ME Wireless Toolkit,是Sun的無線開發(fā)工具包。這一工具包的設(shè)計(jì)目的是為了幫助開發(fā)人員簡化j2me的開發(fā)過程。使用其中的工具可以開發(fā)與 Java Technology for the Wireless Industry(JTWI,JSR 185)規(guī)范兼容的設(shè)備上運(yùn)行的j2me應(yīng)用程序。該工具箱包含了完整的生成工具、實(shí)用程序以及設(shè)備仿真器。目前最新版本是2.5版。
3.1.2 MIDP
MIDP全稱是Mobile Information Device Profile,意即移動(dòng)信息設(shè)備配置文件。建立在CLDC的基礎(chǔ)之上,用來描述手機(jī)和尋呼機(jī)這樣更加具體化的無線移動(dòng)設(shè)備。對于 Java ME平臺(tái),MIDP定義了一個(gè)標(biāo)準(zhǔn)的Java API集合,此集合與聯(lián)網(wǎng)的受限設(shè)備配置 CLDC一起提供了一個(gè)面向移動(dòng)信息設(shè)備(如移動(dòng)電話、雙向?qū)ず魴C(jī)和無線個(gè)人電腦記事本)的完整Java ME應(yīng)用程序運(yùn)行環(huán)境。
有了現(xiàn)代漢語中這種框架構(gòu)式的存在,為網(wǎng)絡(luò)用語“我了(嘞)個(gè)去”等提供了產(chǎn)生和生長的溫床?!跋丛琛薄袄戆l(fā)”是一個(gè)離合詞,他的拆分和重新整合是廣為人接受的,而“我了(嘞)個(gè)去”是不合實(shí)際的,這就導(dǎo)致了本來熟悉的詞法和語素變得陌生。這種沒有語法基礎(chǔ)和邏輯基礎(chǔ)的套用在網(wǎng)絡(luò)這個(gè)平臺(tái)上,以其受眾追求新奇的心態(tài)下使得其臨時(shí)成立。
3.1.3 ECLIPSE
Eclipse是一個(gè)開放源代碼的軟件開發(fā)項(xiàng)目。它主要由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,具體包括四個(gè)部分組成——Eclipse Platform、JDT、CDT和PDE.JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),Eclipse Platform則是一個(gè)開放的可擴(kuò)展IDE,提供了一個(gè)通用的開發(fā)平臺(tái)。它提供建造塊和構(gòu)造并運(yùn)行集成軟件開發(fā)工具的基礎(chǔ)。
3.2.1 游戲規(guī)則簡介
在貪吃蛇游戲中,玩家操作由小方塊連接而成的蛇,去吃隨機(jī)散落在畫面內(nèi)的小方塊,每吃一塊就增加一小方塊長度,要是撞壁以及撞自己的尾,就屬于失敗,如無失敗則直到通關(guān)為止。屏幕的長度的行向?yàn)?1單位,縱向?yàn)?8單位。在這個(gè)范圍內(nèi),玩家通過操作方向鍵來控制蛇的運(yùn)動(dòng)方向。該游戲的最大特色是屏幕自適應(yīng),無論各種手機(jī)的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。
圖1 程序流程圖
本游戲的操作流程:用戶在啟動(dòng)MIDlet后,即進(jìn)入游戲主畫面,屏幕開始顯示為歡迎畫面。用戶按下[啟動(dòng)]按鈕后,就可以開始玩游戲。當(dāng)用戶想暫停時(shí),再次按一下[啟動(dòng)]按鈕開始,游戲就暫停了,在暫停的情況下再按[開始]按鈕,游戲繼續(xù)運(yùn)行。任何時(shí)候按[EXIT]按鈕退出,游戲MIDlet都會(huì)終止。
圖2 游戲運(yùn)行畫面
1)地圖模塊
采用二維繪圖工具:二維繪圖工具drawLine采用4個(gè)參數(shù)——直線起點(diǎn)的x、y坐標(biāo)值和直線終點(diǎn)x、y的坐標(biāo)值
2)操作控制模塊
MIDP的游戲設(shè)計(jì),本質(zhì)上就是用一個(gè)線程或者定時(shí)器產(chǎn)生重繪事件,用線程和用戶輸入改變游戲狀態(tài)。這個(gè)游戲也不例外,啟動(dòng)MIDlet后,就立即生成一個(gè)重繪線程,該線程每隔50ms繪制一次屏幕。當(dāng)然,重繪時(shí)有一些優(yōu)化措施,并不是屏幕上所有的像素都需要重繪,而是有所選擇,比如游戲畫布上那些已經(jīng)固定下來的就不需重繪。游戲畫布是一個(gè)CommandListener,可以接受用戶鍵盤命令,控制蛇的左移,右移,下移,上移。整個(gè)游戲的流程控制體現(xiàn)在游戲畫布對象的paint()方法里。paint()根據(jù)當(dāng)前的游戲狀態(tài),繪制出當(dāng)時(shí)的游戲畫面。歡迎畫面和Game Over畫面的繪制相當(dāng)簡單,游戲暫停畫面的繪制也相當(dāng)容易,就是設(shè)立標(biāo)志,讓paint()執(zhí)行的時(shí)候無需真正執(zhí)行重繪動(dòng)作。
3)開始畫面與字體模塊
開始畫面仍然生成繪制畫布線程,利用paint()方法設(shè)置開始畫面的各項(xiàng)屬性,字體方面采用setColor方法分別繪制字體的邊框與內(nèi)部顏色。當(dāng)線程啟動(dòng)時(shí),即生成開始畫面。
4)分?jǐn)?shù)記錄模塊
在此模塊中建立目標(biāo)類實(shí)例,先借助字節(jié)輸出流類統(tǒng)計(jì)游戲運(yùn)行過程中的存儲(chǔ)字段,即蛇吃的點(diǎn)數(shù)。再將存儲(chǔ)記錄的字節(jié)數(shù)字一次性傳入目標(biāo)類實(shí)例中。關(guān)鍵代碼如下:
byte[]byteInputData=new byte[100];
inputStream=newByteArrayInputStream(byteInputData);
inputDataStream=newDataInputStream(inputStream);
再如前所示,將成績用paint()方法繪制入結(jié)束畫面的畫布。
本文所介紹的貪吃蛇游戲,實(shí)現(xiàn)了手機(jī)游戲的一些基本和必需的功能。如游戲的界面設(shè)置,游戲動(dòng)畫的設(shè)置,玩家的控制鍵設(shè)置,游戲的保存和游戲紀(jì)錄的保存,游戲的開始和暫停等功能。隨著目前各大手機(jī)廠商的大力研發(fā),智能手機(jī)的發(fā)展一日千里,手機(jī)芯片功能的更新也日新月異,本文的貪吃蛇游戲相形之下已然落后,但是,作為初學(xué)者,仍然要從基礎(chǔ)做起,腳踏實(shí)地才能有所成就。
[1]陳立偉,張克非,黎秀紅.精通JAVA手機(jī)游戲與應(yīng)用程序設(shè)計(jì)[M].中國青年出版社,2005,5.
[2]孫衛(wèi)琴.精通Struts:基于MVC的Java Web設(shè)計(jì)與開發(fā)[M].北京:電子工業(yè)出版社,2004,08.
[3]張孝祥.Java就業(yè)培訓(xùn)教程[M].北京:清華大學(xué)出版社,2003.
[4]王國輝,李立文,楊亮.JSP數(shù)據(jù)庫系統(tǒng)開發(fā)完全手冊[S].
This article describes the J2ME based on its architecture to Snake game as an example,describes a class library using the J2ME MIDlet whole process of the development of mobile games.
J2ME;MIDlet;Mobile games
劉曉崢(1984—),女,陜西漢中人,碩士,講師,主要從事計(jì)算機(jī)軟件教學(xué)和科研。
楊揚(yáng)]