




已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
手機(jī)吞吃蛇游戲的設(shè)計(jì)與開發(fā)畢業(yè)設(shè)計(jì)(論文) 手機(jī)吞吃蛇游戲的設(shè)計(jì)與開發(fā) 論文作者姓名: 申請(qǐng)學(xué)位專業(yè): 申請(qǐng)學(xué)位類別: 指導(dǎo)教師姓名,職稱,: 論文提交日期: 手機(jī)吞吃蛇游戲的設(shè)計(jì)與開發(fā) 要 摘J2ME(Java 2 Micro Edition) 是近年來隨著各種不同設(shè)備,尤其是移動(dòng)通信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)新的開發(fā)技術(shù)。它定位在消費(fèi)性電子產(chǎn)品的應(yīng)用上,對(duì)設(shè)備的智能化、多樣化,提供了革命性的解決方案,并因其“Write Once, run anywhere”的Java特性而提高開發(fā)的效率。 隨著手機(jī)的日益普及、JAVA功能在移動(dòng)設(shè)備上的實(shí)現(xiàn),JAVA應(yīng)用程序產(chǎn)生的手機(jī)增值服務(wù)逐漸體現(xiàn)出其影響力,對(duì)豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。本文主要介紹了一款手機(jī)吞吃蛇游戲,本設(shè)計(jì)著眼于J2ME技術(shù)的應(yīng)用,采用JDK1.6,NetBeans 5.5作為開發(fā)工具,使用WTK2.5作為模擬器測(cè)試,開發(fā)一款吞吃蛇的手機(jī)游戲程序。本程序?qū)⒗仙俳砸说慕?jīng)典作品移植到手機(jī)上來,為更流行的硬件平臺(tái)提供應(yīng)用軟件。這些都將能很好的滿足未來人們對(duì)手機(jī)游戲的需求。吞吃蛇游戲基于JAVA平臺(tái)編寫,滿足一般手機(jī)用戶的娛樂需求。 關(guān)鍵詞: J2ME;手機(jī)游戲;Java,吞吃蛇 The Design and the development of the gobbled snake mobile game Abstract J2ME (Java 2 Micro Edition) was a new development technology which born based on each different kinds of equipment, especially the rapid development of mobile communication equipment. It locates in the application of the expensive electronic products, has provided the revolutionary solution to the intellectualization and the diversification of the equipment and enhances the development the efficiency because of the Java characteristic that Write Once, run anywhere With the popularization of the handset and the realization of the JAVA function on the mobile equipment The increment service of the handset which produced by the JAVA application procedure gradually manifests its influence,and plays a noticeable role on riching peoples life content and providing the quick information.This thesis mainly introduced a gobbled snake game in the handset, this design focuses on the application of the J2ME technology, takes JDK1.6, NetBeans5.5 as the developmentkit, uses WTK2.5 as the simulator to test, develops a handset game procedure of the gobbled snake game. This procedure transplants the classical work which both good for young and old to the handset, provides the application software for the more popular hardware platform. These will be able to satisfy the peoples demands to the handsets games. The gobbled snake game based on the JAVA platform compilation, satisfied the entertainment demand of the common handset user. Keyword: J2ME; Handset game; Java, the gobbled snake 目 錄 論文總頁數(shù):21頁 1引 言 . 1 2手機(jī)吞吃蛇游戲系統(tǒng)分析 . 2 2.1系統(tǒng)需求分析 . 2 2.1.1游戲背景 . 2 2.1.2游戲功能 . 2 2.1.3游戲的操作性要求: . 3 2.1.4 游戲的實(shí)用性 . 3 2.2系統(tǒng)設(shè)計(jì)目標(biāo) . 3 2.2.1游戲設(shè)計(jì)思想 . 3 2.2.2 模塊框架結(jié)構(gòu) . 4 2.2.3 關(guān)鍵技術(shù)問題 . 4 2.3系統(tǒng)開發(fā)環(huán)境 . 5 2.4系統(tǒng)運(yùn)行環(huán)境 . 5 3貪吃蛇游戲系統(tǒng)設(shè)計(jì) . 6 3.1程序流程 . 6 3.1.1結(jié)構(gòu)構(gòu)造 . 6 3.1.2系統(tǒng)流程圖 . 6 3.1.3系統(tǒng)流程說明 . 7 3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) . 8 4系統(tǒng)實(shí)現(xiàn)及核心代碼. 11 4.1系統(tǒng)實(shí)現(xiàn) . 11 4.2 核心代碼 . 13 5系統(tǒng)測(cè)試 . 15 5.1測(cè)試方法 . 15 5.2 測(cè)試結(jié)果 . 15 5.3 測(cè)試結(jié)論 . 17 5.4 程序運(yùn)行截圖 . 17 結(jié) 論 . 19 參考文獻(xiàn) . 19 致 謝 . 20 聲 明 . 21 1引 言 在信息社會(huì)中,手機(jī)及其他無線設(shè)備越來越多的走進(jìn)普通百姓的工作和生活,隨著信息網(wǎng)絡(luò)化的不斷進(jìn)展,手機(jī)及其他無線設(shè)備上網(wǎng)絡(luò)勢(shì)在必行。但是傳統(tǒng)手機(jī)存在以下弊端: 1.傳統(tǒng)手機(jī)出廠時(shí)均由硬件廠商固化程序,程序不能增加、刪除,有了錯(cuò)誤也不能更新、修改,若要增加新功能必須另換一部手機(jī)。 2.傳統(tǒng)手機(jī)訪問互聯(lián)網(wǎng)是通過WAP,所有網(wǎng)絡(luò)資源必須接通網(wǎng)絡(luò)才能在線訪問,非常耗時(shí)、費(fèi)用亦很高。 而JAVA技術(shù)在無線應(yīng)用方面的優(yōu)勢(shì)非常明顯: 1.應(yīng)用程序可按需下載,而不是購(gòu)買由硬件商提供的套件,可升級(jí)空間大。 2.JAVA技術(shù)提供了一個(gè)類庫(kù),它使的應(yīng)用開發(fā)商可以創(chuàng)建更為直覺、豐富的用戶界面; 3.JAVA技術(shù)使網(wǎng)絡(luò)帶寬的應(yīng)用更為有效,因?yàn)閼?yīng)用程序可以下載到器件上,并在本地運(yùn)行,僅僅是在連接到服務(wù)器時(shí)才會(huì)占用網(wǎng)絡(luò)帶寬。 基于以上分析,JAVA手機(jī)將是未來手機(jī)的發(fā)展方向,是業(yè)界的熱點(diǎn)。 J2ME(Java 2 Micro Edition) 是近年來隨著各種不同設(shè)備,尤其是移動(dòng)通信設(shè)備的飛速發(fā)展而誕生的一項(xiàng)新的開發(fā)技術(shù)。它定位在消費(fèi)性電子產(chǎn)品的應(yīng)用上,對(duì)設(shè)備的智能化、多樣化,提供了革命性的解決方案,并因其“Write Once, run anywhere”的JAVA特性而提高開發(fā)的效率。 JAVA手機(jī)游戲在國(guó)內(nèi)大約開始于2004年,由于市場(chǎng)不規(guī)范,出產(chǎn)了一批非常劣質(zhì)的手機(jī)游戲,不過那些開發(fā)商和運(yùn)營(yíng)商都從中掙到了錢。由于JAVA語言本身的特點(diǎn),JAVA游戲不會(huì)受到手機(jī)平臺(tái)的太大的限制,所以很是受歡迎。本文就將以計(jì)算機(jī)網(wǎng)絡(luò)為載體,利用JAVA技術(shù)對(duì)吞吃蛇游戲的功能模塊做一次嘗試。 豐富的社會(huì)交互: 不管一個(gè)游戲設(shè)計(jì)得多好,只要玩家找到了它的根本模式或者玩完了所有的游戲路徑很快就會(huì)厭煩這個(gè)游戲。對(duì)于一個(gè)基于訂閱的游戲,重要的是與別的玩家合作以增強(qiáng)所玩游戲的智力和隨機(jī)性。在今天紛繁復(fù)雜的多玩家游戲中具有豐富社會(huì)交互的游戲證明是成功的。 利用手機(jī)技術(shù)的優(yōu)點(diǎn):巨額的手機(jī)技術(shù)研發(fā)費(fèi)用都花在提高設(shè)備和網(wǎng)絡(luò)的可用性和可靠性上面。因此,手機(jī)設(shè)備硬件和網(wǎng)絡(luò)協(xié)議與桌面/控制臺(tái)世界(如全球定位系統(tǒng)(GPS)擴(kuò)展、條形碼掃描儀、和短消息服務(wù)(SMS)/多媒體信息服務(wù)(MMS)通訊)有著非常大的差別。好的手機(jī)游戲應(yīng)該利用那些更新的設(shè)備特征和網(wǎng)絡(luò)基礎(chǔ)設(shè)備的優(yōu)點(diǎn)。 游戲是人們生活中不可或缺的,一個(gè)人從小到大,真正伴隨他成長(zhǎng)的東西,游戲占有著很重要的地位.不論是一個(gè)玩具,還是一個(gè)能和伙伴一起開心的小游戲,第 1 頁 共 21 頁 都是能給我們留下很多美好的回憶.所以不論是什么樣的游戲,只要它能迎合人們內(nèi)心的某種需求,它的市場(chǎng)總會(huì)是好的. 2手機(jī)吞吃蛇游戲系統(tǒng)分析 2.1系統(tǒng)需求分析 2.1.1游戲背景 貪吃蛇,是個(gè)簡(jiǎn)單的小游戲,但卻能給人以放松,讓我們從繁重的日常生活中解脫出來.而只有我們的身心得到了娛樂才能更好的投入到新的工作.現(xiàn)在的人,不管是已經(jīng)工作的,還是還未進(jìn)入社會(huì)的學(xué)生,都面臨著很大的壓力,而這樣一款能讓我們隨時(shí)隨地都能享受的游戲,其魅力還是不可估量的. 貪吃蛇,之所以取這樣的名字,去用意還是很明顯的.貪吃蛇其實(shí)并不貪,它是人不斷向前追求的象征.就像現(xiàn)代的人只有不斷努力向前才能得到自己想要的.而食物也是隨機(jī)出現(xiàn)的,就像現(xiàn)在社會(huì)存在的機(jī)會(huì),而我們只有找好自己的目標(biāo)才能成功. 雖然現(xiàn)在市面上存在著各種各樣的游戲版本,可是貪吃蛇其市場(chǎng)還是相當(dāng)大的.因?yàn)樗奶厥庠谟谒芪烁钊?愛不釋手.隨著游戲速度不斷加快,其刺激性也更強(qiáng). 可以說該游戲的優(yōu)勢(shì)在于它的簡(jiǎn)單易行,不論是手機(jī),還是小游戲機(jī),都能很快順利的運(yùn)行.對(duì)于在外忙碌的人,不可能花費(fèi)大量時(shí)間在娛樂上,大型游戲是行不通的,這樣的小游戲剛好迎合了他們的需求. 手機(jī)吞吃蛇游戲基于JAVA平臺(tái)編寫,采用J2ME技術(shù)開發(fā)的一款手機(jī)游戲。手機(jī)游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。JAVA是基于虛擬機(jī)的半解釋型編譯系統(tǒng),其執(zhí)行效率較C+等完全編譯后的程序會(huì)低很多,程序如果不進(jìn)行精簡(jiǎn)和優(yōu)化,將可能導(dǎo)致運(yùn)行的不流暢。游戲的結(jié)束、開始、動(dòng)態(tài)信息畫面作為構(gòu)成一個(gè)程序都是必不可少的重要部分。良好的用戶界面更是吸引用戶的硬指標(biāo),相關(guān)的美術(shù)構(gòu)圖和人性化設(shè)置也需要有一定的考慮。 2.1.2游戲功能 本游戲?qū)τ螒蚵曇舻目刂?、游戲等?jí)的控制、最高分的記錄、游戲暫停、游戲重新開始、游戲結(jié)束這些功能都要求能在手機(jī)模擬器上運(yùn)行。 第 2 頁 共 21 頁 貪食蛇的玩法很簡(jiǎn)單,用鍵盤上的方向鍵控制貪食蛇的運(yùn)動(dòng)方向,游戲的目的是控制貪食蛇吃掉更多的食品,但是不能碰到四周的墻壁,也不能讓貪食蛇的首尾相接,否則游戲失敗。游戲最終是要在手機(jī)上允許。能夠使用鍵盤控制貪食蛇的運(yùn)動(dòng),生成新的點(diǎn),并且能夠根據(jù)點(diǎn)數(shù)進(jìn)行記分. 2.1.3游戲的操作性要求: 易于學(xué)習(xí): 既然手機(jī)游戲面向的是普通消費(fèi)者而不是計(jì)算機(jī)專家,那么他們不可能深入的學(xué)習(xí)游戲技巧。消費(fèi)者不會(huì)花幾個(gè)小時(shí)去研究一個(gè)3元的手動(dòng)操作的游戲。保持游戲的簡(jiǎn)單是最基本的要求。 可中斷性: 多任務(wù)處理是手機(jī)生活方式的基本特征。手機(jī)用戶常常在任務(wù)(如等一個(gè)電子郵件或者等車)之間有一小段時(shí)間。而游戲、日歷管理、通訊和工作數(shù)據(jù)訪問使用的是同一個(gè)設(shè)備。所以一個(gè)好的手機(jī)游戲應(yīng)該提供短時(shí)間的娛樂功能,并且允許用戶在游戲和工作模式之間順利切換。 2.1.4 游戲的實(shí)用性 豐富的社會(huì)交互: 不管一個(gè)游戲設(shè)計(jì)得多好,只要玩家找到了它的根本模式或者玩完了所有的游戲路徑很快就會(huì)厭煩這個(gè)游戲。重要的是與別的玩家合作以增強(qiáng)所玩游戲的智力和隨機(jī)性。在今天紛繁復(fù)雜的多玩家游戲中具有豐富社會(huì)交互的游戲證明是成功的。 2.2系統(tǒng)設(shè)計(jì)目標(biāo) 2.2.1游戲設(shè)計(jì)思想 本科期間做過很多課程設(shè)計(jì),大多規(guī)模很小。在數(shù)據(jù)庫(kù)、各種應(yīng)用軟件和游戲中,我仍覺得對(duì)游戲的設(shè)計(jì)有極大的熱情。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過無數(shù)次的調(diào)試、修改后,能最終看到成品,有無比自豪的心情。大學(xué)期間做過圖書館管理程序等簡(jiǎn)單的數(shù)據(jù)庫(kù)管理系統(tǒng)的課程設(shè)計(jì),思想大致相似,變化范圍有限,沒有太多自己可發(fā)揮的余地。大家作品的最終結(jié)果都離不開同一個(gè)模式。相比一些數(shù)據(jù)庫(kù)軟件,游戲的設(shè)計(jì)有很多人情色彩和藝術(shù)思想的發(fā)揮,正式商業(yè)的軟件的人性化界面和各個(gè)游戲間迥異的結(jié)構(gòu)每每會(huì)讓人有去開發(fā)的沖動(dòng)。綜合運(yùn)用以前所學(xué)習(xí)的知識(shí),設(shè)計(jì)一個(gè)JAVA手機(jī)游戲,并能實(shí)現(xiàn)以下的功能:游戲聲音的控制、游戲等級(jí)的控制、最高分的記錄、游戲暫停、游戲重新開始、游戲的結(jié)束。 手機(jī)已經(jīng)與現(xiàn)代生活方式緊緊地結(jié)合在一起。他們是最普遍攜帶的個(gè)人用品中僅次于鑰匙和錢包的東西。傳統(tǒng)的臺(tái)式機(jī)游戲?qū)⒛繕?biāo)鎖定在低級(jí)趣味的人和青少年身上,而手機(jī)游戲則每個(gè)人都可以訪問的到隨時(shí),隨地。盡管每個(gè)手機(jī)游戲都不貴,但是巨大的使用量(如:每人每星期一個(gè)新游戲)將使得這個(gè)市場(chǎng)商第 3 頁 共 21 頁 機(jī)無限。但是,對(duì)于開發(fā)者來說,將控制臺(tái)游戲遷移到手機(jī)游戲工程很大。因?yàn)樗麄兯嫦虻膶?duì)象、生活方式和分布式模型都有著極大的區(qū)別。 由于J2ME平臺(tái)被認(rèn)為是最杰出的手機(jī)游戲平臺(tái),它為開發(fā)者、設(shè)備制造商、網(wǎng)絡(luò)通信公司和消費(fèi)者廣泛接受。它有一些非常重要的特征對(duì)所有組織都有益。因此本文采用它來進(jìn)行設(shè)計(jì)。利用Java撰寫手機(jī)上的程序當(dāng)然有其缺點(diǎn),最廣為人知的可能就是執(zhí)行效率的問題,Java在執(zhí)行速度這個(gè)議題上一直讓人詬病。不過筆者認(rèn)為,隨著技術(shù)的發(fā)達(dá),將會(huì)有更快更省電的嵌入系統(tǒng)專用CPU出現(xiàn),Java One中也傳出將針對(duì)J2ME開發(fā)專用芯片,讓Java在 手機(jī)上的程序可以跑得更快,因此效率上的總是其實(shí)是可以忽略的。更何況,當(dāng)Sun在設(shè)計(jì)J2ME的時(shí)候,也用了很多方式企圖加快Java 在手機(jī)上的執(zhí)行速度。 2.2.2 模塊框架結(jié)構(gòu) 貪食蛇游戲是一條不停游動(dòng)的蛇不斷的捕食來達(dá)到自身的增長(zhǎng),但是若蛇碰到自身的身體或者碰到了任何障礙物,則游戲結(jié)束。 設(shè)計(jì)初期要做的工作 尋找規(guī)律,建立對(duì)象模型: 首先從物理的角度來分析蛇的運(yùn)動(dòng)規(guī)律。它是蠕動(dòng)的,像水一樣流動(dòng)。他有個(gè)特性就是身體的每一個(gè)點(diǎn)都經(jīng)過他頭部所在的點(diǎn),他每一個(gè)時(shí)刻骨節(jié)所要運(yùn)動(dòng)的目的地是他前一個(gè)骨節(jié)所在的位置。 不難看出,其中的對(duì)象模型為: 蛇,骨骼,骨節(jié),頭 抽象的接口為: 蛇,骨骼,骨節(jié),頭,圖元 接下來將各個(gè)流程分解成模塊,開始編碼。 2.2.3 關(guān)鍵技術(shù)問題 本程序需解決的有關(guān)技術(shù)問題 1.游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。 2.游戲中為了美觀,適用性強(qiáng),可能需要采用外部文件引入的圖片貼圖,有關(guān)貼圖,在MIDP2.0中提供了用于增強(qiáng)游戲功能的game包,使得解決靜態(tài)或動(dòng)態(tài)、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。 第 4 頁 共 21 頁 3.一開始就把模塊劃分好,這樣就可以簡(jiǎn)單而有效地避免了牌的重復(fù),也可以大大地簡(jiǎn)化了程序代碼的編寫。 4.蛇的位置的轉(zhuǎn)化可以用一個(gè)函數(shù)來實(shí)現(xiàn),這樣就可以使代碼更模塊化,利用也就可以更高。 5.蛇慢慢移動(dòng)的實(shí)現(xiàn)。蛇的移動(dòng)是用線程來實(shí)現(xiàn)的,用Thread.sleep() 這個(gè)函數(shù)來作時(shí)間延遲,讓坐標(biāo)變量緩慢地變化。然后通過刷新畫圖,就會(huì)使人覺得牌是在緩慢地移動(dòng)。 6.除開發(fā)過程中對(duì)結(jié)構(gòu)上的控制、變量的使用、算法的優(yōu)化等優(yōu)化外,還可以使用混淆器(Obfuscator)進(jìn)行程序打包后的優(yōu)化。 以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。 2.3系統(tǒng)開發(fā)環(huán)境 本系統(tǒng)開發(fā)環(huán)境采用新推出的NetBeans 5.5。 NetBeans 5.5是全新的可視化編程環(huán)境,為我們提供了一種方便、快捷的Windows應(yīng)用程序開發(fā)工具。它通用性高,開發(fā)出的應(yīng)用程序可保證能運(yùn)行在大部分設(shè)備上,而不像專用廠商具有一定的不兼容性。雖然它沒有強(qiáng)大的功能和完善的調(diào)試手段,但它提供運(yùn)行模擬器的最基本組件,是其他IDE需集成采用的必備元素。您將會(huì)發(fā)現(xiàn)編程不再是枯燥無味的工作,NetBeans 5.5的每一個(gè)設(shè)計(jì)細(xì)節(jié),都將帶給您一份欣喜。 2.4系統(tǒng)運(yùn)行環(huán)境 , 硬件環(huán)境: CPU:Intel Pentium-M 725 1.6GHz 內(nèi)存:512 MB 硬盤:60 G , 軟件環(huán)境: 操作系統(tǒng):Microsoft Windows XP Professional 應(yīng)用軟件:WTK 2.5 WTK 的全稱是Sun J2ME Wireless Toolkit Sun的無線開發(fā)工具包。這一工具包的設(shè)計(jì)目的是為了幫助開發(fā)人員簡(jiǎn)化j2me的開發(fā)過程。使用其中的工具可以開發(fā)與 Java Technology for the Wireless Industry (JTWI, JSR 185) 規(guī)范兼容的設(shè)備上運(yùn)行的j2me 應(yīng)用程序。該工具箱包含了完整的生成工具、實(shí)用程序以及設(shè)備仿真器。WTK是用來開發(fā)MIDP的,為了讓MIDlet可以順利編譯和執(zhí)行,WTK必須具有CLDC和MIDP的類庫(kù),WTK可以幫助我們省去額外安裝調(diào)試這些類庫(kù)的時(shí)間 第 5 頁 共 21 頁 3貪吃蛇游戲系統(tǒng)設(shè)計(jì) 3.1程序流程 3.1.1結(jié)構(gòu)構(gòu)造 MIDlet suite是MIDP應(yīng)用程序的最小單位,JAM負(fù)責(zé)將手機(jī)內(nèi)的MIDlet suite以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的MIDlet suite,一旦選取了某個(gè)MIDlet suite,操作系統(tǒng)就會(huì)激活KVM執(zhí)行里面的MIDlet。MIDlet及相關(guān)的支持類組成了MIDP應(yīng)用程序的實(shí)際內(nèi)容。而每個(gè)MIDlet都必須繼承javax.microedition.midlet.MIDlet這個(gè)抽象類。在MIDP規(guī)范中定義了MIDlet的生命周期,以及可以存在的三種狀態(tài),包括Paused、Active以及Destroyed,每一個(gè)MIDlet在任何時(shí)刻只可能處于其中的一個(gè)狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關(guān)系如圖1所示:MIDlet有三個(gè)狀態(tài),分別是pause、active和destroyed。在啟動(dòng)一個(gè)MIDlet的時(shí)候,應(yīng)用管理軟件會(huì)首先創(chuàng)建一個(gè)MIDlet實(shí)例并使得他處于pause狀態(tài),當(dāng)startApp()方法被調(diào)用的時(shí)候MIDlet進(jìn)入active狀態(tài),也就是所說的運(yùn)行狀態(tài)。在active狀態(tài)調(diào)用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet進(jìn)入destroyed或者pause狀態(tài)。值得一提的是destroyApp(boolean unconditional)方法,事實(shí)上,當(dāng)destroyApp()方法被調(diào)用的時(shí)候,AMS通知MIDlet進(jìn)入destroyed狀態(tài)。在destroyed狀態(tài)的MIDlet必須釋放了所有的資源,并且保存了數(shù)據(jù)。如果unconditional為false的時(shí)候,MIDlet可以在接到通知后拋出MIDletStateChangeException而保持在當(dāng)前狀態(tài),如果設(shè)置為true的話,則必須立即進(jìn)入destroyed狀態(tài)。 呼叫MIDlet的構(gòu)造函數(shù) StartApp() DestroyApp() 停止?fàn)顟B(tài) (Paused) 運(yùn)行狀態(tài) 消減狀態(tài) PauseApp() (Active) (Destroyed) DestroyApp() 圖1:狀態(tài)轉(zhuǎn)換關(guān)系圖 3.1.2系統(tǒng)流程圖 本程序采用面向?qū)ο蟮脑O(shè)計(jì)模式,對(duì)游戲中的所有物體賦予對(duì)象的概念和屬第 6 頁 共 21 頁 性。運(yùn)行程序后允許用戶選擇執(zhí)行選項(xiàng)菜單,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。 系統(tǒng)流程圖,如圖2: 圖2:系統(tǒng)流程圖 3.1.3系統(tǒng)流程說明 上圖主要展示游戲的進(jìn)行控制流程圖,這里說明一下流程。首先當(dāng)游戲運(yùn)行時(shí)將對(duì)玩家進(jìn)行按鍵進(jìn)行檢測(cè),同時(shí)對(duì)方向進(jìn)行響應(yīng)。這里的響應(yīng)主要是在屏幕上顯示蛇的移動(dòng)方向,同時(shí)還會(huì)檢測(cè)當(dāng)前蛇的狀態(tài)。如果蛇頭碰到蛇尾或者蛇頭碰到墻壁都會(huì)導(dǎo)致游戲結(jié)束。當(dāng)蛇頭碰到蛋的時(shí)候,會(huì)進(jìn)行家分,同時(shí)在屏幕上顯示出來。 同時(shí)這里還有其他按鍵檢測(cè),主要是對(duì)菜單按鍵檢測(cè)。菜單按鍵檢測(cè)包括退第 7 頁 共 21 頁 出和系統(tǒng)設(shè)置。當(dāng)游戲中檢測(cè)到退出按鍵時(shí),游戲結(jié)束。當(dāng)游戲中檢測(cè)到菜單按鍵時(shí)進(jìn)行菜單按鍵事件處理,主要是設(shè)置游戲暫停,等級(jí)和音效開關(guān)。 3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 節(jié):一條蛇可以看成有許多正方形的“小格子”拼湊成,我把它稱作節(jié)。節(jié)是蛇身上最小的單位。 段:當(dāng)許多節(jié)連成一條直線,我稱它為段。貪吃蛇只有一段,如果它拐彎就變成兩段。 鏈表:用來保存每一段的狀態(tài),鏈表的元素單位是段。且鏈表的最后一個(gè)元素表示蛇的頭部段。 坐標(biāo)系:MIDP中的坐標(biāo)以左上角那點(diǎn)為(0,0),向右則x遞增,向下則y遞增。 這里講解數(shù)據(jù)結(jié)構(gòu)類中主要屬性,其他方法將在后面講解。 這里用一個(gè)SnakeLink類來表示一個(gè)蛇身體節(jié)點(diǎn)對(duì)象: public class SnakeLink private int x, y;/坐標(biāo) private int len;/長(zhǎng)度 private byte dir;/方向 private SnakeLink() 這里用SnakePit類來表示一個(gè)蛇對(duì)象的基本游戲?qū)傩? public class SnakePit extends Canvas implements Runnable /蛇的食物 private SnakeFood myFood; /當(dāng)前蛇對(duì)象 private Snake mySnake; /結(jié)束標(biāo)志 private boolean gameOver = false; /暫停標(biāo)志 private boolean gamePaused = false; /重來標(biāo)志 private boolean gameRestart = false; /重畫標(biāo)志 第 8 頁 共 21 頁 private boolean forceRedraw = true; /退出游戲標(biāo)志 private boolean gameDestroyed = false; /當(dāng)前得分 private int score = 0; /當(dāng)前等級(jí) private int level = 5; /吃到多少食物 private int foodEaten = 0; /當(dāng)前屏幕象素寬 private int width; /當(dāng)前屏幕象素高 private int height; /音效對(duì)象 private Player audioPlayer; /音效對(duì)象 private Player tonePlayer; /一個(gè)屏幕單元格寬 static int CellWidth; /一個(gè)屏幕單元格高 static int CellHeight; /初始蛇位置 private static final int START_POS = 3; /重畫時(shí)間 private static final int DEFAULT_WAIT = 400; /最高難度 static final byte MAX_LEVELS = 10; /食物顏色 static final int FOOD_COLOUR = 0x0000ff00; /文字顏色 static final int TEXT_COLOUR = 0x00ff0000; /擦除顏色 static final int ERASE_COLOUR = 0x00ffffff; /蛇節(jié)點(diǎn)顏色 第 9 頁 共 21 頁 static final int DRAW_COLOUR = 0x00000000; /一個(gè)單元大小 public static final int CELL_SIZE = 5; 最后一條蛇對(duì)象由Snake類將以上兩個(gè)類又機(jī)組織在一起在游戲中使用。 public class Snake /方向常量 public final static byte DOWN = 2; public final static byte LEFT = 4; public final static byte RIGHT = 6; public final static byte UP = 8; / 蛇頭當(dāng)前方向 private byte currentDirection; / 用一個(gè)鏈表來存儲(chǔ)蛇節(jié)點(diǎn) private Vector worm = new Vector(5, 2); /是否需要更新 private boolean needUpdate; /是否移動(dòng)后更新 private boolean moveOnNextUpdate; /是否已經(jīng)吃到食物 private boolean hasEaten; 同時(shí)蛇吃的食物對(duì)象數(shù)據(jù)結(jié)構(gòu)用SnakeFood類來表示如下: public class SnakeFood /當(dāng)前食物所在的單元X坐標(biāo) private int cellX; /當(dāng)前食物所在的單元Y坐標(biāo) private int cellY; . 下圖為類對(duì)應(yīng)圖,主要介紹與游戲相關(guān)的幾個(gè)類: SnakeMain:最主要的類,控制所有其它類的運(yùn)行和銷毀。 第 10 頁 共 21 頁 SnakePit:處理鍵盤輸入事件并實(shí)例化Snake類和SnakeFood類的。 Snake:抽象了貪吃蛇的屬性和動(dòng)作。 SnakeFood:抽象了食物的屬性和動(dòng)作。 SnakeScore:用來紀(jì)錄分?jǐn)?shù)的類。 SnakeLink:抽象了蛇身上的一段,保存了這段的坐標(biāo)、方向和所有狀態(tài)。 SnakeException:處理異常類。 圖3:類對(duì)應(yīng)圖 4系統(tǒng)實(shí)現(xiàn)及核心代碼 4.1系統(tǒng)實(shí)現(xiàn) 首先我將介紹下主要用到的七個(gè)類: 一條完整的貪吃蛇是由一段一段組成的。鏈表中保存的第一個(gè)元素是蛇的尾巴段,最后一個(gè)元素是蛇的頭部段。當(dāng)蛇運(yùn)動(dòng)的時(shí)候,它頭部段增加一節(jié)而尾段減少一節(jié)。如果它吃到了食物,尾部段就不減少一節(jié)。也就是說,蛇是從頭部段開始長(zhǎng)的。 吞吃蛇是由一節(jié)一節(jié)組成的。因?yàn)樗?jīng)常有一些節(jié)連成一條直線形成段,所以這是一種相對(duì)有效的方法來保存整個(gè)蛇。X,Y表示段頭部的坐標(biāo),然后段的頭部開始按照方向向后畫若干節(jié)。(段的頭尾和蛇的頭尾不是一個(gè)概念) 第 11 頁 共 21 頁 吞吃蛇將會(huì)在畫面中移動(dòng)尋找食物。如果它吃到食物它將會(huì)長(zhǎng)一格。如果它碰到邊界或者吃到自己將Game Over。 下面介紹下Snake類中的幾個(gè)方法: public void update(Graphics g) 這個(gè)函數(shù)是更新貪吃蛇狀態(tài)。每次更新都把頭部增加一節(jié),尾部減少一節(jié)。如果它吃到食物尾部段就不減少一節(jié)??雌饋砭拖裾簧唛L(zhǎng)了一節(jié)。 / 把吞吃蛇頭部增加一格 head = (SnakeLink)worm.lastElement(); head.increaseLength(); / 如果沒有吃到食物則尾部減少一格 if (!hasEaten) SnakeLink tail; tail = (SnakeLink)worm.firstElement(); int tailX = tail.getX(); int tailY = tail.getY(); / 如果尾部塊長(zhǎng)度為0就刪除 tail.decreaseLength(); if (tail.getLength() = 0) worm.removeElement(tail); / 尾部減少一格 g.setColor(SnakePit.ERASE_COLOUR); drawLink(g, tailX, tailY, tailX, tailY, 1); else / 如果吃到食物就不刪除尾部 hasEaten = false; needUpdate = false; / 確認(rèn)是否在邊界中 if (!SnakePit.isInBounds(head.getEndX(), head.getEndY() / 如果不在,就死了 throw new SnakeException(over the edge); headX = (byte)head.getEndX(); headY = (byte)head.getEndY(); /貪吃蛇的頭部增加一格 g.setColor(SnakePit.DRAW_COLOUR); drawLink(g, headX, headY, headX, headY, 1); / 判斷是否吃到自己 for (int i = 0; i worm.size()-1; i+) sl = (SnakeLink)worm.elementAt(i); if (sl.contains(headX, headY) throw new SnakeException(you ate yourself); void drawLink(Graphics g, int x1, int y1, int x2, int y2, int len) 這個(gè)函數(shù)用來畫蛇的一段,一只完整的蛇是一段一段組成的。 / 把長(zhǎng)度轉(zhuǎn)換成像素長(zhǎng)度 第 12 頁 共 21 頁 len *= SnakePit.CELL_SIZE; / (x1 = x2)說明這一段是垂直的 if (x1 = x2) / 把x1轉(zhuǎn)成像素長(zhǎng)度 x1 *= SnakePit.CELL_SIZE; / (y2 y1)說明是向上運(yùn)動(dòng) if (y2 y1) / 就把頭、尾左邊交換并轉(zhuǎn)成像素 y1 = y2 * SnakePit.CELL_SIZE; else / 把y1轉(zhuǎn)成像素 y1 *= SnakePit.CELL_SIZE; g.fillRect(x1, y1, SnakePit.CELL_SIZE, len); else / 這是水平的一段 y1 *= SnakePit.CELL_SIZE; if (x2 x1) / 就把頭、尾左邊交換并轉(zhuǎn)成像素 x1 = x2 * SnakePit.CELL_SIZE; else x1 *= SnakePit.CELL_SIZE; g.fillRect(x1, y1, len, SnakePit.CELL_SIZE); public void paint(Graphics g) 畫出一只完整的吞吃蛇 SnakeLink sl; int x1, x2, y1, y2; int len; for (int i = 0; i worm.size(); i+) / 取出每一段,然后畫出這一段,連起來就是一只完整的蛇 sl = (SnakeLink)worm.elementAt(i); x1 = sl.getX(); x2 = sl.getEndX(); y1 = sl.getY(); y2 = sl.getEndY(); len = sl.getLength(); drawLink(g, x1, y1, x2, y2, len); 4.2 核心代碼 SnakeMain是最主要的類,繼承自MIDlet類并實(shí)現(xiàn)了CommandListener接口。 protected void startApp() 實(shí)現(xiàn)MIDlet父類的方法,當(dāng)開始程序時(shí)首先執(zhí)行這個(gè)函數(shù) / 顯示畫板 Display.getDisplay(this).setCurrent(theGame); try / 開始游戲線程 Thread myThread = new Thread(theGame); 第 13 頁 共 21 頁 myThread.start(); catch (Error e) destroyApp(false); notifyDestroyed(); public void commandAction(Command c, Displayable d) 接受并處理用戶輸入事件 / 重新開始 if (c = restartCmd) theGame.restart(); ; / 改變難度等級(jí) if (c = levelCmd) Item levelItem = new Gauge(Level, true, 9, theGame.getLevel() ; Form f = new Form(Change Level, levelItem); f.addCommand(OKCmd); f.addCommand(cancelCmd); f.setCommandListener(this); Display.getDisplay(this).setCurrent(f); ; / 離開游戲 if (c = exitCmd) destroyApp(false); notifyDestroyed(); ; / 開始游戲 if (c = startCmd) theGame.removeCommand(startCmd); theGame.addCommand(restartCmd); theGame.restart(); ; / 確定 if (c = OKCmd) Form f = (Form)d; Gauge g = (Gauge)f.get(0); theGame.setLevel(g.getValue(); Display.getDisplay(this).setCurrent(theGame); ; / 取消 if (c = cancelCmd) Display.getDisplay(this).setCurrent(theGame); ; 第 14 頁 共 21 頁 5系統(tǒng)測(cè)試 5.1測(cè)試方法 (1)啟動(dòng)模擬器運(yùn)行貪吃蛇游戲?qū)Ω鱾€(gè)按鍵進(jìn)行檢測(cè)是否有效。 (2)觀察對(duì)方向鍵按下屏幕上
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年速凍丸類制品合作協(xié)議書
- 智慧城市發(fā)展背景下智能交通系統(tǒng)的戰(zhàn)略規(guī)劃
- 2025年紫外固化材料項(xiàng)目發(fā)展計(jì)劃
- 創(chuàng)新教育心理學(xué)方法激發(fā)學(xué)生內(nèi)在動(dòng)力
- 情緒心理學(xué)與課堂氛圍的營(yíng)造
- 醫(yī)療培訓(xùn)中的教育政策與效果評(píng)估研究
- 以數(shù)據(jù)為支撐的學(xué)生行為心理分析實(shí)踐
- 在線教育在商業(yè)領(lǐng)域的廣泛應(yīng)用及未來前景
- 混合式學(xué)習(xí)模式在醫(yī)學(xué)教學(xué)中的實(shí)踐應(yīng)用研究
- 中職教育課件
- 康復(fù)科護(hù)理中的疼痛管理
- 醫(yī)療機(jī)構(gòu)衛(wèi)生法律制度與監(jiān)督-
- 液壓動(dòng)力系統(tǒng)中英文對(duì)照外文翻譯文獻(xiàn)
- 已有設(shè)施管線的加固和保護(hù)等特殊情況下的施工措施
- 商品混凝土技術(shù)規(guī)格書
- 決策力與執(zhí)行力
- 加壓法制備硫酸鋁新技術(shù)
- 第7課日本の秋は涼しいです課件高中日語華東理工版新編日語教程1
- 發(fā)酵車間標(biāo)準(zhǔn)操作規(guī)程、規(guī)范及管理辦法(SOP)
- 2022年FIBA籃球競(jìng)賽規(guī)則
- 武漢鐵路職業(yè)技術(shù)學(xué)院教師招聘考試歷年真題
評(píng)論
0/150
提交評(píng)論