版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 本 科 畢 業(yè) 設(shè) 計(jì)</p><p> 基于J2ME環(huán)境的手機(jī)游戲軟件的開(kāi)發(fā)</p><p> 所在學(xué)院 </p><p> 專(zhuān)業(yè)班級(jí) 電子與信息工程 </p><p> 學(xué)生姓名 學(xué)號(hào)
2、 </p><p> 指導(dǎo)教師 職稱(chēng) </p><p> 完成日期 年 月 </p><p><b> 摘要</b></p><p> Java ME 以往稱(chēng)作J2ME(Java Platform, Micro Editi
3、on )是為機(jī)頂盒、移動(dòng)電話(huà)和PDA之類(lèi)嵌入式消費(fèi)電子設(shè)備提供的Java語(yǔ)言平臺(tái),包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的Java API。它和Java SE、Java EE一起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過(guò)JCP(Java Community Process)制訂的。網(wǎng)絡(luò)游戲產(chǎn)業(yè)的繁榮,讓企業(yè)和消費(fèi)者同時(shí)認(rèn)識(shí)到了游戲的力量。雖然受到屏幕尺寸和操控的限制,但作為全球使用量最大的通信產(chǎn)品,手機(jī)也具有成功進(jìn)入掌上游戲領(lǐng)域的理由。從二維貪吃蛇游
4、戲,到今天的三維畫(huà)面及聲色效果俱佳的游戲,手機(jī)游戲已經(jīng)成為一種非常普遍的休閑方式。</p><p> 本文開(kāi)發(fā)的游戲是一個(gè)略微簡(jiǎn)單的J2ME射擊游戲。本文首先簡(jiǎn)要的介紹java編程語(yǔ)言的三個(gè)領(lǐng)域(J2SE、J2EE、J2ME),接下去是開(kāi)發(fā)環(huán)境的配置的簡(jiǎn)要介紹,提出了怎樣對(duì)游戲進(jìn)行策劃,游戲的需求性分析。本論文的主要目標(biāo)是實(shí)現(xiàn)一個(gè)名為《飛機(jī)闖闖》的游戲,進(jìn)入游戲后,首先啟動(dòng)閃屏界面,后臺(tái)默認(rèn)加載游戲資源,然后進(jìn)
5、入到菜單界面,通過(guò)用戶(hù)的選擇,轉(zhuǎn)到其他相關(guān)界面。本文將程序分為六個(gè)類(lèi),包括BulletsSprite類(lèi),此類(lèi)繼承于Sprite,主要實(shí)現(xiàn)了游戲子彈精靈。IntroCanvas用于繪制幫助界面,顯示游戲幫助信息。mainMIDlet屬于主控模塊類(lèi),用于整個(gè)游戲界面的切換,其他各個(gè)模塊返回中斷信號(hào)給此類(lèi),在這個(gè)類(lèi)中切換當(dāng)前顯示屏幕。MenuCanvas用戶(hù)提供一個(gè)菜單界面,方便用戶(hù)選擇不同的游戲程序功能。PlayCanvas為游戲的主界面,
6、實(shí)現(xiàn)了游戲功能。SplashCanvas是閃屏界面,顯示此界面時(shí),啟動(dòng)后臺(tái)線(xiàn)程,加載游戲資源。</p><p> 關(guān)鍵詞:J2ME;飛機(jī)射擊;手機(jī)游戲開(kāi)發(fā)</p><p><b> Abstract</b></p><p> Java ME past the J2ME (Java Platform called for Micro hap
7、pen), STB, mobile phone and PDA embedded consumer electronic equipment such as the Java language Platform provides, including virtual machine and a series of standardized Java API. It and Java SE, Java EE together make u
8、p Java technology, and as the three versions that JCP (Java is through the Process) make. Online game industry prosperity, let the enterprise and the consumer also recognized the power game. Though when the screen size a
9、nd </p><p> This paper development game is a slightly simple J2ME shooting game. This paper first briefly introduces three fields of Java programming language (J2SE Java, J2EE, J2ME), the next is the develo
10、pment environment of the configuration are briefly introduced, proposed how the game plan, the game needs sex analysis. This thesis's main goal is to achieve a named "aircraft, the game of chuang chuang after en
11、tering the game, the first start flash screen interface, background, and then load game resourc</p><p> Keywords: J2ME; Aircraft shot; Mobile games development</p><p><b> 目錄</b><
12、;/p><p><b> 前言1</b></p><p> 第1章 J2ME介紹2</p><p> 1.1 J2ME體系結(jié)構(gòu)2</p><p> 1.1.1 配置層2</p><p> 1.1.2 簡(jiǎn)表層3</p><p> 1.1.3 CLDC類(lèi)庫(kù)3
13、</p><p> 1.1.4 MIDP4</p><p> 1.2 J2ME WTK4</p><p> 第二章 J2ME手機(jī)開(kāi)發(fā)環(huán)境介紹5</p><p> 2.1 JDK的安裝與配置5</p><p> 2.2 Eclipse的配置6</p><p> 第三章 射擊
14、游戲程序功能分析7</p><p> 3.1程序功能需求分析7</p><p> 3.2 游戲的可行性分析7</p><p> 3.3 游戲策劃8</p><p> 3.3.1 游戲的故事背景策劃8</p><p> 3.3.2 游戲開(kāi)始畫(huà)面系統(tǒng)8</p><p> 3.
15、3.3 游戲操作介紹8</p><p> 3.3.4游戲內(nèi)容分系統(tǒng)9</p><p> 3.3.5 線(xiàn)程控制和游戲暫停系統(tǒng)9</p><p> 第四章 手機(jī)游戲設(shè)計(jì)10</p><p> 4.1 游戲基礎(chǔ)類(lèi)簡(jiǎn)介10</p><p> 4.2 游戲系統(tǒng)的詳細(xì)設(shè)計(jì)11</p><p
16、> 4.3 創(chuàng)建J2ME項(xiàng)目設(shè)計(jì)12</p><p> 4.4 MIDP應(yīng)用程序12</p><p> 第五章 游戲的具體實(shí)現(xiàn)14</p><p> 5.1 主菜單背景界面系統(tǒng)14</p><p> 5.2 子彈與飛機(jī)界面系統(tǒng)15</p><p> 5.3 鍵盤(pán)的響應(yīng)16</p>
17、;<p> 5.4 子彈的發(fā)射爆炸控制16</p><p> 5.5 飛機(jī)與子彈或者其他事物碰撞檢測(cè)17</p><p> 5.6 玩家四次游戲機(jī)會(huì)的實(shí)現(xiàn)17</p><p> 5.7 游戲中的獎(jiǎng)勵(lì)和飛機(jī)的相關(guān)行為17</p><p> 5.8 普通敵人的相關(guān)屬性18</p><p>
18、 5.9 運(yùn)動(dòng)中的如何讓白云實(shí)現(xiàn)19</p><p> 第六章 系統(tǒng)測(cè)試20</p><p> 6.1 程序軟件問(wèn)題20</p><p> 6.2 游戲內(nèi)容測(cè)試20</p><p><b> 總結(jié)21</b></p><p><b> 致謝22</b>
19、</p><p><b> 參考文獻(xiàn)23</b></p><p><b> 附錄24</b></p><p><b> 前言</b></p><p> 隨著科學(xué)技術(shù)的發(fā)展,人們的工作和生活方式已經(jīng)發(fā)生了巨大的變化?,F(xiàn)今各種各樣的智能消費(fèi)類(lèi)電子產(chǎn)品呈現(xiàn)爆炸性增長(zhǎng),其數(shù)
20、量已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)桌面PC,以當(dāng)前使用最多的移動(dòng)通信設(shè)備手機(jī)來(lái)為例,隨著移動(dòng)設(shè)備硬件的不斷發(fā)展,手機(jī)的內(nèi)存也在逐漸的加大,雖然遠(yuǎn)不及PC機(jī)的內(nèi)存,但是應(yīng)經(jīng)從原來(lái)的幾字節(jié)發(fā)展到如今的幾兆之多。同時(shí)也嵌入了智能芯片,處理器的能力也大大增加,同時(shí)使用了智能的手機(jī)操作系統(tǒng),具有支持?jǐn)?shù)碼相機(jī)等豐富的多媒體等功能。這些功能很難讓人相信是在短短的一兩年之內(nèi)完成的,其速度之快,卻是讓人感到震驚。通過(guò)周?chē)说氖褂们闆r,我們就會(huì)發(fā)現(xiàn)其速度的發(fā)展并不是沒(méi)有原因的
21、,手機(jī)逐漸普及和硬件設(shè)備的發(fā)展,以及JAVA語(yǔ)言的成熟都是推動(dòng)手機(jī)智能化的重要力量。移動(dòng)設(shè)備的增長(zhǎng)一方面體現(xiàn)在數(shù)量的幾何形增長(zhǎng)趨勢(shì);另一方面,設(shè)備本身也向著更強(qiáng)大的處理能力、智能應(yīng)用等方向的發(fā)展。移動(dòng)設(shè)備數(shù)量的劇增,在帶給人們更多方便的同時(shí),也產(chǎn)生了巨大的移動(dòng)開(kāi)發(fā)市場(chǎng)。隨著手機(jī)的普及,手機(jī)逐漸生活化,成為了人們生活中必備的一部分。人們對(duì)手機(jī)的功能要求也越來(lái)越多,為了滿(mǎn)足人們?nèi)粘5膴蕵?lè)功能,手機(jī)游戲應(yīng)運(yùn)而生。雖然手機(jī)游戲受手機(jī)設(shè)備的限制,
22、很難實(shí)</p><p> 手機(jī)上玩游戲使得游戲平臺(tái)J2ME得到迅速普及。手機(jī)游戲的開(kāi)發(fā)成為了游戲行業(yè)的最新熱點(diǎn)。隨著手機(jī)設(shè)備的不斷提高,手機(jī)內(nèi)存的不斷增加,以及java技術(shù)的不斷成熟。智能手機(jī)目前正以極快的速度在增長(zhǎng),隨之而來(lái)的便是巨大的手機(jī)游戲開(kāi)發(fā)商機(jī)。</p><p><b> J2ME介紹</b></p><p> J2ME是sun
23、公司針對(duì)嵌入式、消費(fèi)類(lèi)電子產(chǎn)推出的開(kāi)發(fā)平臺(tái),它與J2SE和J2EE并稱(chēng)為java的三大平臺(tái)。與J2SE和J2EE不同,J2ME實(shí)際只是一系列規(guī)范的集合,由JCP組織制定相關(guān)的Java Specification Request(JSR)并發(fā)布[1]。每個(gè)廠(chǎng)商在生產(chǎn)自己產(chǎn)品時(shí)都會(huì)按照規(guī)范實(shí)現(xiàn)相應(yīng)的J2ME規(guī)則,同時(shí)必須要通過(guò)TCK測(cè)試,這樣才確保兼容性,比如MIDP2.0規(guī)范就是在JSR118中制定的。</p><p&
24、gt; 1.1 J2ME體系結(jié)構(gòu)</p><p> J2ME平臺(tái)主要由配置(Configuration)和簡(jiǎn)表(Profile)兩大部分組成的。配置是J2ME的類(lèi)庫(kù)集合,它在滿(mǎn)足最大設(shè)備需求的同時(shí),自身最小化。配置中同時(shí)也包含JAVA虛擬機(jī)。簡(jiǎn)表是針對(duì)一系列設(shè)備提供的類(lèi)庫(kù)[11]。</p><p> J2ME中有兩個(gè)最主要的配置,分別是連接有線(xiàn)設(shè)備配置(Connected Limit
25、ed Devices Configuration,CLDC)和連接設(shè)備配置(Connected Devices Configuration,CDC)。它們是根據(jù)設(shè)備的硬件性能進(jìn)行區(qū)分的,隨著技術(shù)的發(fā)展,J2ME開(kāi)發(fā)網(wǎng)將逐步推出基于CDC的平臺(tái)介紹。CLDC主要針對(duì)手機(jī)、PDA、雙工尋呼機(jī)等。下圖是J2ME體系結(jié)構(gòu)的框圖:</p><p> 圖1.1 J2ME體系結(jié)構(gòu)圖</p><p>&
26、lt;b> 1.1.1 配置層</b></p><p> CLDC 稱(chēng)為連接受限的設(shè)備配置,針對(duì)內(nèi)存容量較小,并且只有低帶寬、間歇式網(wǎng)絡(luò)連接的低端設(shè)備[11]。它是為資源有限的小型設(shè)備定義的一種標(biāo)準(zhǔn)的、內(nèi)存占用最小的JAVA平臺(tái)。CLDC主要用于內(nèi)存16位或32的設(shè)備,從開(kāi)發(fā)角度說(shuō),它的大小限制使得其相比CDC而言,更有趣、更具挑戰(zhàn)性。專(zhuān)家根據(jù)這類(lèi)設(shè)備的特點(diǎn),對(duì)標(biāo)準(zhǔn)的JAVA虛擬機(jī)規(guī)范進(jìn)行了
27、精簡(jiǎn),去掉了一些冗余的特性,為計(jì)算能力有限的低端設(shè)備定義了一個(gè)小型JAVA虛擬機(jī)。K虛擬機(jī)即KVM(k即 kilo),也就是說(shuō)KVM所需的內(nèi)存容量?jī)H以KB來(lái)衡量。專(zhuān)家組還為這樣的小型JAVA虛擬機(jī)定義了兩部分核心類(lèi)庫(kù),一部分從J2SE的核心類(lèi)庫(kù)中獲取,是J2SE核心類(lèi)庫(kù)中定義的類(lèi)的子集,另一部分是專(zhuān)門(mén)針對(duì)低端設(shè)備特點(diǎn)而設(shè)計(jì)的類(lèi)。</p><p> CDC 稱(chēng)為連接不限設(shè)備配置,主要面向高內(nèi)存,高網(wǎng)絡(luò)傳輸速度且網(wǎng)
28、絡(luò)穩(wěn)定的高端設(shè)備。這類(lèi)設(shè)備通常有固定的供電設(shè)備。專(zhuān)家組為這種高端設(shè)備定義了功能完善的JAVA虛擬機(jī)(CVM)和此類(lèi)設(shè)備專(zhuān)用的核心類(lèi)庫(kù)。CDC定義的核心類(lèi)庫(kù)也有兩部分組成:一部分截取至J2SE的核心類(lèi)庫(kù),由J2SE類(lèi)庫(kù)的一部分子集組成。另一部分是專(zhuān)門(mén)針對(duì)這些高端設(shè)備的特點(diǎn)而設(shè)計(jì)的類(lèi)。圖1.2顯示了J2SE、CLDC和CD 定義的核心類(lèi)庫(kù)之間的關(guān)系。</p><p> 圖1.2 J2ME配置和J2SE關(guān)系圖<
29、;/p><p><b> 1.1.2 簡(jiǎn)表層</b></p><p> 簡(jiǎn)表層構(gòu)建在配置層之上。簡(jiǎn)表的主要作用是為相同消費(fèi)電子設(shè)備的不同生產(chǎn)廠(chǎng)商提供標(biāo)準(zhǔn)化的JAVA類(lèi)庫(kù)。在簡(jiǎn)表層之上的是針對(duì)設(shè)備的功能特性提供JAVA類(lèi)庫(kù)支持,它對(duì)配置層的規(guī)范進(jìn)行擴(kuò)展和補(bǔ)充[12]。</p><p> 簡(jiǎn)表層中對(duì)于嵌入式設(shè)備按照其應(yīng)用的領(lǐng)域的不同做了進(jìn)一步的細(xì)
30、分,把相同應(yīng)用領(lǐng)域的設(shè)備歸結(jié)為一個(gè)設(shè)備族,同時(shí)為設(shè)備家族中的通用功能特性提供專(zhuān)門(mén)的JAVA庫(kù)類(lèi)支持的。支持不同設(shè)備家族的JJAVA類(lèi)庫(kù)分別定義在不同的簡(jiǎn)表層的規(guī)范中。簡(jiǎn)表和配置結(jié)合起來(lái),為嵌入式設(shè)備提供了一個(gè)基于java的運(yùn)行環(huán)境,在一個(gè)嵌入式設(shè)備上只有一個(gè)符合其配置規(guī)范上JAVA虛擬機(jī)和核心類(lèi)庫(kù),但是對(duì)一個(gè)配置而言,在其上可以有多個(gè)簡(jiǎn)表規(guī)范同時(shí)存在。一個(gè)簡(jiǎn)表規(guī)范不僅可以直接建立在某個(gè)配置規(guī)范之上,也可以建立在另一個(gè)簡(jiǎn)表規(guī)范之上。應(yīng)用開(kāi)
31、發(fā)人員應(yīng)該針對(duì)具體的簡(jiǎn)表和配置規(guī)范進(jìn)行相應(yīng)的嵌入式設(shè)備的開(kāi)發(fā),這樣才保證應(yīng)用程序在實(shí)現(xiàn)相同簡(jiǎn)表和配置的設(shè)備之間是可移植的。目前J2ME領(lǐng)域里使用最為廣泛的便是移動(dòng)信息設(shè)備簡(jiǎn)表(MIDP)。</p><p> 在眾多的簡(jiǎn)表規(guī)范中,MIDP是被廣泛支持和使用的簡(jiǎn)表規(guī)范,它主要是針對(duì)移動(dòng)信息設(shè)備和一些體積較小且處理能力有限的手持設(shè)備,這些設(shè)備有著屏幕和輸入機(jī)制的共性。</p><p> 1.
32、1.3 CLDC類(lèi)庫(kù)</p><p> CLDC的起源可追溯到1999年JavaOne大會(huì)上,Sun引入了Java和KVM,以及相關(guān)的庫(kù)首的袖珍版本,雖然其他配置CLDC的虛擬機(jī),以滿(mǎn)足要求,但由于虛擬機(jī)本身并沒(méi)有因此,它的實(shí)施是載于在KVM [10]當(dāng)前版本。 CLDC是為使用較小的存儲(chǔ)設(shè)備的設(shè)計(jì)和開(kāi)發(fā)能力,使用虛擬機(jī)是KVM,這是高度優(yōu)化的JVM。對(duì)于網(wǎng)絡(luò)連接而言,它是針對(duì)有限和間歇的無(wú)線(xiàn)連接設(shè)備。與事件
33、處理,用戶(hù)和應(yīng)用程序之間,應(yīng)用程序生存期管理等相關(guān)領(lǐng)域是由Profile來(lái)定義的,使用界面的定義也在Profile層的規(guī)范之內(nèi)。 CLDC的有四個(gè)包 :java.lang、java.util、java.io和javax.microedition。</p><p> 1.1.4 MIDP</p><p> MIDP是J2ME中第一個(gè)實(shí)現(xiàn)的Profile,它主要是針對(duì)移動(dòng)信息設(shè)備或體積相對(duì)
34、較小且處理能力有限的手持設(shè)備。它對(duì)設(shè)備的要求相對(duì)較簡(jiǎn)單,使用MIDP的移動(dòng)信息設(shè)備必須有一個(gè)顯示屏幕和用戶(hù)輸入機(jī)制。除了這些硬件要求外,MIDP還定義了一些相應(yīng)的軟件需求,首先直接MIDP的設(shè)備必須提供管理軟件的功能,并能夠提供運(yùn)行KVM虛擬機(jī)的線(xiàn)程。提供可以供程序軟件讀寫(xiě)的永久存儲(chǔ)空間,并且可以訪(fǎng)問(wèn)無(wú)線(xiàn)網(wǎng)絡(luò),提供顯示輸出等。要能夠接受按鍵和觸屏事件的觸發(fā)功能。另外還要實(shí)現(xiàn)MIDP應(yīng)用程序的生存周期安裝、選擇、啟動(dòng)、關(guān)閉和刪除的管理。&
35、lt;/p><p> 1.2 J2ME WTK</p><p> WTK 是Sun公司提供的無(wú)線(xiàn)開(kāi)發(fā)工具包,全稱(chēng)是Sun J2ME Wireless Toolkit它的設(shè)計(jì)目的是為了幫助開(kāi)發(fā)人員簡(jiǎn)化J2ME的開(kāi)發(fā)過(guò)程。使用這個(gè)工具包可以開(kāi)發(fā)能夠在與 Java Technology for the Wireless Industry規(guī)范相兼容的設(shè)備上運(yùn)行的J2ME 應(yīng)用程序。該工具箱包含了
36、完整的生成工具、實(shí)用程序以及設(shè)備仿真器[8]。</p><p> WTK是用來(lái)開(kāi)發(fā)MIDP的,為了讓MIDlet可以順利編譯和執(zhí)行,WTK必須包含有CLDC和MIDP的類(lèi)庫(kù),WTK幫助我們省去了很多額外安裝調(diào)試這些類(lèi)庫(kù)的時(shí)間。但是不同版本的WTK包含的程序庫(kù)內(nèi)容是不一樣的,每個(gè)WTK版本的內(nèi)容都不盡相同,如果您在開(kāi)發(fā)中需要某個(gè)特定的jar包而當(dāng)前的WTK版本又沒(méi)有時(shí),您可以簡(jiǎn)單把這個(gè)jar包拷貝如當(dāng)前WTK的l
37、ib文件夾即可。</p><p> WTK需要有JDK的支持才能夠使用,在安裝WTK前需要先安裝完并且配置好JDK。</p><p> J2ME手機(jī)開(kāi)發(fā)環(huán)境介紹</p><p> 手機(jī)之所以能夠時(shí)時(shí)刻刻伴隨著人們的生活,其關(guān)鍵的特性就是便攜,并且能夠較長(zhǎng)時(shí)間內(nèi)脫離電源使用。手機(jī)的顯示頻幕不會(huì)很大,輸入的方式也單一,電池的電力損耗小,決定了能夠在手機(jī)上運(yùn)行的軟件
38、也具有相應(yīng)的特性。</p><p> 最直接的手機(jī)開(kāi)發(fā)模式是在手機(jī)的操作系統(tǒng)平臺(tái)上直接進(jìn)行嵌入式的開(kāi)發(fā)。嵌入式的一般方法是在傳統(tǒng)的電腦上編寫(xiě)代碼,通過(guò)電腦上的手機(jī)游戲模擬器進(jìn)行前期的開(kāi)發(fā),完成基本測(cè)試后利用廠(chǎng)商提供的交叉編譯工具在電腦上變成可運(yùn)行的二進(jìn)制代碼以后,再下載到手機(jī)上進(jìn)行真實(shí)環(huán)境的測(cè)試后才能生產(chǎn)。</p><p> C、C++語(yǔ)言作為一種運(yùn)行效率高的語(yǔ)言,被多數(shù)開(kāi)發(fā)人員掌握,
39、通過(guò)C/C++的指針特性以及它貼近硬件機(jī)能的本質(zhì),運(yùn)用它們開(kāi)發(fā)能夠最大限度與硬件平臺(tái)結(jié)合,充分利用硬件性能,實(shí)現(xiàn)高性能圖形顯示。但是很多的情況下,C函數(shù)庫(kù)并不能滿(mǎn)足需求進(jìn)行實(shí)際開(kāi)發(fā)就必須預(yù)先準(zhǔn)備好函數(shù)庫(kù)。實(shí)際上只有在充分利用手機(jī)操作系統(tǒng)提供的功能才能達(dá)到預(yù)期的目標(biāo)。</p><p> 在使用任何一種語(yǔ)言進(jìn)行編程時(shí)都離不開(kāi)開(kāi)發(fā)環(huán)境,JAVA語(yǔ)言也不例外,下面逐步將介紹開(kāi)發(fā)環(huán)境和怎么配置開(kāi)發(fā)環(huán)境。</p>
40、;<p> 2.1 JDK的安裝與配置</p><p> 首先運(yùn)行jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008</p><p> 點(diǎn)擊“接受”出現(xiàn)自定義安裝,更改安裝的盤(pán)可以自己選擇,然后點(diǎn)擊“下一步”。</p><p> 本次安裝默認(rèn)在C盤(pán)。點(diǎn)擊“完成”即可。</p><p
41、> 接下來(lái)是JDK的配置。</p><p> (1)點(diǎn)擊我的電腦→屬性→高級(jí)→環(huán)境變量→點(diǎn)擊“新建”,在變量名輸入java_home ; 變量值輸入D:\Program Files\Java\jdk1.6.0_10 ,點(diǎn)擊確定。如圖2-1。</p><p> 圖2-1輸入變量值圖</p><p> (2)同上新建一個(gè)同上,新建一個(gè)系統(tǒng)變量,變量
42、名為:classpath;變量值:.;%java_home%\lib;%java_home%\lib\ tools.jar ,點(diǎn)擊確定。注意前面的小圓點(diǎn)必須要有。</p><p> (3)在系統(tǒng)變量中,點(diǎn)擊Path變量,點(diǎn)解編輯,在變量值中添加:%java_home%\bin;%java_home%\jre6\bin; ,點(diǎn)擊確定。</p><p> 至此這樣就完成了JDK的配置。&
43、lt;/p><p> 2.2 Eclipse的配置</p><p> 到Eclipse官方下載本軟件的壓縮包文件后可以直接接壓縮到磁盤(pán)上然后運(yùn)行,建議解壓縮到系統(tǒng)盤(pán)目錄下單獨(dú)建立文件夾名。</p><p> 下面是Eclipse的配置,打開(kāi)Eclipse 選擇 Help ---> Insert New Software。</p><p&g
44、t; 單擊add,接著單擊archive 選擇eclipseme壓縮包的路徑,Name 可以隨便起 不過(guò)最好是Eclipseme。單擊確定 。</p><p> 選中EclipseMe 點(diǎn)擊 “下一步”,一直點(diǎn) “下一步” 最后同意 協(xié)議 ,再點(diǎn)“完成”可以看到Eclipse的安裝進(jìn)度條(等一下重啟Eclipse就好了)。</p><p> 選中J2ME 選中 Device Mana
45、gement</p><p> 單擊 "inport"</p><p> 再單擊“Browse” 找到WTK2.5.2的安裝路徑(文件夾)</p><p> 單擊“Refresh”</p><p><b> 單擊“完成”</b></p><p> 好了 到此Eclip
46、se配置J2ME環(huán)境就好了,可以直接編寫(xiě)J2me文件了。</p><p> 射擊游戲程序功能分析</p><p> 3.1程序功能需求分析</p><p> 從啟動(dòng)游戲開(kāi)始,用戶(hù)在菜單欄里選擇新游戲按下按鈕確定,計(jì)算機(jī)給出的響應(yīng)是調(diào)用閃屏三秒,接著在后臺(tái)多線(xiàn)程調(diào)入飛機(jī)和子彈等的圖片然后顯示在屏幕上,至此,游戲的初始化完成。</p><p&g
47、t; 控制飛機(jī)的上下左右移動(dòng),用戶(hù)只是通過(guò)鍵盤(pán)發(fā)出命令,程序接收到命令后調(diào)用RUN()方法里的算法對(duì)飛機(jī)當(dāng)前的坐標(biāo)位置經(jīng)行加減乘除,并且還需要運(yùn)算改變位置后的坐標(biāo),同時(shí)覆蓋飛機(jī)的當(dāng)前坐標(biāo)值,并且通過(guò)多線(xiàn)程里飛機(jī)圖像刷新并且顯示在屏幕上,完成飛機(jī)的移動(dòng)控制,這個(gè)需要用戶(hù)直接控制,內(nèi)部芯片不能直接控制。</p><p> 控制飛機(jī)的生命,當(dāng)飛機(jī)發(fā)生了碰撞以后,程序自動(dòng)的修改了飛機(jī)的生命值,并且把修改好的生命值在屏
48、幕上通過(guò)調(diào)用生命值圖像顯示。當(dāng)生命值為零時(shí),自動(dòng)結(jié)束游戲。</p><p> 發(fā)射導(dǎo)彈的命令由用戶(hù)通過(guò)按下鍵盤(pán)發(fā)出,接著子彈和飛機(jī)的線(xiàn)程因?yàn)槌绦蝽憫?yīng)而終止,緊接著調(diào)用子彈的圖片,顯示在屏幕上。</p><p> 敵機(jī)和障礙物,用戶(hù)不能直接對(duì)其控制,是由程序控制的。</p><p> 碰撞,用戶(hù)不能直接控制,但是可以通過(guò)飛機(jī)到達(dá)間接控制的目的,根據(jù)程序里的方法對(duì)
49、其進(jìn)行計(jì)算并且顯示。</p><p> 終止游戲,前面說(shuō)到當(dāng)飛機(jī)的生命值為零時(shí),系統(tǒng)終止游戲。也可以是用戶(hù)根據(jù)自身原因,將游戲關(guān)閉。這是由用戶(hù)和計(jì)算機(jī)同時(shí)控制的。</p><p> 根據(jù)上述對(duì)基礎(chǔ)用列的事件流程進(jìn)行分析,可以得出游戲的主要流程。</p><p> ?。?)游戲開(kāi)始,為了吸引用戶(hù)的注意力和發(fā)揮用戶(hù)的想象力,我們要準(zhǔn)備精美的圖片作為游戲的標(biāo)題畫(huà)面。&
50、lt;/p><p> (2)進(jìn)入到游戲的主選菜單</p><p><b> ?。?)啟動(dòng)游戲</b></p><p><b> (4)選擇游戲難度</b></p><p> ?。?)進(jìn)入游戲的主要顯示內(nèi)容顯示。包括用戶(hù)對(duì)飛機(jī)的控制,發(fā)射導(dǎo)彈的控制,用戶(hù)控制的生命顯示,敵機(jī)和子彈的顯示,背景的顯示,子
51、彈和飛機(jī)碰撞的判斷顯示。</p><p><b> 游戲結(jié)束。</b></p><p> 3.2 游戲的可行性分析</p><p> 游戲的可行性遵循以下原則[2]:</p><p> ?。?)每個(gè)設(shè)計(jì)思路都要有規(guī)范,而且要便于管理。</p><p> ?。?)能在手機(jī)上運(yùn)行的手機(jī)游戲,因?yàn)?/p>
52、本身手機(jī)具有處理能力的局限性,所以設(shè)計(jì)必須要簡(jiǎn)單富有趣味。同樣的操作也要簡(jiǎn)單,易于上手。</p><p> (3)目前手機(jī)游戲可謂是層出不窮,各種各樣眼花繚亂,所以相關(guān)的設(shè)計(jì)要讓別人耳目一新。</p><p> (4)設(shè)計(jì)的游戲要有發(fā)展空間,因?yàn)闀r(shí)代在進(jìn)步,一個(gè)游戲若是不加入新的元素,新的創(chuàng)意,玩家就會(huì)對(duì)手機(jī)游戲失去興趣。而且隨著手機(jī)的升級(jí),手機(jī)運(yùn)算能力的上升,可以推出新的版本。<
53、;/p><p> (5)最終的游戲程序必須要通過(guò)測(cè)試安全可靠,沒(méi)有BUG,不會(huì)溢出,不會(huì)造成手機(jī)運(yùn)行功能障礙。</p><p><b> 3.3 游戲策劃</b></p><p> 游戲在設(shè)計(jì)的第一步,就需要構(gòu)思好整個(gè)游戲,先形成一個(gè)最初的概念,然后慢慢的細(xì)化,接著從每個(gè)細(xì)節(jié)慢慢詳細(xì)化。接下去就是游戲的具體策劃。</p><
54、;p> 3.3.1 游戲的故事背景策劃 </p><p> 每個(gè)游戲都有他的故事背景,本游戲的名字叫做《飛機(jī)闖闖》,這是模仿其他類(lèi)的飛行戰(zhàn)斗游戲,一只可愛(ài)的小飛機(jī)本來(lái)在天空之自由的翱翔,可惜出現(xiàn)了一只只心存敵意的其他飛機(jī),小飛機(jī)展開(kāi)了自衛(wèi)戰(zhàn),通過(guò)浴血奮戰(zhàn)將敵機(jī)清除。</p><p> 3.3.2 游戲開(kāi)始畫(huà)面系統(tǒng)</p><p><b> 開(kāi)
55、始菜單設(shè)置</b></p><p><b> (1) 開(kāi)始游戲 </b></p><p> 用戶(hù)選擇開(kāi)始新游戲時(shí),正式進(jìn)入游戲運(yùn)行。</p><p><b> ?。?)游戲幫助</b></p><p> 當(dāng)用戶(hù)選擇游戲幫助時(shí)顯示游戲的主要控制方法,包括按鍵設(shè)置。讓用戶(hù)能最快的學(xué)會(huì)游
56、戲的操作,方便用戶(hù)的使用。</p><p><b> (3) 退出</b></p><p> 退出該游戲。用戶(hù)通過(guò)控制左右方向鍵鍵可以選擇開(kāi)始游戲,或者退出游戲。</p><p> 3.3.3 游戲操作介紹</p><p> 本游戲主要按鍵設(shè)置:</p><p> 按鍵左→用戶(hù)可以控制飛
57、機(jī)向左移動(dòng);</p><p> 按鍵右→用戶(hù)可以控制飛機(jī)向右移動(dòng);</p><p> 按鍵上→用戶(hù)可以控制飛機(jī)向上移動(dòng);</p><p> 按鍵下→用戶(hù)可以控制飛機(jī)向下移動(dòng);</p><p> 按鍵中間→發(fā)射導(dǎo)彈;</p><p> 按鍵→確定,暫停,繼續(xù);</p><p><b
58、> 按鍵→掛斷,退出。</b></p><p> 3.3.4游戲內(nèi)容分系統(tǒng)</p><p> 本游戲飛機(jī)有三條生命,被敵機(jī)擊中會(huì)減少一條生命,重生后有4秒屬于無(wú)敵狀態(tài),等三條生命全部用完即GAME CVER。</p><p> 飛機(jī)每次發(fā)射三個(gè)炸彈,玩家在擊毀敵機(jī)的同時(shí)也要注意躲避敵機(jī)的撞擊和子彈。</p><p>
59、 為了增加界面的美觀(guān),地圖會(huì)一直變化,慢慢的移動(dòng),天空中的白云也會(huì)不斷的隨機(jī)出現(xiàn)。飛機(jī)在移動(dòng)中遇到的敵機(jī)也會(huì)不定期的出現(xiàn),數(shù)量也會(huì)變化,小飛機(jī)在向左右移動(dòng)的時(shí)候,會(huì)傾斜著移動(dòng),增加了一定的趣味性。在經(jīng)過(guò)一段時(shí)間后會(huì)出現(xiàn)一只大的飛機(jī),如果小飛機(jī)撞上大飛機(jī)后,飛機(jī)的顏色就會(huì)變成紅色。</p><p> 3.3.5 線(xiàn)程控制和游戲暫停系統(tǒng)</p><p> 游戲進(jìn)入主游戲界面,啟動(dòng)主線(xiàn)程,
60、線(xiàn)程內(nèi)部接收用戶(hù)鍵盤(pán)輸入,通過(guò)鍵盤(pán)輸入控制游戲主角上下左右移動(dòng),然后進(jìn)行游戲的碰撞檢測(cè),判斷游戲主角的生命狀態(tài),調(diào)用界面繪制函數(shù),將界面內(nèi)容繪制到界面上。</p><p> 游戲中可以隨時(shí)暫停,呼出暫停菜單,查看幫助,接發(fā)短信,接聽(tīng)電話(huà),也可以回到游戲界面或者選擇退出游戲。</p><p><b> 手機(jī)游戲設(shè)計(jì)</b></p><p>
61、 4.1 游戲基礎(chǔ)類(lèi)簡(jiǎn)介</p><p> (1)Canvas類(lèi)的主要功能在于對(duì)底層用戶(hù)事件的處理,包括按鍵事件和指針事件,他負(fù)責(zé)監(jiān)聽(tīng)這些事件,并做出相應(yīng)的處理。Canvas類(lèi)是Displayable類(lèi)的子類(lèi),使用setCurrent方法,將Canvas類(lèi)實(shí)現(xiàn)為當(dāng)前的屏幕。</p><p> Canvas類(lèi)本身并不提供具體繪制屏幕的過(guò)程,它需要依靠一個(gè)抽象方法向系統(tǒng)提供一個(gè)繪制屏幕的過(guò)
62、程,這個(gè)方法就是paint,它具體定義了圖形繪制的過(guò)程。當(dāng)Canvasa組件顯示在手機(jī)屏幕上時(shí),系統(tǒng)將調(diào)用子類(lèi)重新寫(xiě)的Paint(Graphics)方法完成界面的繪制,在這個(gè)方法中,我們可以使用系統(tǒng)的Graphics實(shí)例繪制游戲界面。</p><p> Canvas類(lèi)的另外一個(gè)重要功能就是獲得用戶(hù)的按鍵或指針信息,并且做出相應(yīng)的處理。</p><p> 當(dāng)用戶(hù)按下鍵盤(pán)上的按鍵并且放開(kāi)的
63、時(shí)候,會(huì)產(chǎn)生按鍵事件,并且自動(dòng)調(diào)用keyPress方法和keyRelease方法,并將按鍵的代碼作為參數(shù)傳遞給這兩個(gè)方法。每一個(gè)按鍵都有一個(gè)唯一的值,也稱(chēng)作鍵碼(KeyCode)。</p><p> MIDP規(guī)范定義了三種按鍵事件激活的方法。</p><p> Protected void keyPressed(int keyCode)———當(dāng)用戶(hù)按下某個(gè)按鍵的時(shí)候,keyPress
64、ed方法就被調(diào)用,keyCode表示的是用戶(hù)所按下的鍵的代碼,在Canvas類(lèi)中都有標(biāo)準(zhǔn)電話(huà)上每個(gè)鍵盤(pán)的相應(yīng)代碼常量。</p><p> Protected void keyReleased(int keyCode)———當(dāng)用戶(hù)釋放某一個(gè)按鍵的時(shí)候,keyReleased方法就被調(diào)用了。</p><p> Protected void keyRepeated(int keyCode
65、)———當(dāng)在很短的時(shí)間內(nèi),用戶(hù)重復(fù)多次按下同一個(gè)按鍵時(shí),就產(chǎn)生了重復(fù)按鍵事件,keyRepeated方法被調(diào)用,注意不是所有的設(shè)備都支持重讀按鍵事件,因此在使用該事件前要檢查一下,當(dāng)前的設(shè)備是不是支持重復(fù)按鍵事件。</p><p> 檢驗(yàn)方法:public boolean hasRepeateEvents();返回是ture表示系統(tǒng)是支持重復(fù)按鍵事件的,相反要是顯示false則表示系統(tǒng)不支持重復(fù)按鍵事件。<
66、;/p><p> (2)Layer是一個(gè)抽象類(lèi),用于表示游戲中的可見(jiàn)的一些元素。在Layer中定義了游戲可見(jiàn)元素共有的功能,比如游戲中元素的大小,位置,可見(jiàn)性,移動(dòng)的功能。</p><p> Public int getWidth()———返回可見(jiàn)元素的寬度。</p><p> Public int getHeight()———返回可見(jiàn)元素的高度。</p&g
67、t;<p> Public int getX()———返回可見(jiàn)元素的水平位置。</p><p> Public int getY()———返回可見(jiàn)元素的垂直位置。</p><p> Public void setPosition(int x,int y)———設(shè)置可見(jiàn)元素的位置。參數(shù) x,y表示的是水平和垂直位置。</p><p> Publi
68、c void setVisible(boolean b)———設(shè)置可見(jiàn)元素的可見(jiàn)性。參數(shù)b所表示的值是ture則表示元素可見(jiàn)。相反的要是表示的是false則表示不可見(jiàn)。</p><p> Public void move(int hd,int vd )———移動(dòng)當(dāng)前可見(jiàn)元素。 水平方向移動(dòng)hd個(gè)像素,hd如果取的是正數(shù),則表示向右移動(dòng),相反,hd取得是負(fù)數(shù),則表示向左移動(dòng);垂直方向移動(dòng)vd個(gè)像素,vd如果取的是
69、正數(shù),則表示向下移動(dòng),vd取的是負(fù)數(shù),則表示向上移動(dòng)。</p><p> 游戲中的可見(jiàn)元素必須由Layer的子類(lèi)創(chuàng)建,TiledLayer是用于創(chuàng)建游戲背景,TiledLayer所創(chuàng)建的游戲背景的尺寸不受設(shè)備屏幕大小的限制,并且使用很小的圖片就能創(chuàng)建一幅巨大的背景。</p><p> (3)Sprite類(lèi)</p><p> 游戲中具有這樣一種實(shí)體,它們由一系列
70、圖像表示,代表游戲中的主角,敵人,飛機(jī)等等。這些圖像被稱(chēng)為精靈(Sprite)。本游戲中的飛機(jī)就是用這種類(lèi)來(lái)做的。在MIDP規(guī)范中使用Sprite類(lèi)來(lái)表示這樣一類(lèi)對(duì)象,具有三種構(gòu)造方法。</p><p> a.圖像創(chuàng)建,原型為:public Sprite(image img);其中,img表示精靈的圖像。</p><p> b.由圖像創(chuàng)建,并且指定幀大小,原型為:public Spri
71、te(Image img ,int width ,int height);其中,img表示精靈的圖像,width表示幀的寬度,height 表示幀的高度。系統(tǒng)會(huì)自動(dòng)按照幀的寬度和高度自動(dòng)對(duì)圖像進(jìn)行分割,每個(gè)分割塊稱(chēng)為一幀,幀的編號(hào)從0開(kāi)始,自左向右,自上而下一次遞增。需要注意的是,圖像的高度和寬度必須是幀高度和寬度的整數(shù)倍,否則會(huì)產(chǎn)生IllagalArgumentException異常。</p><p> c.
72、由其他精靈創(chuàng)建的副本,原型為:public Sprite(Sprite s);其中,s表示的是其他精靈實(shí)例。</p><p> 由于每個(gè)軟件都有自身的特點(diǎn),因此不可能提供一個(gè)適合于所有軟件的的體系架構(gòu),但總的情況來(lái)看,必須要滿(mǎn)足以下特征:每個(gè)層由一組相關(guān)的類(lèi)或者是組建構(gòu)成,共同組合來(lái)實(shí)現(xiàn)特定的功能。每個(gè)層對(duì)上層公開(kāi)應(yīng)用程序接口A(yíng)PI,但是具體的實(shí)現(xiàn)對(duì)外透明的細(xì)節(jié)。 當(dāng)某個(gè)層已經(jīng)發(fā)生了變化,不變的只有它的API,
73、因而其他層不會(huì)受到影響。層與層之間體現(xiàn)的是一種由上到下的附屬關(guān)系。</p><p> 4.2 游戲系統(tǒng)的詳細(xì)設(shè)計(jì)</p><p> 一般的射擊類(lèi)游戲,代碼中出現(xiàn)的的許多涉及控制操作,顯示操作等比較復(fù)雜的內(nèi)容。</p><p> Command類(lèi)和CommandListener接口結(jié)合在一起,完成了LCDUI組件上命令事件的處理,實(shí)現(xiàn)了用戶(hù)與程序的交互。<
74、/p><p> Command對(duì)象可以添加到任何一個(gè)Displayable類(lèi)中。然后根據(jù)具體平臺(tái)的顯示方式提供給用戶(hù)。當(dāng)用戶(hù)激活一個(gè)帶有Command的用戶(hù)界面控件時(shí),這一事件就會(huì)被通知給與Displayable相關(guān)的CommandListener。</p><p> 1.mainMIDlet.java</p><p> 每個(gè)程序都必須有一個(gè)主類(lèi),本程序的主MID
75、let由mainMIDlet.java文件實(shí)現(xiàn),該類(lèi)由MIDlet派生而來(lái)。該程序通過(guò)調(diào)用相應(yīng)的函數(shù)來(lái)描述程序文件中的相關(guān)信息,并且控制整個(gè)程序的運(yùn)行??刂浦麄€(gè)游戲的開(kāi)始、結(jié)束、暫停和幫助,其中定義了CommandListener接口類(lèi),該類(lèi)監(jiān)視用戶(hù)鍵盤(pán)的活動(dòng)。</p><p> 2.MenuCanvas.java</p><p> 類(lèi)MenuCanvas繼承自Canvas類(lèi)。使用C
76、anvas默認(rèn)的keyPressed方法,獲取當(dāng)前按鍵信息,通過(guò)判斷按鍵信息,切換選擇按鈕。當(dāng)按下確認(rèn)鍵是根據(jù)選擇的具體功能項(xiàng),跳轉(zhuǎn)至不同的功能界面。</p><p> 3.BulletsSprite.java</p><p> 這是玩家子彈類(lèi), BulletsSprite類(lèi)繼承于Sprite類(lèi),主要實(shí)現(xiàn)了游戲中的子彈精靈,在敵機(jī)攻擊飛機(jī),和玩家控制飛機(jī)攻擊敵機(jī)時(shí)被調(diào)用。</p&
77、gt;<p> 4.PlayCanvas.java</p><p> 該類(lèi)主要是實(shí)現(xiàn)游戲的運(yùn)行界面。包含一個(gè)主線(xiàn)程,在線(xiàn)程中進(jìn)行游戲的界面繪制和碰撞檢測(cè),游戲邏輯判斷等等。游戲有兩個(gè)繪制方法用來(lái)繪制游戲界面,</p><p> 5.SplashCanvas.java</p><p> 該類(lèi)是顯示閃屏的,程序首先進(jìn)入此界面,默認(rèn)停留三秒鐘,然后啟
78、動(dòng)后臺(tái)初始化函數(shù),初始化各界面游戲資源。此模塊的主要作用是給系統(tǒng)提供充足的準(zhǔn)備游戲資源時(shí)間。 </p><p> 4.3 創(chuàng)建J2ME項(xiàng)目設(shè)計(jì)</p><p> 啟動(dòng)Eclipse,點(diǎn)擊“文件”,選擇“新建”,繼續(xù)“項(xiàng)目”,接著在選擇“J2ME”選項(xiàng),選擇“J2ME Midlet Suite”,單擊“下一步”按鈕,在彈出的對(duì)提示對(duì)話(huà)框中填寫(xiě)項(xiàng)目的名稱(chēng)和存放路徑,一般選擇默認(rèn)的路徑就可以
79、了。</p><p> 接著“下一步”,在提示的對(duì)話(huà)框中對(duì)支持的MIDP版本經(jīng)行指定。</p><p> 直接“下一步”按鈕,在屏幕的對(duì)話(huà)框中對(duì)JAVA構(gòu)建設(shè)置進(jìn)行定義,通常保持默認(rèn)。</p><p> 單擊“完成”按鈕,EclipseMe將自動(dòng)設(shè)置好項(xiàng)目及運(yùn)行環(huán)境。單擊剛才創(chuàng)建的項(xiàng)目,在右側(cè)即可看到生成的項(xiàng)目結(jié)構(gòu)。</p><p>
80、 4.4 MIDP應(yīng)用程序</p><p> MIDP中的基本機(jī)型單元叫做MIDlet。MIDlet是指一個(gè)擴(kuò)展了javax.Microedition</p><p> .midlet.MIDlet類(lèi)并且實(shí)現(xiàn)了若干方法,如startApp,pauseApp,destoryApp的類(lèi)。</p><p> startApp,pauseApp,destoryApp
81、三個(gè)方法構(gòu)成了一個(gè)控制MIDlet的生命期的狀態(tài)機(jī)。</p><p> startApp是用來(lái)啟動(dòng)或者重新激活一個(gè)MIDlet。在多種情況下系統(tǒng)都會(huì)調(diào)用startApp方法,不過(guò)此方法主要用途是獲取或者重新獲取MIDlet需要的資源,并且讓MIDlet準(zhǔn)備好處理來(lái)自諸如用戶(hù)界面和定時(shí)器的事件。注意startApp方法可以多次調(diào)用,首次啟動(dòng)時(shí)調(diào)用一次,每次MIDlet重新激活時(shí)又會(huì)被調(diào)用。</p>
82、<p> pauseApp是系統(tǒng)在要求MIDlet“暫?!钡臅r(shí)候調(diào)用的。不過(guò)一般來(lái)說(shuō),要將pauseApp方法和startApp方法聯(lián)合使用,以用來(lái)釋放盡可能多的資源,好讓更多的內(nèi)存和資源供其他MIDlet和原生程序使用。</p><p> destoryApp是最后一個(gè)MIDlet應(yīng)用程序必須實(shí)現(xiàn)的方法。這個(gè)方法是在MIDlet即將銷(xiāo)毀時(shí)由系統(tǒng)調(diào)用的,也可以由MIDlet自身間接調(diào)用此方法,以在退
83、出前完成清除工作。通常情況下罵我們使用destoryApp方法來(lái)執(zhí)行所有必要的清除工作,以釋放程序執(zhí)行過(guò)程中分配的全部資源(關(guān)閉圖形界面組建,網(wǎng)絡(luò)連接以及數(shù)據(jù)庫(kù)記錄等)。</p><p> 在導(dǎo)航器上單擊鼠標(biāo)右鍵,選擇“新建”,接著選擇“其他”,在打開(kāi)的對(duì)話(huà)框中選擇“J2ME”選項(xiàng),選中“J2ME Midlet”子項(xiàng)后點(diǎn)擊“下一步”按鈕。在出現(xiàn)的對(duì)話(huà)框中指定包。單擊“完成”按鈕后,EclipseMe將自動(dòng)生成框
84、架。</p><p> 第五章 游戲的具體實(shí)現(xiàn)</p><p> 5.1 主菜單背景界面系統(tǒng)</p><p> 游戲啟動(dòng)之后首先是出現(xiàn)一個(gè)閃屏,幫助加載后面的程序,減少用戶(hù)等待的時(shí)間。如圖5-1.進(jìn)過(guò)三秒以后定義了顯示主窗口,接著出現(xiàn)一個(gè)界面顯示新游戲,幫助,退出三個(gè)按鈕。(如圖5-2)。點(diǎn)擊進(jìn)入幫助按鈕時(shí),會(huì)出現(xiàn)一個(gè)幫助界面。(如圖5-3)并且在構(gòu)成的同時(shí)定
85、義了菜單里需要加載的圖片和文字的內(nèi)容,設(shè)定當(dāng)前窗體的定義和鍵盤(pán)監(jiān)聽(tīng)事件,當(dāng)監(jiān)聽(tīng)到上下方向按鈕鍵時(shí)會(huì)自動(dòng)調(diào)用不同的菜單顯示。在選取項(xiàng)目后點(diǎn)擊確認(rèn)會(huì)分別做出不同的處理。</p><p> 圖5-1 游戲開(kāi)機(jī)界面圖 圖5-2 菜單界面圖</p><p> 圖5-3 幫助界面的顯示圖</p><p> 5.2 子彈與
86、飛機(jī)界面系統(tǒng)</p><p> 在這個(gè)模塊中通過(guò)構(gòu)造函,初始化飛機(jī)和子彈等游戲資源,供游戲界面顯示使用。使用默認(rèn)GameCanvas提供getKeyStates函數(shù)來(lái)獲取當(dāng)前鍵盤(pán)信息。以位的形式返回鍵盤(pán)按鍵的按下與釋放的狀態(tài),bit位為1和0分別代表按下?tīng)顟B(tài)和釋放狀態(tài)。只需要此一個(gè)函數(shù)的返回值就可以返回所有鍵的狀態(tài)。同時(shí),這樣的機(jī)制也可檢測(cè)到幾個(gè)鍵同時(shí)按下的狀態(tài),從而提供斜向運(yùn)行等相應(yīng)功能(本程序沒(méi)有實(shí)現(xiàn)斜上運(yùn)
87、行功能)。玩家控制的飛機(jī)在程序運(yùn)行時(shí)應(yīng)進(jìn)行檢測(cè)是否飛出屏幕的范圍,如果飛出了手機(jī)屏幕,那就應(yīng)該重新的對(duì)玩家飛機(jī)的坐標(biāo)進(jìn)行設(shè)定。</p><p> 游戲中,需要時(shí)不時(shí)的平衡游戲的可玩性。當(dāng)玩家操控的飛機(jī)被擊中后,玩家飛機(jī)將有短暫無(wú)敵時(shí)間,在這段時(shí)間,不會(huì)進(jìn)行碰撞的檢測(cè),在屏幕的右上角同時(shí)還會(huì)出現(xiàn)無(wú)敵時(shí)間的的進(jìn)度條。(如圖5-4)</p><p> 在設(shè)計(jì)時(shí),為了方便敵機(jī)對(duì)玩家進(jìn)行攻擊,使
88、游戲的可玩性增強(qiáng)。敵機(jī)會(huì)在隨機(jī)的時(shí)候轉(zhuǎn)變方向向或者是發(fā)射子彈,與此同時(shí),程序還會(huì)檢測(cè)敵機(jī)是否飛出了界外。</p><p> 圖5-4 無(wú)敵時(shí)間進(jìn)度條顯示圖 </p><p><b> 5.3 鍵盤(pán)的響應(yīng)</b></p><p> 在這個(gè)程序里,玩家對(duì)飛機(jī)的控制主要是通過(guò)鍵盤(pán)的方向鍵操作完成的,當(dāng)程序監(jiān)聽(tīng)
89、到了上下左右方向鍵盤(pán)的活動(dòng)時(shí),就會(huì)調(diào)用對(duì)應(yīng)的按鍵方法,使得玩家操控的飛機(jī)原來(lái)的坐標(biāo)值發(fā)生變動(dòng),然后通過(guò)重新畫(huà)圖,來(lái)實(shí)現(xiàn)飛機(jī)的飛行移動(dòng)位置和導(dǎo)彈的發(fā)射等。函數(shù)getGameAction是直接從常數(shù)1轉(zhuǎn)化為常數(shù)。參數(shù)是玩家通過(guò)鍵盤(pán)所輸入的值,返回值是響應(yīng)的鍵盤(pán)代碼。</p><p> 在這里Canvas類(lèi)實(shí)現(xiàn)了對(duì)keyPressed和keyReleased方法的監(jiān)聽(tīng)。keyPressed是用戶(hù)按下鍵實(shí)現(xiàn)的方法,ke
90、yReleased是用戶(hù)使用的按鍵抬起后執(zhí)行的方法。而前面說(shuō)到的getGameAction(keyCode)方法可以讓程序知道我們現(xiàn)在點(diǎn)擊的是哪個(gè)按鍵。</p><p> 5.4 子彈的發(fā)射爆炸控制</p><p> 飛機(jī)的子彈是有9個(gè)元素的精靈數(shù)組,表示的意思是小飛機(jī)每一次可以發(fā)射3組9發(fā)子彈,在一個(gè)完成的游戲中,給予玩家的飛機(jī)相應(yīng)的根據(jù)關(guān)卡來(lái)提供。飛機(jī)的性能差別體現(xiàn)在所發(fā)射的子彈有
91、著不同的射程。因?yàn)楸居螒蛑辉O(shè)置了一關(guān),所以子彈速度設(shè)定的差別就沒(méi)有體現(xiàn)出來(lái)。</p><p> 當(dāng)玩家一次發(fā)射了3組子彈,必須要等到這3組子彈消失時(shí),玩家才能再次發(fā)射子彈。</p><p> 程序使用了每組子彈的第一發(fā)子彈與敵機(jī)進(jìn)行檢測(cè)碰撞的精靈,于此同時(shí)在第一發(fā)子彈中設(shè)置標(biāo)志位,如果飛機(jī)子彈將敵機(jī)擊中了,則當(dāng)敵機(jī)消失的時(shí)候,爆炸的圖片就會(huì)被調(diào)用到屏幕上去替代原來(lái)子彈的圖片。當(dāng)玩家的飛
92、機(jī)發(fā)射第二組子彈的時(shí)候,屏幕上就會(huì)將子彈的圖片重新替換回來(lái)。</p><p> 5.5 飛機(jī)與子彈或者其他事物碰撞檢測(cè)</p><p> 在許多的游戲中都需要對(duì)各種碰撞情況經(jīng)行處理,如飛機(jī)的子彈打中了另外的飛機(jī)。在MIDP2.0中的Sprite類(lèi)有很方便的函數(shù)來(lái)直接處理這類(lèi)問(wèn)題。</p><p> 檢測(cè)當(dāng)前精靈是否與圖像發(fā)生碰撞,原型為:</p>
93、<p> Public Boolean collidesWith(Image img ,int x,int y,Boolean level);</p><p> 其中,img表示帶檢測(cè)的圖像實(shí)例,x和y表示img實(shí)例所處的位置,level表示檢測(cè)級(jí)別,ture表示經(jīng)行像素級(jí)檢測(cè),false表示經(jīng)行邊界級(jí)檢測(cè)。該方法表示當(dāng)前精靈是否參與img指定的圖像發(fā)生碰撞。</p><p&g
94、t; 檢測(cè)當(dāng)前精靈是否與其他精靈發(fā)生碰撞,原型為:</p><p> Public Boolean collidesWith(Sprite s ,Boolean level);</p><p> 其中,s表示待檢測(cè)的精靈實(shí)例,level表示檢測(cè)級(jí)別,ture表示進(jìn)行像素級(jí)檢,flase表示進(jìn)行邊界檢測(cè),該方法表示當(dāng)前精靈是否參與s指定的精靈發(fā)生碰撞。</p><p
95、> 最理想的碰撞,是完全按照多邊形的外形和運(yùn)行路徑規(guī)劃一個(gè)小的范圍,在這個(gè)范圍當(dāng)中尋找會(huì)產(chǎn)生阻擋的的物體。當(dāng)物體產(chǎn)生阻擋以后,運(yùn)動(dòng)的物體都必須在那個(gè)位置產(chǎn)生一個(gè)碰撞的事件。完美的想法跟實(shí)際的實(shí)現(xiàn)上都有一些困難,如果我們這么做,效率就會(huì)很低。</p><p> 最簡(jiǎn)單的方法就是尋找物體的中心點(diǎn),然后用這個(gè)中心點(diǎn)來(lái)畫(huà)一個(gè)圓,如果是3D圖形我們就要畫(huà)一個(gè)球,本游戲是個(gè)2D平面游戲,因此檢測(cè)時(shí),我們檢測(cè)兩個(gè)兩個(gè)
96、物體半徑相加是否大于這個(gè)物體圓心的實(shí)際距離[11]。 </p><p> 5.6 玩家四次游戲機(jī)會(huì)的實(shí)現(xiàn)</p><p> 據(jù)游戲設(shè)置,玩家在每關(guān)中有都有四次機(jī)會(huì),當(dāng)玩家飛機(jī)被擊中或撞擊爆炸后,程序首先檢測(cè)整型變量playerno的值,并根據(jù)playerno的值決定屏幕右上角所畫(huà)玩家飛機(jī)標(biāo)志的數(shù)量,playerno的初始值設(shè)定為3,由于碰撞就會(huì)相對(duì)的減去1,所以玩家共有4次機(jī)會(huì)。當(dāng)
97、playerno<0時(shí),游戲顯示結(jié)束,同時(shí)將變量pver賦值變?yōu)?,在render()或renderboss()函數(shù)中,over=1表示在屏幕上顯示GAMEOVER等相關(guān)信息。同時(shí),將整型變量inputno賦植為1,至此手機(jī)的方向鍵失去作用,從而來(lái)消除玩家可以控制爆炸圖像移動(dòng)這個(gè)BUG。相對(duì)的整型變量pzbz賦植為1,用此來(lái)消除玩家爆炸圖像繼續(xù)與敵人進(jìn)行碰撞檢測(cè)這個(gè)BUG。</p><p> 5.7 游戲
98、中的獎(jiǎng)勵(lì)和飛機(jī)的相關(guān)行為</p><p> Sboss可根據(jù)玩家飛機(jī)位置自動(dòng)飛行,初始時(shí),將sbz值設(shè)置為2,然后在下面通過(guò)if語(yǔ)句判斷sbz的值來(lái)設(shè)置sboss自動(dòng)飛行軌跡。</p><p> Sboss首先會(huì)根據(jù)玩家飛機(jī)的位置對(duì)sbmove賦值,其取值為1、2、3、4分別代表玩家飛機(jī)在sboss的上下左右四個(gè)方向上,分別有四個(gè)if語(yǔ)句來(lái)進(jìn)行判斷,在這4個(gè)if語(yǔ)句中,要設(shè)置標(biāo)志位(s
99、movebz==0)。主要是為了防止sboss不斷根據(jù)玩家飛機(jī)的位置來(lái)不斷的調(diào)整飛行軌跡,這樣sboss難免就成了追蹤機(jī),使得游戲的可操作性大大減小。所以在程序首次根據(jù)玩家飛機(jī)的位置設(shè)定好飛行軌跡時(shí),便不再改變。</p><p> 在玩家操控的飛機(jī)子彈擊中sboss后,使用sboss.setFrame(1)將飛機(jī)設(shè)置為紅色飛機(jī)圖片,在本次結(jié)束前,使用sboss.setFrame(0)飛機(jī)的顏色變?yōu)榫G色,程序中設(shè)
100、定的是每過(guò)1/20秒重新畫(huà)一次,這樣就得到了飛機(jī)變色效果。如圖5-5。</p><p> 圖5-5飛機(jī)變色前后圖片</p><p> 5.8 普通敵人的相關(guān)屬性</p><p> 在程序中首先會(huì)定義兩個(gè)Random()類(lèi)對(duì)象aik和aip,用來(lái)生成隨機(jī)數(shù)字,通過(guò)產(chǎn)生的隨機(jī)數(shù)字來(lái)設(shè)置飛機(jī)的飛行方向,另外還定義了ai和aipp兩個(gè)整型變量。Ai的值即代表飛機(jī)隨機(jī)飛
101、行方向。使用switch(ai)語(yǔ)句在程序的主線(xiàn)程中判斷飛機(jī)下一次的出現(xiàn)情況,為了避免重復(fù)出現(xiàn)的效果,使用語(yǔ)句ai=aik.nextInt()%4,以隨機(jī)出現(xiàn)0,1,2,3四個(gè)整數(shù)用來(lái)表示敵機(jī)的四個(gè)不同的飛行方向。</p><p> 使用 aipp=aip.nextInt()%5取得隨機(jī)數(shù)0到5的隨機(jī)數(shù)賦值給aipp,同時(shí)根據(jù)下面三條語(yǔ)句來(lái)設(shè)置飛機(jī)的出現(xiàn)位置:</p><p> j0.
102、setPosition(100-aipp*30,planepoup+24);</p><p> j1.setPosition(100,planepoup);</p><p> j2.setPosition(100+aipp*30,planepoup-24);</p><p> 取屏幕高度的八分之一getHeight()/8賦給整型變量kkk,每次循環(huán)kkk-1
103、,當(dāng)kkk<=1時(shí)飛機(jī)改變方向,當(dāng)aipp>0時(shí),飛機(jī)向左下方運(yùn)行,使用語(yǔ)句setFrame(0)設(shè)置飛機(jī)圖片,獲取逼真的向左下移動(dòng)的效果,同時(shí)使用move(-3,3)將飛機(jī)向左下方移動(dòng)3個(gè)像素距離。當(dāng)aipp<0時(shí),向右下方運(yùn)動(dòng),實(shí)現(xiàn)方法與上述方法基本相同。</p><p> 情況2:初始位置設(shè)置方法同情況1。當(dāng)kkk〈0時(shí),飛機(jī)掉頭向上飛,其中setFrame(3)來(lái)改變飛機(jī)圖片,使用 m
104、ove(-4,0)是飛機(jī)向上移動(dòng)4個(gè)像素距離。</p><p> 情況3:初始位置設(shè)置方法同情況1。當(dāng)kkk〈0時(shí),飛機(jī)轉(zhuǎn)向左方向。設(shè)置情況3的原因是為了更多的隨機(jī)位置出現(xiàn)敵機(jī)。</p><p> 情況4:初始位置設(shè)置方法同情況1基本相同。但其中的飛機(jī)j1具有跟蹤能力,其實(shí)現(xiàn)方法如下:使用2個(gè)if語(yǔ)句if(j1.getX()<c1.getX())、if(j1.getX()>
105、c1.getX())判斷J1在玩家飛機(jī)的左側(cè)或右側(cè),并且實(shí)時(shí)的根據(jù)飛機(jī)的相對(duì)位置,通過(guò)setFrame()改變飛機(jī)的圖片信息和move()改變飛機(jī)的位置,使用如下語(yǔ)句</p><p> if((j1.getX()<c1.getX())&&((j1.getX()+48)>c1.getX())&&(j1.getY()<c1.getY()))判斷玩家飛機(jī)是否在j1的下
106、方,當(dāng)玩家飛機(jī)處于在j1的下方時(shí),J1就向玩家飛機(jī)發(fā)射子彈。</p><p> 以上四種情況的最后,都需要使用隨機(jī)函數(shù)的nextInt()方法產(chǎn)生新的隨機(jī)數(shù)賦值給ai,aipp。</p><p> 另外在程序中還定義了一個(gè)整型數(shù)組jb[4],對(duì)應(yīng)著4種可能出現(xiàn)的情況的標(biāo)志位。</p><p> 之后,玩家飛機(jī)檢和每發(fā)子彈進(jìn)行的碰撞都需要檢測(cè),如果碰撞,則子彈就
107、北設(shè)置為不顯示。同時(shí)也要對(duì)敵機(jī)與玩家飛機(jī)和玩家飛機(jī)發(fā)出的子彈進(jìn)行碰撞檢測(cè),當(dāng)發(fā)生碰撞時(shí),繪制爆炸效果,同時(shí)將此飛機(jī)和子彈移除屏幕。</p><p> 5.9 運(yùn)動(dòng)中的如何讓白云實(shí)現(xiàn)</p><p> 為了是游戲打到逼真的效果,程序在游戲過(guò)程中加入了白云精靈,定義了一個(gè)sprite數(shù)組cloud,由于白云必須漂浮在飛機(jī)之上,所以在實(shí)現(xiàn)添加白云精靈時(shí)必須使用如下兩個(gè)方法之一,1.在圖層控制
108、中最先加入白云精靈。2.通過(guò)插入圖層的方法,將白云精靈插入至最高圖層位置顯示。</p><p> 程序中設(shè)定白云數(shù)為5。首先設(shè)置白云的初始位置,其語(yǔ)句如下:</p><p> cloud[0].setPosition(25,planepoup-(65));</p><p> cloud[1].setPosition(80,planepoup-(140));&l
109、t;/p><p> cloud[2].setPosition(112,planepoup-(90));</p><p> cloud[3].setPosition(175,planepoup-(200));</p><p> cloud[4].setPosition(223,planepoup-(70));</p><p> 其原理為:將
110、屏幕的X數(shù)軸和Y數(shù)軸各分成5份,即在X軸的5個(gè)范圍內(nèi)每個(gè)范圍產(chǎn)生一處白云,在Y軸的范圍也只能出現(xiàn)一朵白云。通過(guò)生成隨機(jī)數(shù)來(lái)生成白云的起始位置。</p><p> 在程序啟動(dòng)運(yùn)行后,調(diào)用move(0,1)令白云的位置變動(dòng),因?yàn)榘自频奈恢瞄_(kāi)始設(shè)定在屏幕的各個(gè)區(qū)域,因而白云離開(kāi)手機(jī)屏幕的時(shí)間是不一樣的,這樣使得界面更逼真,同時(shí)在程序的執(zhí)行過(guò)程中調(diào)用if(cloud[].getY()>planepo)來(lái)判斷白云位
111、置是否處于屏幕界面之外。接著顯示是真的就調(diào)用cloud[].setPosition(cloudposition*40,planepoup)再次初始化此云朵的位置,在次方法中,使用如下語(yǔ)句cloudposition=aicloud.nextInt()%5,來(lái)隨機(jī)生成云朵的初始化位置。乘以40表示其在X軸出現(xiàn)的范圍是多少,如某次初始化時(shí),cloud[0]、cloud[1]、cloud[2]、cloud[3]、 cloud[4]乘以的值分別為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于j2me環(huán)境的手機(jī)游戲軟件的開(kāi)發(fā)【文獻(xiàn)綜述】
- 基于j2me環(huán)境的手機(jī)游戲軟件的開(kāi)發(fā)【開(kāi)題報(bào)告】
- 電子與信息工程畢業(yè)論文基于j2me環(huán)境的手機(jī)功能軟件開(kāi)發(fā)
- 畢業(yè)論文---- 基于j2me的手機(jī)游戲開(kāi)發(fā)
- j2me畢業(yè)論文-- j2me手機(jī)彩票軟件開(kāi)發(fā)
- 畢業(yè)論文范文——基于j2me的手機(jī)游戲開(kāi)發(fā) (2)
- 基于j2me平臺(tái)的手機(jī)游戲開(kāi)發(fā)
- 基于j2me平臺(tái)的手機(jī)游戲開(kāi)發(fā)
- 畢業(yè)設(shè)計(jì)---基于j2me的手機(jī)游戲開(kāi)發(fā)
- 基于j2me平臺(tái)的手機(jī)應(yīng)用開(kāi)發(fā)-畢業(yè)論文
- j2me手機(jī)游戲的開(kāi)發(fā)-beckhamgoal
- 基于j2me平臺(tái)的手機(jī)應(yīng)用開(kāi)發(fā)-畢業(yè)論文
- j2me游戲畢業(yè)論文
- java基于j2me的手機(jī)游戲開(kāi)發(fā)(論文+源代碼)
- 基于j2me手機(jī)推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn)[畢業(yè)論文]
- 基于J2ME的手機(jī)游戲設(shè)計(jì)開(kāi)發(fā).pdf
- 基于J2ME的手機(jī)游戲開(kāi)發(fā)定稿.doc
- 基于J2ME的手機(jī)游戲開(kāi)發(fā)與實(shí)現(xiàn).pdf
- 基于J2ME的手機(jī)游戲開(kāi)發(fā)定稿.doc
- 基于J2ME的手機(jī)游戲開(kāi)發(fā)定稿.doc
評(píng)論
0/150
提交評(píng)論