【正文】
ails some of the basic java knowledge, on this basis leads to Android, the basis of the Android and its characteristics, and then introduces the Android future prospects and development. Highlights this Snake procedures used and controls, including the Drawable Canvas, Thread, and so on. Describes the general use, as well as the program is how to use these classes to the development of the game. The ages of the classic works transplantation in this program to the phone up, to provide application software for the more popular hardware platforms. These will be well positioned to meet future demand for mobile games. Devour the snake game based on the Android platform, prepared to meet the entertainment needs of the general mobile phone users.Key words: Android system。關鍵詞:Android系統(tǒng)。介紹了這些類的一般的使用方法,以及本程序是如何使用這些類來進行游戲的開發(fā)的。Google公司2007年11月5日發(fā)布的開源的Android平臺 —— 一款包括操作系統(tǒng)(基于Linux內(nèi)核)、中間件和關鍵應用的手機平臺,并組建了開放手機聯(lián)盟(Open Handset Alliance),包括Google、中國移動、TMobile、宏達電、高通、摩托羅拉等領軍企業(yè)。 本科畢業(yè)設計(論文) 題目名稱: 基于Android貪吃蛇游戲 學 院: 計算機科學技術 專業(yè)年級: 計算機科學與技術08(師)級 學生姓名: 班級學號: 2班28號 指導教師: 二○一二 年 六 月 六 日摘 要本課題是利用java語言在Android平臺上進行手機游戲的開發(fā),由于本人知識的有限,以及客觀條件的限制,本人打算開發(fā)一個單機版的游戲。于是,我決定利用自己大學所學的知識,自己在指導老師的幫助下,獨立開發(fā)這個小游戲。本程序?qū)⒗仙俳砸说慕?jīng)典作品移植到手機上來,為更流行的硬件平臺提供應用軟件。 貪食蛇游戲。 Gluttony snake game。因此,移動終端的應用軟件和需要的服務將會有很大的發(fā)展空間。Android平臺的開放性等特點既能促進技術(包括平臺自身)的創(chuàng)新,又有助于降低開發(fā)成本,還可以使運營商能非常方便地制定自己的特色化的產(chǎn)品。Android一詞本意是指機器人,同時也指Google于2007年11月5日推出的開源手機操作系統(tǒng)。全球為數(shù)眾多的移動電話用戶從未使用過任何基Android 的電話。開放手機聯(lián)盟表示,Android平臺可以促使移動設備的創(chuàng)新,讓用戶體驗到最優(yōu)越的移動服務。1. 開放性Google與開放手機聯(lián)盟合作開發(fā)了 Android,這個聯(lián)盟由包括中國移動、摩托羅拉、高通、宏達電和 TMobile 在內(nèi)的30多家技術和無線應用的領軍企業(yè)組成。應用程序是在平等的條件下創(chuàng)建的,所以移動設備上的應用程序可以被替換或擴展,即使是撥號程序或主屏幕這樣的核心組件;應用程序可以輕松地嵌入 HTML、Javascript 和樣式表。4. 智能虛擬鍵盤虛擬鍵盤的出現(xiàn)意味著基于Android 。你可以通過振動屏幕來進行觸覺反饋。Nokia的Symbian系統(tǒng)在Android系統(tǒng)的沖擊下,正在從手機市場中的王者慢慢被擠下來。許多時候人們都會處于無聊的狀態(tài),比如等車的時候、坐長途車的時候...這時若有一款有意思的游戲來打發(fā)時間是再好不過了。現(xiàn)階段使用較廣泛大家也相對熟悉的手機操作系統(tǒng)是由諾基亞公司主導推出的Symbian 操作系統(tǒng)。IOS是由蘋果公司為iPhone開發(fā)的操作系統(tǒng)。系統(tǒng)操作占用大概240MB的存儲器空間?,F(xiàn)在多用Paml公司生產(chǎn)的手機上。目前國內(nèi)還沒有自主研發(fā)并商品化的手機操作系統(tǒng)。OPhone平臺采用開源的Linux作為系統(tǒng)內(nèi)核,借鑒并兼容Android平臺,集成靈活高效的Java應用框架,充分借鑒當下主流手機操作系統(tǒng)所具有的良好用戶體驗,提供了一套完整的電話解決方案和各類移動數(shù)據(jù)業(yè)務解決方案。目前國內(nèi)外手機應用服務方向主要有基于地理位置的信息服務(Location Based Service LBS)它是通過電信移動運營商的無線電通訊網(wǎng)絡(如GSM網(wǎng)、CDMA網(wǎng))或外部定位方式(如GPS)獲取移動終端用戶的位置信息(地理坐標,或大地坐標),在GIS(Geographic Information System,地理信息系統(tǒng))平臺的支持下,為用戶提供相應服務的一種增值業(yè)務。國外最大的社交Fackbook也已經(jīng)傳出正在進行針對手機的產(chǎn)品的研發(fā)。 手機辦公類軟件在手機上也正日趨完善,在手機上編輯查看各類文檔已經(jīng)實現(xiàn),在Android平臺上的QuickOffice就是這樣的軟件。 發(fā)展趨勢隨著3G應用的不斷開發(fā)推廣,用戶會越來越需要更加個性化、優(yōu)質(zhì)化的多媒體數(shù)據(jù)服務,用戶希望能夠隨時、隨地無縫利用3G網(wǎng)絡進行辦公、網(wǎng)上交易、游戲娛樂、欣賞影視節(jié)目、收聽和下載音樂等。接著,發(fā)揮物聯(lián)網(wǎng)的優(yōu)勢,借助無處不在的傳感器,可以感知并分享到周圍世界的海量信息,這些信息將在“云端”得到整合,幫助用戶及時、準確的獲得氣息信息、交通路況。最后,更加智能、安全的設備,隨著智能手機的不斷普及和更加智能,手機軟件的更新、升級將會變得越發(fā)簡單,并會為用戶提供工具或信息,讓用戶有能力和權力決策那些內(nèi)容可以瀏覽、下載或分享。若在基本功能上進而實現(xiàn)界面的美化,則還需要更好的美術人員協(xié)助實現(xiàn)。(2) Dalvik虛擬機專門為移動設備做了優(yōu)化。(5) SQLite數(shù)據(jù)庫,用于結構化的數(shù)據(jù)存儲。(9) 照相機、GPS、指南針和加速度計。圖21 Android操作系統(tǒng)的體系結構圖(1) 應用程序。該應用程序框架用來簡化組件軟件的重用,任何一個應用程序度可以發(fā)布它的功能并且任何其他應用程序度可以使用其所發(fā)布的功能塊。(5) Linux內(nèi)核。需要注意的是,這個VM并非您想象中的JVM,而是Dalvik Virtual Machine,這是一種開源技術。當用戶從主屏幕或應用程序啟動器選擇一個應用程序時,就會開始一個動作。如果應用程序非常簡單,那么可能不需要創(chuàng)建內(nèi)容提供程序。Android的圖形界面分為三層:底層是Activity。View是基本控件,ViewGroup是布局控件。它包括必需的類名和應用程序能夠處理的事件類型,以及運行應用程序所需的許可。 本項目的開發(fā)方法經(jīng)過深入分析,本項目使用面向?qū)ο蠓绞介_發(fā)是比較好的開發(fā)方式。 面向?qū)ο蟮脑O計方法與傳統(tǒng)的面向過程的方法有本質(zhì)不同,這種方法的基本原理是,使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題。 傳統(tǒng)的軟件開發(fā)過程可以用“瀑布”模型來描述,這種方法強調(diào)自頂向下按部就班地完成軟件開發(fā)工作。 面向?qū)ο蠓椒▽W的出發(fā)點和基本原則,就是分析、設計和實現(xiàn)一個軟件系統(tǒng)的方法和過程.盡可能接近人們認識世界解決問題的方法和過程,也就是使描述問題的問題空間和描述解法的解空間在結構上盡可能一致。因此,面向?qū)ο蟮沫h(huán)境提供了強有力的抽象機制,便于人在利用計算機軟件系統(tǒng)解決復雜問題時使用習慣的抽象思維工具。 開發(fā)工具及環(huán)境簡介 開發(fā)工具Eclipse簡介Eclipse是一個開放源代碼的、與NetBeans、Sun ONE Studio和Borland Jbuilder類似的一種基于Java的整合型可擴展開發(fā)平臺,也是目前最著名的開源項目之一,Eclipse 附帶了一個標準的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。也就是說未來只要有人需要,就會有建立在 Eclipse之上COBOL,Perl,Python等語言的開發(fā)插件出現(xiàn)。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術項目三個項目組成,具體包括四個部分組成—— Eclipse Platform、JDT、CDT支持C開發(fā)、PDE用來支持插件開發(fā),Eclipse Platform則是一個開放的可擴展IDE,提供了一個通用的開發(fā)平臺。Eclipse SDK由Eclipse項目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。因為本項目的開發(fā)工具是Eclipse,所以還需要安裝ADT(Android Development Tools)插件。該部分的目標主要有:獲得目標系統(tǒng)的物理模型,了解目標系統(tǒng)是如何運行的;抽象出目標系統(tǒng)的邏輯模型,對物理模型進行篩選,得到與軟件系統(tǒng)有關的部分;建立目標系統(tǒng)的邏輯模型,得出數(shù)據(jù)流圖和數(shù)據(jù)字典;補充目標系統(tǒng)的邏輯模型,對目標系統(tǒng)的用戶界面,至今尚未考慮的細節(jié)進行說明。(1) 利用方向鍵來改變蛇的運行方向。 系統(tǒng)需求分析 業(yè)務需求分析雖然現(xiàn)在市面上存在著各種各樣的游戲版本,不論是手機,還是小游戲機,不可能花費大量時間在娛樂上,大型游戲是行不通的,這樣的小游戲剛好迎合了他們的需求。因此,其邏輯設計應當相當嚴謹,需將所有可能發(fā)生的事件及意外情況考慮在設計中。但是用戶對軟件產(chǎn)品也有一定的要求。2. 運行穩(wěn)定一款軟件設計得不夠好,那么就有可能在運行的時候出現(xiàn)一些不可預料的錯誤從而造成軟件崩潰。 功能需求分析本項目是一個運行在Android手機上的游戲,所以在應該實現(xiàn)以下功能。蛇不能向相反方向移動,例如蛇頭朝南時則不能向北移動。觸摸屏幕游戲開始,蛇開始移動鍵盤操作: 向上左移右移 向下沒有吃到食物且蛇碰到邊界游戲結束游戲中途欲中斷,稍后繼續(xù)游戲觸摸屏幕暫停游戲游戲暫停進入游戲畫面再次觸摸屏幕游戲恢復圖11 游戲處理流程圖 概要設計 模塊劃分從面向?qū)ο蟪绦蛟O計的角度,本項目總體可以分為游戲界面模塊、數(shù)據(jù)存儲模塊和控制模塊。游戲的主界面架游戲圖形區(qū)域界面游戲控制按鈕界面圖13 游戲主界面 游戲控制模塊 游戲控制模塊主要通過手機鍵盤上的按鈕來控制游戲的開始、游戲的退出這兩個功能以及控制游戲分數(shù)變化。一個activity主要有三個狀態(tài)。即是:在它之上有另外一個activity。它仍然保留所有的狀態(tài)和成員信息。當一個activity從這個狀態(tài)轉(zhuǎn)變到另一個狀態(tài)時,它被以下列protected方法所通知。 游戲控制模塊實現(xiàn)1. 實現(xiàn)操作蛇的移動方向在Android系統(tǒng)中,手機上的每個按鈕都會有一個對應的鍵值跟它對應,所在可以給對應的按鈕設置監(jiān)聽器OnClickListener,監(jiān)聽器是一個接口,該接口中有一個方法onClick(View v)。2. 實現(xiàn)游戲暫停在Activity的生命周期中,有一個onPause(),如果有來電或是其它事件中斷,這時應該把當前狀態(tài)保存。4. 實現(xiàn)游戲退出當一個Activity退出或者被調(diào)用finish()方法后,系統(tǒng)會調(diào)用其生命周期方法onDestroy().當用戶退出游戲時,可以在這個方法中對資源進行釋放。View是所有與用戶交互的組件的Widgets的基類(Buttons,textField等),View的子類ViewGroup是layouts類的基類,layouts類可以包含其他的View/ViewGroup組件并且定義展示的屬性。SnakeView的方法摘要。4. 刷新蛇的當前位置的方法主要用于刷新蛇的當前位置。各個類之間的關系及所包括的方法如圖46所示。根據(jù)方向鍵,改變蛇頭的x、y的值,即改變方向。 setContentView()。 (PLAY)。 (LEFT)。 right = (ImageButton)findViewById()。 ()。 ((1, 1, 255, 1))。 (this)。 } else { // We are being restored Bundle map = (ICICLE_KEY)。 ()。 break。View會繪制一個包含Drawing是event事件的方形塊。onDraw()protected void onSizeChanged(int w, int h, int oldw, int oldh) { mXTileCount = (int) (w / mTileSize)。 mTile