




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目錄緒論41 課題總體介紹41.1 課題背景41.2國內(nèi)外概況41.3研究內(nèi)容52 開發(fā)平臺(tái)與技術(shù)概述52.1開發(fā)環(huán)境52.2WTK、ECLIPSE與JAM的介紹52.3JAVA語言介紹63 J2ME及其體系結(jié)構(gòu)概述73.1 J2ME簡介73.2 J2ME 體系結(jié)構(gòu)73.3 移動(dòng)信息設(shè)備簡表概述73.3.1 MIDP的目標(biāo)硬件環(huán)境7 MIDP應(yīng)用程序8 CLDC和MIDP庫中的類84 手機(jī)游戲開發(fā)過程84.1 貪吃蛇游戲的規(guī)則簡介84.2詳細(xì)設(shè)計(jì)94.3代碼設(shè)計(jì)94.3.1游戲地圖代碼設(shè)計(jì)94.3.2操作控制代碼設(shè)計(jì)194.3.3進(jìn)入游戲畫面極其字體設(shè)計(jì)224.3.4分?jǐn)?shù)記錄255 總結(jié)29致
2、謝29參考文獻(xiàn)30基于J2ME平臺(tái)的貪吃蛇游戲的設(shè)計(jì)與實(shí)現(xiàn)摘 要隨著通信技術(shù)的發(fā)展和手機(jī)的日益普及、Java功能在移動(dòng)設(shè)備上的實(shí)現(xiàn),Java應(yīng)用程序產(chǎn)生的手機(jī)增值服務(wù)逐漸體現(xiàn)出其影響力,對(duì)于豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。J2ME(Java 2 Micro Edition)是近年來隨著各種不同設(shè)備,尤其是移動(dòng)通信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)新的開發(fā)技術(shù),它定位在消費(fèi)性電子產(chǎn)品的應(yīng)用上,對(duì)設(shè)備的智能化、多樣化,提供了革命性的解決方案。以J2ME為開發(fā)平臺(tái),利用Java提供的強(qiáng)大工具,不但可以在手機(jī)上實(shí)現(xiàn)靜態(tài)HTML技術(shù)所無法實(shí)現(xiàn)的計(jì)算處理、數(shù)據(jù)存儲(chǔ)、與服務(wù)器的通信等功能,而且
3、能夠開發(fā)各種手機(jī)游戲。本文在介紹J2ME及其體系結(jié)構(gòu)的基礎(chǔ)上,以貪吃蛇游戲?yàn)閷?shí)例,描述了借助J2ME的MIDlet類庫開發(fā)手機(jī)游戲的全過程?!娟P(guān)鍵詞】:手機(jī)游戲 嵌入式開發(fā) 永久性數(shù)據(jù) MIDP應(yīng)用程序 Design and Implementation of Snake Game Based on J2ME AbstractAlong with the development of mobile communication technology and the increasing popularity of mobile devices, Java function in the real
4、ization, Java applications that make mobile value-added services gradually reflect its influence, to enrich peoples life content, provide quick information plays an important role. J2ME (Java 2 Micro happen) is in recent years, with different equipment, especially the rapid development of mobile com
5、munications equipment and the birth of a new development of technology, it positioned in the consumer electronics applications, the intelligent, diversification of equipment, provides innovative solutions. For development platform, in J2ME using Java provide powerful tools, not only can cellphones r
6、ealize static HTML technology can computing processing, data storage, the servers and communications, and other functions, but also can develop all kinds of mobile games. Based on the introduction of the J2ME and its system structure based on the snake game for example, describes the aid MIDlet clas
7、s library development J2ME the whole process of mobile gaming.【key words】 : Mobile games Embedded development Permanent data MIDP application program緒論Java自從20世紀(jì)90年代早期誕生以來,以其強(qiáng)大的功能迅速為廣大程序員們所接受。J2ME是SUN公司針對(duì)嵌入式、消費(fèi)類電子產(chǎn)品推出的開發(fā)平臺(tái),與J2SE和J2EE共同組成Java技術(shù)的三個(gè)重要的分支。J2ME實(shí)際上是一系列規(guī)范的集合,由JCP組織制定相關(guān)的Java Specification R
8、equest(JSR)并發(fā)布,各個(gè)廠商會(huì)按照規(guī)范在自己的產(chǎn)品上進(jìn)行實(shí)現(xiàn),但是必須要通過TCK測(cè)試,這樣確保兼容性。比如MIDP2.0規(guī)范就是在JSR118中制定的??赡芙佑|過J2ME的開發(fā)者會(huì)覺得說J2ME是一系列的規(guī)范不準(zhǔn)確吧。因?yàn)槲覀冊(cè)陂_發(fā)中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等內(nèi)容。其實(shí)這并不矛盾,因?yàn)檫@些就是在相關(guān)規(guī)范中制定的。1 課題總體介紹1.1 課題背景 隨著近年來科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)技術(shù)已近慢慢的向微型化、便攜化等方向發(fā)展。
9、如今,人們對(duì)于嵌入式的研究的深入,誕生了各種基于多功能操作系統(tǒng)的手機(jī),使得這些手機(jī)上可以安裝各種各樣的軟件,實(shí)現(xiàn)功能和性能上的擴(kuò)展和提高。目前大部分手機(jī)分為智能手機(jī)(SmartPhone)和非智能手機(jī)。智能手機(jī)包括以諾基亞和三星手機(jī)為代表的Symbian S60操作系統(tǒng),以摩托羅拉為代表的Linux操作系統(tǒng),以多普達(dá)、HTC(宏達(dá))為代表的Windows Mobile操作系統(tǒng),還有最近興起的基于Google操作系統(tǒng)Android的新上市的手機(jī)。非智能手機(jī)包括諾基亞的S40平臺(tái)、摩托羅拉早期的P2k平臺(tái)等等。隨著移動(dòng)通信技術(shù)的發(fā)展和無線數(shù)據(jù)業(yè)務(wù)的進(jìn)步以及人們對(duì)移動(dòng)傳播方式的日趨依賴,無線終端在人
10、們?nèi)粘I钪械氖褂靡仓饾u得到普及,手機(jī)已被賦予了除通話以外的其他許多功能。研究發(fā)現(xiàn),在700 名受訪對(duì)象中,60的人會(huì)在家中玩手機(jī)游戲,而且其中 60每天不止玩一次,每天的時(shí)間在 15 到 20 分鐘。而諾基亞做的一項(xiàng)研究發(fā)現(xiàn),玩家玩手機(jī)游戲的時(shí)間平均為 28 分鐘。種種調(diào)查數(shù)據(jù)可以證明全世界手機(jī)游戲市場(chǎng)的繁榮,如今沒有人會(huì)懷疑手機(jī)游戲的美好未來,全新的手機(jī)游戲領(lǐng)域已逐漸聚焦了眾多軟件開發(fā)商的目光。手機(jī)游戲的市場(chǎng)空間進(jìn)一步增大。在日本以及韓國,手機(jī)游戲已經(jīng)貢獻(xiàn)了大筆收;美國以及歐洲市場(chǎng)同樣很樂觀;而在南美洲以及其他國家和地區(qū),市場(chǎng)規(guī)模也在不斷擴(kuò)大。當(dāng)JAVA平臺(tái)發(fā)展到JAVA 2的版本以后,為
11、了適應(yīng)不同級(jí)別計(jì)算機(jī)硬件的開發(fā)需要,JAVA平臺(tái)形成了三個(gè)主要分支:l Java 2, Standard Edition(J2SE):是為臺(tái)式機(jī)而設(shè)計(jì)的,主要運(yùn)行在Linux, Solaris, 或Microsoft Windows等操作系統(tǒng)上。l Java 2, Enterprise Edition (J2EE):則是一個(gè)適合分布式的、多用戶、企業(yè)級(jí)應(yīng)用系統(tǒng)運(yùn)轉(zhuǎn)的平臺(tái)。它以J2SE為基礎(chǔ),增加了處理服務(wù)器端計(jì)算的功能。l Java 2, Micro Edition (J2ME):和J2SE不同,它既不算是一個(gè)軟件也不能算是一則規(guī)范。準(zhǔn)確地說,J2ME是為了支持象PDA、手機(jī)等小型的嵌入式或移
12、動(dòng)設(shè)備而推出的一系列的技術(shù)和規(guī)范的總稱。它借用了J2SE類庫的一部分,使用了更少的API,而且其J2ME采用的JAVA虛擬機(jī)(JVM)比J2SE的JVM也要小得多。 本課題研究的是基于J2ME的手機(jī)貪吃蛇游戲,利用EclipseIDE工具和Sun Java ME SDK 3.0,JAVA語法和J2ME系統(tǒng)的API來實(shí)現(xiàn)。主要研究的對(duì)象是: 1.面向?qū)ο蟮木幊碳记桑?.J2ME的低級(jí)、高級(jí)界面的開發(fā); 4.多線程技術(shù)的應(yīng)用; 5.簡單人工智能的實(shí)現(xiàn)。2 開發(fā)平臺(tái)與技術(shù)概述 操作系統(tǒng):Microsoft Windows XP 程序語言:Java 2 開發(fā)包:Sun Java(TM) Wireles
13、s Toolkit for CLDC WTK、ECLIPSE與JAM的介紹(1) 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è)備仿真器。到本文寫作時(shí)為止可以獲取有四個(gè)版本,分別是, 2.0, 2.1和2.2。每個(gè)版本都包括英語,日語,簡體中文,繁體中文4個(gè)語種包
14、。WTK是Sun提供的一個(gè)開發(fā)工具包。目前各大手機(jī)廠商往往把WTK經(jīng)過自身的簡化與改裝,推出適合自身產(chǎn)品,如SonyEricsson,Nokia Developers suit等,都屬于此種類型;而通過JBuilder, Eclipse等IDE,J2ME開發(fā)包工具可以被綁定在這些集成開發(fā)環(huán)境中,進(jìn)一步提高開發(fā)效率。(2)Eclipse 是一個(gè)開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。Ecl
15、ipse是一個(gè)開放源代碼的軟件開發(fā)項(xiàng)目,專注于為高度集成的工具開發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它主要由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ǔ)。 JAVA語言介紹(1)面向?qū)ο?面向?qū)ο笃鋵?shí)是現(xiàn)實(shí)世界模型的自然延伸?,F(xiàn)實(shí)世界中任何實(shí)體都可以看作是對(duì)象。對(duì)象之間通過消息相
16、互作用。另外,現(xiàn)實(shí)世界中任何實(shí)體都可歸屬于某類事物,任何對(duì)象都是某一類事物的實(shí)例。如果說傳統(tǒng)的過程式編程語言是以過程為中心以算法為驅(qū)動(dòng)的話,面向?qū)ο蟮木幊陶Z言則是以對(duì)象為中心以消息為驅(qū)動(dòng)。用公式表示,過程式編程語言為:程序=算法+數(shù)據(jù);面向?qū)ο缶幊陶Z言為:程序=對(duì)象+消息。(2)平臺(tái)無關(guān)性 Java是平臺(tái)無關(guān)的語言是指用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。平臺(tái)無關(guān)有兩種:源代碼級(jí)和目標(biāo)代碼級(jí)。C和C+具有一定程度的源代碼級(jí)平臺(tái)無關(guān),表明用C或C+寫的應(yīng)用程序不用修改只需重新編譯就可以在不同平臺(tái)上運(yùn)行。(3)分布式 分布式包括數(shù)據(jù)分布和操作分布。數(shù)據(jù)分布是指數(shù)據(jù)可以分散在網(wǎng)
17、絡(luò)的不同主機(jī)上,操作分布是指把一個(gè)計(jì)算分散在不同主機(jī)上處理。(4)可靠性和安全性 Java最初設(shè)計(jì)目的是應(yīng)用于電子類消費(fèi)產(chǎn)品,因此要求較高的可靠性。Java雖然源于C+,但它消除了許多C+不可靠因素,可以防止許多編程錯(cuò)誤。首先,Java是強(qiáng)類型的語言,要求顯式的方法聲明,這保證了編譯器可以發(fā)現(xiàn)方法調(diào)用錯(cuò)誤,保證程序更加可靠;其次,Java不支持指針,這杜絕了內(nèi)存的非法訪問;第三,Java的自動(dòng)單元收集防止了內(nèi)存丟失等動(dòng)態(tài)內(nèi)存分配導(dǎo)致的問題;第四,Java解釋器運(yùn)行時(shí)實(shí)施檢查,可以發(fā)現(xiàn)數(shù)組和字符串訪問的越界,最后,Java提供了異常處理機(jī)制,程序員可以把一組錯(cuò)誤代碼放在一個(gè)地方,這樣可以簡化錯(cuò)誤
18、處理任務(wù)便于恢復(fù)。(5)多線程 線程是操作系統(tǒng)的一種新概念,它又被稱作輕量進(jìn)程,是比傳統(tǒng)進(jìn)程更小的可并發(fā)執(zhí)行的單位。3 J2ME及其體系結(jié)構(gòu)概述3.1 J2ME簡介現(xiàn)在JAVA-JAVA2 Platform大致可分為J2SE、J2EE、J2ME三類。J2SE為JAVA-JAVA2 Platform 的標(biāo)準(zhǔn)版,通常在PC上使用的JAVA。J2EE是在J2SE的API上,擴(kuò)展了給企業(yè)使用EJB與Servlet等主要使用在服務(wù)器上的功能。而J2ME則是面向家電和通信工具等微小設(shè)備。J2ME的目標(biāo)是微小設(shè)備,這類設(shè)備有許多種類,在這些設(shè)備的J2ME當(dāng)中,定義了CDC(Connected Device
19、Configuration),CLDC(Connected Limited Device Configuration)這兩個(gè)Configuration。CDC是以能用在個(gè)人網(wǎng)關(guān)、下一代移動(dòng)電話、PDA(個(gè)人數(shù)字助理)、家電設(shè)備、POS終端、車輛導(dǎo)航系統(tǒng)等上運(yùn)行為前提設(shè)計(jì)出來的。CLDC,是以能使用在移動(dòng)電話、PDA(個(gè)人數(shù)字助理)、家電設(shè)備、POS終端等上面為前提設(shè)計(jì)出來的。3.2 J2ME 體系結(jié)構(gòu)配置和簡表:配置定義了一個(gè)設(shè)計(jì)在一系列類似硬件上運(yùn)行的Java平臺(tái)的能力。J2me的目標(biāo)是家電與嵌入式設(shè)備,這類設(shè)備有很多種類,對(duì)應(yīng)這些設(shè)備的J2me當(dāng)中,定義了CDC(連接設(shè)備配置)和CLDC(
20、受限接設(shè)備配置)兩個(gè)配置,配置所提供的類函數(shù)只有Java.lang, Java.io,Java.util包等J2SE等核心類的子集。CLDC是與手機(jī)相關(guān)的,它實(shí)際是定義一個(gè)設(shè)備制造商用來實(shí)現(xiàn)Java運(yùn)行環(huán)境的標(biāo)準(zhǔn),第三方開發(fā)者只需要遵循這個(gè)標(biāo)準(zhǔn)。CLDC主要影響Java開發(fā)和軟件發(fā)布的以下方面: 1)目標(biāo)設(shè)備的特性;2)安全模型:安全模型有兩個(gè)部分,虛擬機(jī)和應(yīng)用程序安全。虛擬機(jī)安全層的目的是保護(hù)下面的設(shè)備不受任何執(zhí)行代碼可能引起的損害。3.3 移動(dòng)信息設(shè)備簡表概述3 MIDP的目標(biāo)硬件環(huán)境1)顯示 :96*54象素,1位顏色,大約1:1比例;2)輸入: (a)單手鍵盤或者小鍵盤;(b)雙手的Q
21、WERTV鍵盤;(c)觸摸屏。 3)內(nèi)存: (a)128KB非易失性內(nèi)存,供MIDP組件使用;(b)8KB的非易失性內(nèi)存,供應(yīng)用程序生成的永久數(shù)據(jù)使用;(c)32KB的易失性內(nèi)存,供Java堆使用。4)網(wǎng)絡(luò):(a)雙響無線網(wǎng)絡(luò),可間歇性連接;(b)通常是很有限的帶寬。3 MIDP應(yīng)用程序 在MIDP上運(yùn)行的Java程序被稱為MIDlet。MIDlet是服從一些關(guān)于它運(yùn)行環(huán)境和程序打包的一些規(guī)則。其運(yùn)行環(huán)境是啟動(dòng)MIDlet,這是設(shè)備內(nèi)置應(yīng)用管理器的任務(wù)。應(yīng)用程序能訪問到下面的一些資源:(1)震動(dòng)文件中的所有文件。(2)MIDlet描敘文件的內(nèi)容(JAD)。3 CLDC和MIDP庫中的類 打包:
22、MIDlet應(yīng)用一般采用震動(dòng)文件的形式。這個(gè)文件應(yīng)該包含運(yùn)行應(yīng)用程序需要的類和所有的資源文件,它也應(yīng)該包含一個(gè)叫manifest.mf的清單文件。保存在震動(dòng)文件中的清單文件是一個(gè)簡單的文本文件,包含屬性值。應(yīng)用程序描敘(JADs)在移動(dòng)電話網(wǎng)絡(luò)上傳送大量的數(shù)據(jù),需要有一個(gè)描敘文件讓用戶在沒有下載整個(gè)包之前來查看一下MIDlet震動(dòng)的細(xì)節(jié)。4 手機(jī)游戲開發(fā)過程4.1 貪吃蛇游戲的規(guī)則簡介貪吃蛇游戲的規(guī)則簡介在貪吃蛇游戲中,玩家操作由小方塊連接而成的蛇,去吃隨機(jī)散落在畫面內(nèi)的小方塊,每吃一塊就增加一小方塊長度,要是撞壁以及撞自己的尾,就屬于失敗,如無失敗則直到通關(guān)為止。屏幕的長度的行向?yàn)?1單位,
23、縱向?yàn)?8單位。在這個(gè)范圍內(nèi),玩家通過操作方向鍵來控制蛇的運(yùn)動(dòng)方向。該游戲的最大特色是屏幕自適應(yīng),無論各種手機(jī),PDA的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。圖4.1游戲運(yùn)行界面本游戲的操作流程:用戶在啟動(dòng)MIDlet后,即進(jìn)入游戲主畫面,屏幕開始顯示為歡迎畫面。用戶按下啟動(dòng)按鈕后,就可以開始玩游戲。當(dāng)用戶想暫停時(shí),再次按一下啟動(dòng)按鈕開始,游戲就暫停了,在暫停的情況下再按開始按鈕,游戲繼續(xù)運(yùn)行。任何時(shí)候按EXIT按鈕退出,游戲MIDlet都會(huì)終止。圖4.2 程序流程圖游戲地圖代碼設(shè)計(jì) 游戲地圖是蛇的活動(dòng)范圍和食物隨機(jī)散落的范圍,游戲的容器為行向?yàn)?1單位,縱向?yàn)?8單位,如下代碼:pr
24、ivate final int iX = 10;/地圖的開始坐標(biāo) private final int iY = 10;/private final int SWIDTH = 16;/圖標(biāo)的寬度 private final int iCells = 240;/地圖的列數(shù) private final int iRows = 320;/地圖的行數(shù) private final int iBoxW = SWIDTH*iCells;/地圖的寬采用二維繪圖工具:二維繪圖工具drawLine采用4個(gè)參數(shù)直線起點(diǎn)的x、y坐標(biāo)值和直線終點(diǎn)x、y的坐標(biāo)值,例如:graphics.drawLine(50,0,100,
25、0);這行代碼會(huì)從位置(50,0)到(100,0)繪制一條直線。繪制一個(gè)矩形是一個(gè)類似的過程,不同的只是需要用起點(diǎn)加上寬度和高度的方式來指定這個(gè)對(duì)象。可以繪制透明的或者填充的矩形,甚至可以繪制圓角的矩形。4個(gè)繪制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRoundedRect。貪吃蛇和食物的代碼設(shè)計(jì)屏幕的長度為行向?yàn)?20單位,縱向?yàn)?40單位;在這個(gè)范圍內(nèi),玩家操作方向鍵控制蛇的運(yùn)動(dòng)方向。該游戲的最大特色是屏幕自適應(yīng),無論各種手機(jī),PDA的屏幕大小如何,該游戲總是能獲得最佳的顯示效果。貪吃蛇最初由3個(gè)小正方形組成,小正方形是蛇的身體和游戲容器的
26、組成部分。食物也由一塊小正方形組成,并且隨機(jī)散落在游戲框圖的區(qū)域內(nèi),待玩家操作游戲完成一個(gè)任務(wù)后面,再出現(xiàn)下個(gè)食物,小蛇每吃一個(gè)食物就增加一個(gè)長度。實(shí)現(xiàn)代碼如下:import javax.microedition.lcdui.*;import java.util.Random;import javax.microedition.lcdui.game.*;public class SnakeGameSprite extends GameCanvas implements Runnable public boolean isPlay;public static int Width, Height;
27、 private Snakes snakes;static final int SNAKES_NUM = 50;private Threadthread;private int CanvasWidth = getWidth(); private int CanvasHeight = getHeight();public static longupdates= 0;public static Random rand;public intsnake_n= 3;public int eatfood = 0;private int maxRand = 1000;private int map_bg_x
28、 ;private int map_bg_y ;private int map_bg_w = 16;private int map_bg_h = 16; private int level= 1;public boolean addsnake_n= false;private int win=32;public int sleeptime;public SnakeGameSound snakegamesound;public SplashScreen splashscreen; private final SnakesMID midlet;private int soundmax=1; pub
29、lic boolean over = false; public boolean picOver = false; long startTime=0; private GameOverScreen gameover; public Image image; public MenuList menulist; public int tempcontinue=0; private Display display; private int map_bg;private Image imgGameBg= new Image4;/*建立一個(gè)if類的圖像數(shù)組Gif*/private Gifgold= ne
30、w Gif5;private Gif cat= new Gif2;private Font font = Font.getFont( Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_SMALL ); private int Snake_N,Time_N; SnakeGameSprite(SnakesMID midlet,int Snake_N,int Time_N) super(true);setFullScreenMode(true);/*設(shè)置全屏模式,如何是放在Height=getHeight的后面則不會(huì)是全全屏*/this.midlet = mi
31、dlet;this.Time_N=Time_N;sleeptime=Time_N;Width=getWidth();Height=getHeight(); load();startTime = System.currentTimeMillis() - 0; private void load() rand= new Random( System.currentTimeMillis() );/用CurrentTimeMillis方法檢測(cè)一段程序代碼運(yùn)行時(shí)所花費(fèi)的時(shí)間/*裝載一系列圖片*/try /*裝載蛇圖*/ Image img2= Image.createImage(/snake_n.png
32、); snakes = new Snakes(img2,img2.getWidth(),img2.getHeight(); snakes.setSnakesNum(SNAKES_NUM); snakes.setCanvasSize(CanvasWidth,CanvasHeight);/*裝載食物圖蘑菇*/ for( int i=0; igold.length; i+ ) goldi= new Gif(gold, 12, 16, 15 );/gold:名字,5:5張圖,19和15就是圖像的高寬的像素 /*裝載食物圖-貓*/ for( int i=0; icat.length; i+ ) cati
33、= new Gif(cat, 6, 21, 16 );/cat:名字,10:10張圖,21和16就是圖像的高寬的像素 /*裝載背景圖*/Image temp_bg1 = Image.createImage(/bg_tile_0.png);Image temp_bg2 = Image.createImage(/bg_tile_0a.png);int bgmap = rand.nextInt(maxRand);/取0到1000的隨機(jī)數(shù),因?yàn)閙axGraphics bg;for( int i=0; i100)bg.drawImage(temp_bg1, -i*16, 0, bg.LEFT|bg.TO
34、P);/被繪制的圖像,X軸Y軸,基點(diǎn)elsebg.drawImage(temp_bg2, -i*16, 0, bg.LEFT|bg.TOP);/*裝載障礙物*/bg = null;/釋放實(shí)例化對(duì)象可以使用bg=nul; temp_bg1 = null;/釋放實(shí)例化對(duì)象可以使用temp=nul; temp_bg2 = null;/釋放實(shí)例化對(duì)象可以使用temp=nul; System.gc();/釋放實(shí)例化對(duì)象語句 catch(Exception e) e.printStackTrace(); rePlay( level );/snakes.initSnakes();/*裝載線程,預(yù)執(zhí)行*/pu
35、blic void start() /*開始由SingActive決定聲音的進(jìn)入與否*/if(midlet.SingActive=true)snakegamesound.getInstance().loadResourse(soundmax);/snakegamesound.getInstance().start();isPlay=true;thread =new Thread(this);thread.start();/*當(dāng)用戶按下?lián)芴?hào)鍵時(shí)游戲暫停下來*/ public void keyPressed(int keyCode) if (keyCode = FIRE) tempcontinue
36、+=1; if(tempcontinue%2!=0) stop(); snakegamesound.getInstance().stop(); else start(); / midlet.GameCanvasMenu_Continue(); /*獲得鍵盤的動(dòng)作*/private void input()int keyStates=getKeyStates(); if (keyStates & LEFT_PRESSED) != 0) snakes.move(2); else if (keyStates & RIGHT_PRESSED) != 0) snakes.move(3); else if
37、 (keyStates & UP_PRESSED) != 0) snakes.move(0); else if (keyStates & DOWN_PRESSED) != 0) snakes.move(1); /*按#鍵代碼暫停游戲*/ else if (keyStates & KEY_POUND) !=0) midlet.pauseApp(); public void stop() isPlay=false;/*線程開始執(zhí)行* * throws InterruptedException */public void run()Graphics g=getGraphics();/獲取Graphi
38、cs對(duì)象while(isPlay) long start =System.currentTimeMillis();input();/獲得鍵盤輸入paint(g); /繪制背景和蛇isCollide();long end=System.currentTimeMillis();/獲取執(zhí)行完畢的事件int duration=(int)(end-start);if(sleeptime50)sleeptime=50;if(durationsleeptime)/如果執(zhí)行時(shí)間小于循環(huán)預(yù)定時(shí)間,則等待到循環(huán)時(shí)間 try/wait(3000);/start();Thread.sleep(sleeptime-du
39、ration);catch(InterruptedException ie)/*判斷蛇是否與自己重合*/public void isCollide()for (int i = 4;i=snakes.snake_n;i+)if(snakes.snakes00=snakes.snakesi0&snakes.snakes01=snakes.snakesi1)rePlay(level); isPlay=false; snakegamesound.getInstance().stop(); over=true; midlet.GameCanvasGameOver(midlet.TotalEatfood,
40、over);/*負(fù)責(zé)各種圖形的最終繪制*/public void paint(Graphics g) g.setColor(0x000000); g.fillRect(0, 0, Width, Height);/*繪制背景*/ for( int i=0; imap_bg_x; i+ )/繪制背景(草地)for( int j=0; jmap_bg_y; j+ )g.drawImage(imgGameBg map_bgij , j*map_bg_h, i*map_bg_w, g.LEFT|g.TOP); /*繪制食物gold*/ for( int i=0; igold.length; i+ )/調(diào)
41、用類GIF里的PAINT()來繪制gold圖形 goldi.paint(g); /*繪制食物cat*/ for( int i=0; icat.length; i+ )/調(diào)用類GIF里的PAINT()來繪制cat圖形 cati.paint(g); /*蛇與四墻碰撞*/if( snakes.getX()Width | snakes.getY()Height )/蛇頭碰到邊就重來 rePlay(level); isPlay=false; snakegamesound.getInstance().stop(); over=true; midlet.GameCanvasGameOver(midlet.T
42、otalEatfood,over); /*如果蛇與食物-蘑菇發(fā)生碰撞*/for( int i=0; iwin) /*讓聲音停止*/ snakegamesound.getInstance().stop(); isPlay=false; midlet.Win_SplashScreen(); goldi.setPos();/碰著食物則重新定位食物的位置 /*如果蛇與食物-貓發(fā)生碰撞*/for( int i=0; icat.length; i+ ) if( isIntersect(snakes.getX(),snakes.getY(),8,8, cati.pos_x,cati.pos_y,cati.w
43、, cati.h ) snakes.snake_n-=3;/蛇的身體自動(dòng)減3 eatfood-=3;/記錄當(dāng)前屏幕上吃食物的總數(shù) midlet.TotalEatfood-=3;/記錄吃食物的總數(shù) /*不能讓蛇的長度、吃食物的量、吃食物的總數(shù)小于*/ if(snakes.snake_n=1) snakes.snake_n=1; if(eatfood=0) eatfood=0; if(midlet.TotalEatfood=0) midlet.TotalEatfood=0; cati.setPos();/碰著食物貓則重新定位食物的位置 /*繪制蛇及字體*/ /*繪制字體靠左*/g.setColor
44、( 0xf0FF00 );/黃色g.setFont( font );g.drawString( eat:+eatfood, 1, 2, 0 );/字體,坐標(biāo),坐標(biāo),方位/*繪制字體靠右*/g.setColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 3, 2, 0 );/字體,坐標(biāo),坐標(biāo),方位/*繪制字體靠上*/g.setColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 2, 1, 0 );/字體,坐標(biāo),坐標(biāo),方位/*繪制字體靠下*/g.se
45、tColor( 0xf0FF00 );g.setFont( font );g.drawString( eat:+eatfood, 2, 3, 0 );/字體,坐標(biāo),坐標(biāo),方位/*繪制字體居中*/ g.setColor( 0xFF0000 ); g.setFont( font ); g.drawString( eat:+eatfood, 2, 2, 0 );/字體,坐標(biāo),坐標(biāo),方位 snakes.draw(g); flushGraphics();/將緩沖屏幕上的內(nèi)容繪制到手機(jī)屏幕上/*碰撞檢測(cè)函數(shù)*/ boolean isIntersect(int x1,int y1, int w1, int
46、h1, int x2, int y2, int w2, int h2)/判斷蛇的頭是否和食物重合在做的動(dòng)作 if( Math.abs(x2-x1) (w1+w2)/2 & Math.abs(y2-y1) (h1+h2)/2 )/Math.abs(x2-x1):返回一個(gè)數(shù)字的絕對(duì)值 return true; else return false; /*增加蛇的長度*/ public void addSnake(boolean addsnake_n) addsnake_n=true; /*把草地分在數(shù)組mapij中*/public void rePlay( int level ) map_bg_x=
47、 Height/16;/把寬高分成16*16的小塊背景(X軸要多少塊)map_bg_y= Width/16;/(Y軸要多少塊)map_bg = new intmap_bg_xmap_bg_y;/撲滿整個(gè)背景要多少張圖片的總數(shù)for( int i=0; imap_bg_x; i+ )/繪制背景,從Y軸開始繪制for( int j=0; jmap_bg_y; j+ )int r = rand.nextInt(maxRand);/取0到1000的隨機(jī)數(shù),因?yàn)閙ax /例:int i = rand.nextInt(9); 0-9隨即數(shù) 可以用 Math.random()*9; for( int k=0
48、; kimgGameBg.length; k+ )/從返回的隨機(jī)數(shù)中抽取 /其中的一幅出來作背景(imgGameBg.length是4)if( r k+1 ) )/向右移K+1位,例:b=ai;向右移n位相當(dāng)于除以2的n次方 / b1=ai;向左移n位相當(dāng)于乘以2的n次方map_bgij = k;snakes.initSnakes();操作控制代碼設(shè)計(jì)圖4.3 游戲運(yùn)行畫面MIDP的游戲設(shè)計(jì),本質(zhì)上就是用一個(gè)線程或者定時(shí)器產(chǎn)生重繪事件,用線程和用戶輸入改變游戲狀態(tài)。這個(gè)游戲也不例外,啟動(dòng)MIDlet后,就立即生成一個(gè)重繪線程,該線程每隔50ms繪制一次屏幕。當(dāng)然,重繪時(shí)有一些優(yōu)化措施,并不是屏幕上所有的像素都需要重繪,而是有所選擇,比如游戲畫布上那些已經(jīng)固定下來的就不需重繪。游戲畫布是一個(gè)CommandLi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路護(hù)欄修建合同范本
- 個(gè)人用電協(xié)議合同范例
- 公司運(yùn)輸購銷合同范本
- 刻字木材出售合同范本
- 個(gè)人旅游陪玩合同范本
- 個(gè)人住家保姆合同范本
- 勞務(wù)代理加盟合同范例
- fidic銀皮書合同范例
- 出售電廠燒火料合同范本
- fpc代加工合同范本
- 2008 年全國高校俄語專業(yè)四級(jí)水平測(cè)試試卷
- 需求供給與均衡價(jià)格PPT課件
- 金融工程鄭振龍課后習(xí)題答案
- 最常用2000個(gè)英語單詞_(全部標(biāo)有注釋)字母排序
- 人造革的幾種生產(chǎn)制造方法
- 在銀行大零售業(yè)務(wù)工作會(huì)議上的講話講解學(xué)習(xí)
- 發(fā)電廠動(dòng)力部分復(fù)習(xí)資料
- 古代傳說中的藝術(shù)形象-
- 水電站大壩土建安裝工程懸臂模板施工手冊(cè)
- 三體系內(nèi)審檢查表(共58頁).doc
- 家樂福 全套管控文件
評(píng)論
0/150
提交評(píng)論