游戲設(shè)計與開發(fā)【精選文檔】_第1頁
游戲設(shè)計與開發(fā)【精選文檔】_第2頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、游戲設(shè)計與開發(fā)【精選文檔】中國礦業(yè)大學(xué)計算機學(xué)院2013 級本科生課程報告課程名稱 軟件測試 報告時間 2016年7月 學(xué)生姓名 李龍 學(xué) 號 08133202 專 業(yè) 計算機科學(xué)與技術(shù) 任課教師評語任課教師評語(對課程基礎(chǔ)理論的掌握;對課程知識應(yīng)用能力的評價;對課程報告相關(guān)實驗、作品、軟件等成果的評價;課程學(xué)習(xí)態(tài)度和上課紀(jì)律;課程成果和報告工作量;總體評價和成績;存在問題等):成 績: 任課教師簽字: 2016 年 6 月 25日摘 要本課題是設(shè)計開發(fā)一款小游戲,由于本人知識的有限,以及客觀條件的限制,本人打算開發(fā)一個單機版的游戲.本人在手機上玩過貪吃蛇的游戲,曾經(jīng)為了和別人比賽,苦苦的玩了

2、好多次,追求高分!后來得知這個小小的游戲是nokia當(dāng)年很成功的一款手機游戲,許多人都玩過,也很喜歡?,F(xiàn)在這款游戲的版本已經(jīng)發(fā)展到第三版了,手機生產(chǎn)廠商繼續(xù)開發(fā)這個游戲,看來這個游戲還是有很大的市場的.Google公司2007年11月5日發(fā)布的開源的Android平臺  一款包括操作系統(tǒng)(基于Linux內(nèi)核)、中間件和關(guān)鍵應(yīng)用的手機平臺,并組建了開放手機聯(lián)盟(Open Handset Alliance),包括Google、中國移動、TMobile、宏達(dá)電、高通、摩托羅拉等領(lǐng)軍企業(yè)。于是,我決定利用自己大學(xué)所學(xué)的知識,獨立開發(fā)這個小游戲。重首先說明了這個貪

3、吃蛇程序所用到的一些類和控件,包括Drawable,Canvas, Thread,等等。介紹了這些類的一般的使用方法,以及本程序是如何使用這些類來進(jìn)行游戲的開發(fā)的。本程序?qū)⒗仙俳砸说慕?jīng)典作品移植到手機上來,為更流行的硬件平臺提供應(yīng)用軟件。這些都將能很好的滿足未來人們對手機游戲的需求。吞吃蛇游戲基于Android平臺編寫,滿足一般手機用戶的娛樂需求。關(guān)鍵詞:Android系統(tǒng); 貪食蛇游戲; 手機游戲ABSTRACT。This topic is using java language on the

4、 Android platform mobile phone game development, I limited knowledge, and objective constraints, I intend to develop a standalone game。 I played the game of Snake, on

5、0;the phone once in order to match with others, struggling to play many times, the pursuit of high scores! Later learned that this little game nokia was very su

6、ccessful mobile phone games, many people have played, and also enjoyed. Version of the game has been developed to the third edition, mobile phone manufacturers continue t

7、o develop this game, it seems that this game is a great market. Open-source Android platform, Google's released on November 5, 2007 - an operating system (Linux 

8、kernel), middleware and key applications-based mobile phone platform, and the formation of the Open Handset Alliance (Open Handset Alliance), includingGoogle, China Mobile, TMobile, HTC

9、, Qualcomm, Motorola and other leading enterprisesSo, I decided to use the knowledge learned in his college, in the instructors help, the independent development of this 

10、game。This article first details some of the basic java knowledge, on this basis leads to Android, the basis of the Android and its characteristics, and then introduces

11、60;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,

12、60;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 

13、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&

14、#160;game based on the Android platform, prepared to meet the entertainment needs of the general mobile phone users. Key words: Android system; Gluttony snake game; Mobile

15、0;game目錄1 背景1.1研究背景隨著社會的發(fā)展,人們生活的步調(diào)日益加快,越來越多的人加入了全球化的世界。人們不再拘泥于一塊天地,加班,出差成了現(xiàn)代人不可避免的公務(wù)。而此時一款可以隨時隨地娛樂的游戲成了必需品.貪吃蛇這一游戲簡單易行,操作方便,娛樂性較強,吸引了不少人。這一款游戲緊緊地抓住了人們的心理,雖然簡單,卻其樂無窮,在人們不斷追求更多的欲望下,該游戲給人們帶來了追逐的快感,以及成功后的滿足感,對于一直處于高壓下的現(xiàn)代人是很好的放松工具1。當(dāng)前科學(xué)技術(shù)飛速發(fā)展,特別是微電子技術(shù),計算機軟件與應(yīng)用技術(shù)的發(fā)展,使得人們的日常生活豐富多彩.單片微型計算機(簡稱單片機)作為微型計算機家族的一

16、員,以其獨特的結(jié)構(gòu),良好的穩(wěn)定性,便宜的價格在嵌入式領(lǐng)域廣泛應(yīng)用。與傳統(tǒng)的PC上設(shè)計的貪吃蛇游戲不同,本次作者利用Android平臺,java語言編程,實現(xiàn)便攜地貪吃蛇游戲1.2 項目目的與意義1.2.1開發(fā)目的 自2007年Google發(fā)布Android系統(tǒng)1.0之后,各大手機生產(chǎn)廠商紛紛將目光投向了最具發(fā)展?jié)摿Φ腁ndroid系統(tǒng),并陸續(xù)推出了各種品牌的搭載Android系統(tǒng)的智能手機. 時隔四年,Android手機在手機市場中占的市場份額正以非常迅猛的速度上升:2010年市場份額:Symbian 36.6、Android 25.5%、iP

17、hone 16.7、windows Mobile   2.8%、linux   2.1% 。Nokia的Symbian系統(tǒng)在Android系統(tǒng)的沖擊下,正在從手機市場中的王者慢慢被擠下來.在未來的幾年內(nèi),Android手機必定會占據(jù)手機市場的主要份額,所以在這種形式下,Android應(yīng)用的前景也必定是前景一片大好。1。2.2開發(fā)意義 現(xiàn)如今,電子商品的硬件支持越來越高端。人們對手機的功能要求不再僅僅局限于接電話和打電話了,在這些基本功能的基礎(chǔ)上,手機更成了人們?nèi)粘I钪蟹浅V匾膴蕵泛托蓍e工具。

18、許多時候人們都會處于無聊的狀態(tài),比如等車的時候、坐長途車的時候.。.這時若有一款有意思的游戲來打發(fā)時間是再好不過了。由于Android手機具有多任務(wù)功能,可以一邊聽音樂一邊玩游戲,是讓人們在等車的時候玩上一玩消磨時間的好東東。1。3 手機游戲國內(nèi)外現(xiàn)狀和發(fā)展趨勢1.3。1 手機游戲國內(nèi)外現(xiàn)狀近年來,網(wǎng)路尤其是無線通信網(wǎng)絡(luò)在國內(nèi)迅速普及,網(wǎng)絡(luò)游戲也得到了高速發(fā)展。同樣手機的普及,使得手機游戲市場空前發(fā)展。國內(nèi)外巨大的手機使用量,也讓商家看到了新的商機,手機游戲市場利潤將會十分的豐厚。面對潛力巨大的手機游戲市場,各大游戲開發(fā)商、運營商、服務(wù)商以及手機終端廠商等都開始準(zhǔn)備應(yīng)對措施,以便搶占更多的手機

19、市場分額。Nokia、索愛、三星等各大手機廠商開始不斷的提升手機的游戲性能,同時采用開放式的手機操作系統(tǒng),方便用戶能夠享受到不同的游戲業(yè)務(wù)4。而國內(nèi)游戲開發(fā)商,如盛大、騰訊、網(wǎng)易等公司,紛紛躋身手機游戲開發(fā)商行列。新浪、搜狐等著名的門戶網(wǎng)站,也紛紛涉足手機游戲領(lǐng)域,相繼開辟了各自的手機游戲相關(guān)欄目,其他一些游戲網(wǎng)站也都加快了手機游戲開發(fā)的腳步?,F(xiàn)階段國內(nèi)的手機游戲還局限于小型單機游戲和簡單的卡牌類網(wǎng)絡(luò)游戲,而國外已經(jīng)開始致力于開發(fā)能夠依靠GPRS定位,或者用戶佩戴輔助器械的大型手機游戲。1.3.2 手機游戲的發(fā)展趨勢每個人都可以隨時隨地玩手機游戲,雖然手機游戲的價格不貴,但它的使用量巨大,也因

20、此帶來巨大的商業(yè)價值。手機游戲具有娛樂性和趣味性,而且它的操作簡單,易與掌握,是人們?nèi)粘I钪胁豢苫蛉钡膴蕵贩绞?伴隨著3G、4G時代的到來,手機上網(wǎng)逐漸普及,上網(wǎng)資費進(jìn)一步下調(diào),使用手機進(jìn)行娛樂互動的消費者越來越多.隨著移動快捷支付系統(tǒng)日趨成熟和盈利模式的逐漸明朗,隨著資本對于手機游戲市場的關(guān)切,隨著業(yè)界內(nèi)各個環(huán)節(jié)逐漸完善與壯大,手機游戲必將會迎來一個新的發(fā)展高峰6.高科技游戲曾經(jīng)是任天堂、索尼和微軟三足鼎立的天下,由于智能手機的興起,手機游戲的發(fā)展在短短2年里就超越了掌上機及電腦游戲.Pop Cap Games公司針對2500名英美成年人所做的調(diào)查顯示,有一半以上的受訪者至少玩過一次手機游

21、戲.大量平價游戲、更為簡化的游戲技術(shù),大大降低了用戶玩手機游戲的門檻,在中國手機游戲幾乎都是免費下載的。撇開平價手機游戲所帶來的商業(yè)影響不談,游戲開發(fā)商認(rèn)為手機游戲其實蘊藏著無限發(fā)展機遇。智能手機用戶是移動行業(yè)中數(shù)量增長最快的用戶,手機游戲公司們最近的表現(xiàn)也同樣勢不可擋。操作簡易,內(nèi)容簡單的游戲是小型手機游戲的主打產(chǎn)品,但隨著電子技術(shù)的發(fā)展,手機硬件性能的不斷提升,手機電池容量更大續(xù)航時間更久,以及手機外設(shè)的開發(fā),手機游戲也向著流暢舒服的操作,內(nèi)容豐富的大型游戲制作方向發(fā)展。開發(fā)大型手機游戲不僅能開拓新的市場,新的商機和利潤,也能給用戶帶來操作、視覺的雙重享受。貪吃蛇作為一款操作簡單的單機類游

22、戲,在競爭激烈的手機游戲領(lǐng)域中,近些年來也得到了充分的發(fā)展。Nokia在其WP7手機上推出了瘋狂貪吃蛇(Crazy Snake),雖然操作簡單,畫面簡單,但游戲體驗早就不簡單了,是一款不能錯過的游戲7。Snake的開發(fā)商XIMAD又推出了寶石貪吃蛇游戲,這款名為Snake的游戲?qū)⒇澇陨叩漠嬅嫠酵葡蛄艘粋€新的高度.Snake無論是游戲畫面還是游戲可玩度都非一般的貪吃蛇游戲所能比擬的.在這款游戲中,你的貪吃蛇將會在地下收集文物,但是要及時的避開各種障礙物,以通過各種關(guān)卡,獲取積分。不僅如此,貪吃蛇游戲還發(fā)展出了3D貪吃蛇,現(xiàn)在正在開發(fā)的GPRS定位通過用戶走動控制的貪吃蛇游戲,將會把貪吃蛇推向新

23、的高度.2 方案論證2.1經(jīng)濟可行性分析本系統(tǒng)開發(fā)經(jīng)費并不是很多。個人或者團(tuán)隊都可以按相應(yīng)時間完成基本功能。若在基本功能上進(jìn)而實現(xiàn)界面的美化,則還需要更好的美術(shù)人員協(xié)助實現(xiàn)。 投入:除軟件開發(fā)成本外,需要一臺安裝Windows操作系統(tǒng)和Android虛擬機的中等以上電腦,一部中等配置的裝有Android2。3或以上的Android手機。2。2技術(shù)可行性分析2。2。1Android平臺特性 (1) 支持組件的重用與替換。意味著我們可以把系統(tǒng)中不喜歡的應(yīng)用程序換掉,安裝我們自己喜歡的程序。 (2) Dalvik虛擬機專門為移動設(shè)備做了優(yōu)化。將class文件通

24、過DX工具轉(zhuǎn)換成后綴為.dex的文件來執(zhí)。Dalvik虛擬機基于寄存器,比java虛擬機快. (3) 內(nèi)部集成瀏覽器基于開源的WebKit引擎。 (4) 優(yōu)化的2D和3D圖形庫。 (5) SQLite數(shù)據(jù)庫,用于結(jié)構(gòu)化的數(shù)據(jù)存儲。 (6) 支持各種多媒體格式:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF。 (7) GSM電話全球通。 (8) 藍(lán)牙、Wifi(無線網(wǎng)絡(luò))、EDGE(GSM到3G的過渡). (9) 照相機、GPS、指南

25、針和加速度計。 (10) 豐富的開發(fā)環(huán)境包括設(shè)備模擬器,調(diào)式工具,內(nèi)存及性能分析表和Eclipse集成開發(fā)環(huán)境插件。Google提供了Android開發(fā)包SDK,其中包含大量的類庫和開發(fā)工具.2.2。2Android應(yīng)用程序組件如前所述,Android運行在Linux 內(nèi)核上.Android應(yīng)用程序是用Java 編程語言編寫的,它們在一個虛擬機(VM)中運行。需要注意的是,這個VM并非您想象中的JVM,而是Dalvik Virtual Machine,這是一種開源技術(shù)。每個Android應(yīng)用程序都在Dalvik VM

26、0;的一個實例中運行,這個實例駐留在一個由Linux內(nèi)核管理的進(jìn)程中,如下圖2-1所示。如圖21Android 應(yīng)用程序由一個或多個組件組成。1。 活動(Activity) 具有可視 UI 的應(yīng)用程序是用活動實現(xiàn)的.當(dāng)用戶從主屏幕或應(yīng)用程序啟動器選擇一個應(yīng)用程序時,就會開始一個動作。2。 服務(wù)(Service) 服務(wù)應(yīng)該用于任何需要持續(xù)較長時間的應(yīng)用程序,例如網(wǎng)絡(luò)監(jiān)視器或更新檢查應(yīng)用程序. 3。 內(nèi)容提供程序(Content Provider) 可以將內(nèi)容提供程序看作數(shù)據(jù)庫服務(wù)器。內(nèi)容

27、提供程序的任務(wù)是管理對持久數(shù)據(jù)的訪問,例如 SQLite數(shù)據(jù)庫.如果應(yīng)用程序非常簡單,那么可能不需要創(chuàng)建內(nèi)容提供程序。如果要構(gòu)建一個較大的應(yīng)用程序,或者構(gòu)建需要為多個活動或應(yīng)用程序提供數(shù)據(jù)的應(yīng)用程序,那么可以使用內(nèi)容提供程序?qū)崿F(xiàn)數(shù)據(jù)訪問。 4. 廣播接收器(Broadcast Receiver) Android 應(yīng)用程序可用于處理一個數(shù)據(jù)元素,或者對一個事件(例如接收文本消息)做出響應(yīng)。 5。 視圖(View) View是Android中圖形用戶界面的基類,提供了可視化界面展示。Android的圖形界面分

28、為三層:底層是Activity;Activity上面是Window; Window上面是Views。View又可以分為View和ViewGroup。View是基本控件,ViewGroup是布局控件。 6。 信使(Intent) Intent是不同組件之間相互導(dǎo)航的紐帶,封裝了不同組件導(dǎo)航查找的條件. Android應(yīng)用程序是連同一個AndroidManifest.xml文件一起部署到設(shè)備的。AndroidManifest。xml包含必要的配置信息,以便將它適當(dāng)?shù)匕惭b到設(shè)備。它包括必需的類名和應(yīng)用程序能夠處理的事件類型,以及運行應(yīng)用程序所需的許可

29、。例如,如果應(yīng)用程序需要訪問網(wǎng)絡(luò)例如為了下載一個文件-那么manifest文件中必須顯式地列出該許可。很多應(yīng)用程序可能啟用了這個特定的許可.這種聲明式安全性有助于減少惡意應(yīng)用程序損害設(shè)備的可能性。2.4 開發(fā)工具及環(huán)境簡介2.4。1開發(fā)工具Eclipse簡介Eclipse是一個開放源代碼的、與NetBeans、Sun ONE Studio Borland Jbuilder類似的一種基于Java的整合型可擴展開發(fā)平臺,也是目前最著名的開源項目之一,Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Develop

30、ment Tools,JDT)。其未來的目標(biāo)不僅僅是成為專門開發(fā)Java程序的IDE環(huán)境,根據(jù)Eclipse的體系結(jié)構(gòu),通過開發(fā)插件,它能擴展到任何語言的開發(fā),甚至能成為圖片繪制的工具。  目前,Eclipse已經(jīng)開始提供C語言開發(fā)的功能插件.更難能可貴的是,Eclipse是一個開放源代碼的項目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開發(fā)自己的功能插件。也就是說未來只要有人需要,就會有在Eclipse之上COBOL,Perl,Python等語言的開發(fā)插件出現(xiàn)。同時可以通過開發(fā)新的插件擴展現(xiàn)有插件的功能,可以無限擴展,而且有著統(tǒng)一的外觀,操作和系統(tǒng)資

31、源管理,這也正是Eclipse的潛力所在.  Eclipse的主要組成。  Eclipse是一個開放源代碼的軟件開發(fā)項目,專注于為高度集成的工具開發(fā)提供一個全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺.它主要由Eclipse項目、Eclipse工具項目和Eclipse技術(shù)項目三個項目組成,具體包括四個部分組成- Eclipse Platform、JDT、CDT和PDE。JDT支持Java開發(fā)、CDT支持C開發(fā)、PDE用來支持插件開發(fā),Eclipse Platform則是一個開放的可擴展IDE,提供了一個通用的開發(fā)平臺.它提供建造塊和構(gòu)造

32、并運行集成軟件開發(fā)工具的基礎(chǔ)。  Eclipse SDK(軟件開發(fā)者包)是Eclipse Platform、JDT和PDE所生產(chǎn)的組件合并,它們可以一次下載。這些部分在一起提供了一個具有豐富特性的開發(fā)環(huán)境,允許開發(fā)者有效地建造可以無縫集成到Eclipse Platform中的工具.Eclipse SDK由Eclipse項目生產(chǎn)的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項目生產(chǎn)的軟件以 CPL發(fā)布,第三方組件有各自自身的許可協(xié)議.2.4。2開發(fā)環(huán)境簡介本項目在windowsXP操作系統(tǒng)上進(jìn)行開發(fā),Googl

33、e為開發(fā)者提供了SDK(Software Development Kit)。Android SDK的下載地址為http:/development.A/index。html。因為本項目的開發(fā)工具是Eclipse,所以還需要安裝ADT(Android Development Tools)插件。具體安裝步驟就不在本文中介紹了。第二章 游戲開發(fā)2.1需求分析需求分析工作是軟件生存周期中重要的一步,也是起決定性的一步。通過它可以全面了解整個系統(tǒng)的功能和性能方面的要求,為軟件設(shè)計打下堅實的基礎(chǔ)。該部分的目標(biāo)主要有:獲得目標(biāo)系統(tǒng)的物理模型

34、,了解目標(biāo)系統(tǒng)是如何運行的;抽象出目標(biāo)系統(tǒng)的邏輯模型,對物理模型進(jìn)行篩選,得到與軟件系統(tǒng)有關(guān)的部分;建立目標(biāo)系統(tǒng)的邏輯模型,得出數(shù)據(jù)流圖和數(shù)據(jù)字典;補充目標(biāo)系統(tǒng)的邏輯模型,對目標(biāo)系統(tǒng)的用戶界面,至今尚未考慮的細(xì)節(jié)進(jìn)行說明。 本系統(tǒng)主要是完成貪吃蛇游戲的基本操作.用戶可以自己練習(xí)和娛樂。本系統(tǒng)需要滿足以下幾點要求。(1) 利用方向鍵來改變蛇的運行方向.(2) 吃到食物就變成新的蛇體,碰到壁或自身則游戲結(jié)束,否則正常運行2。2系統(tǒng)開發(fā)目標(biāo)采用基于Android的程序設(shè)計技術(shù),以及用Eclipse開發(fā)Android程序的相關(guān)技術(shù)開發(fā)出具有良好用戶界面,操作簡單易學(xué),游戲

35、功能齊全且有益于智力開發(fā)的貪吃蛇游戲.3。游戲策劃3.1系統(tǒng)需求分析3。1。1業(yè)務(wù)需求分析 雖然現(xiàn)在市面上存在著各種各樣的游戲版本,可是貪吃蛇其市場還是相當(dāng)大的.因為它的特殊在于它能吸引人更深入,愛不釋手.隨著游戲速度不斷加快,其刺激性也更強.可以說該游戲的優(yōu)勢在于它的簡單易行,不論是手機,還是小游戲機,都能很快順利的運行.對于在外忙碌的人,不可能花費大量時間在娛樂上,大型游戲是行不通的,這樣的小游戲剛好迎合了他們的需求. 手機貪吃蛇游戲基于JAVA平臺編寫,采用Android技術(shù)開發(fā)的一款手機游戲。手機游戲程序是一項精度要求很高的程序系統(tǒng),因為其代碼利用率很高。一個實時運

36、行的最終作品,每秒都會運行成千上萬行程序,繪圖事件、鍵盤事件都會以極高的頻率在后臺等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運行不久后可能出現(xiàn)嚴(yán)重錯誤,甚至死循環(huán)。因此,其邏輯設(shè)計應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計中.JAVA是基于虛擬機的半解釋型編譯系統(tǒng),其執(zhí)行效率較C+等完全編譯后的程序會低很多,程序如果不進(jìn)行精簡和優(yōu)化,將可能導(dǎo)致運行的不流暢。2.3。2用戶需求分析游戲開發(fā)成功后,最終用戶為各個年齡段的人群,用戶范圍相當(dāng)廣泛。但是用戶對軟件產(chǎn)品也有一定的要求. 1. 簡單易學(xué) 時間不管對于誰來說都是寶貴的,用戶不會愿意花大量時間去學(xué)習(xí)

37、使用一款軟件。一款軟件如果操作界面不友好,讓用戶難以上手使用,那就說明這款軟件開發(fā)得不夠成功,從而失去大量的用戶。所以本項目必須擁有良好的交互界面,讓用戶安裝之后就能進(jìn)行游戲。 2。 運行穩(wěn)定 一款軟件設(shè)計得不夠好,那么就有可能在運行的時候出現(xiàn)一些不可預(yù)料的錯誤從而造成軟件崩潰。如果用戶正在游戲突然軟件崩潰了,無疑會讓用戶感到非常不舒服,有可能就把軟件給卸載了,這樣也會失去很多用戶。 3. 操作簡便 用戶不是程序員,他們不知道程序的內(nèi)部邏輯。所以程序員必須提供給用戶便捷的操作接口來供用戶操作,靈活便捷的操作性直接影響了一款軟件的好壞。

38、3。2。3功能需求分析本項目是一個運行在Android手機上的游戲,所以在應(yīng)該實現(xiàn)以下功能.1. 響應(yīng)鍵盤事件玩家可以從手機鍵盤或者觸屏開始游戲,操控游戲。2。 繪制游戲圖形界面玩家開始游戲后,在手機屏幕上繪制出一條初始由7個節(jié)點組成小蛇.蛇能夠在屏幕上移動,屏幕上隨機位置出現(xiàn)食物,當(dāng)蛇吃到食物后蛇的身體會增長一截同時移動速度也會響應(yīng)加快。蛇不能向相反方向移動,例如蛇頭朝南時則不能向北移動。當(dāng)蛇頭碰到墻壁或者碰到自己的身體時游戲結(jié)束。3. 記錄玩家分?jǐn)?shù)當(dāng)游戲結(jié)束后,顯示玩家在游戲中所獲得的分?jǐn)?shù)。4游戲設(shè)計4.1程序流程設(shè)計本游戲的流程如下圖41所示。開始初始化界面

39、和蛇身放置食物蛇開始運動蛇吃到食?蛇長大蛇死亡?繼續(xù)續(xù)?退出界面NNYNY游戲者按鍵選擇Y如圖414。2概要設(shè)計4。2。1模塊劃分從面向?qū)ο蟪绦蛟O(shè)計的角度,本項目總體可以分為游戲界面模塊、數(shù)據(jù)存儲模塊和控制模塊。 如下圖42所示。如圖424.2。2游戲主界面模塊 游戲界面主框架主要包括游戲圖形區(qū)域界面、游戲的開始按鈕、暫停按鈕、游戲的退出按鈕. 游戲界面主框架的主要結(jié)構(gòu)圖如圖4-3所示。如圖4-34。2。3游戲控制模塊  游戲控制模塊主要通過手機鍵盤上的按鈕來控制游戲的開始、游戲的退出這兩個功能以及控制游戲分?jǐn)?shù)變化.在這個模塊中,需要給各個按鈕

40、添加響應(yīng)事件代碼,來對上述的功能加以進(jìn)一步的實現(xiàn)。游戲控制模塊的主要框架如圖4-4所示.如圖4-44.3 模塊實現(xiàn)原理 4。3.1游戲界面模塊實現(xiàn) 1。 實現(xiàn)游戲背景 本游戲采用Activity作為游戲背景的載體,在Android中一個Activity就相當(dāng)于windows中的一個窗口,Activity上可以放置許多類型的控件。一個activity主要有三個狀態(tài)。 當(dāng)在屏幕前臺時(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運行的狀態(tài)。它就是相應(yīng)用戶操作的activity。  當(dāng)它失去焦點但仍然對用戶可見時,它處于暫停狀態(tài)

41、。即是:在它之上有另外一個activity。這個activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對用戶可見。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個activity。如果它完全被另一個activity覆蓋是,它處于停止?fàn)顟B(tài).它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見,所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會殺死這個activity. 如果一個activity處于暫停或停止?fàn)顟B(tài),系統(tǒng)可以通過要求它結(jié)束(調(diào)用它的 finish

42、() 方法)或直接殺死它的進(jìn)程來將它驅(qū)出內(nèi)存。當(dāng)它再次為用戶可見的時候,它只能完全重新啟動并恢復(fù)至以前的狀態(tài)。 當(dāng)一個activity從這個狀態(tài)轉(zhuǎn)變到另一個狀態(tài)時,它被以下列protected方法所通知。 void onCreate(Bundle savedInstanceState) 、void onStart() 、void onRestart() 、void onResume() 、void onPause() 、void onStop()

43、 、void onDestroy() 2。 實現(xiàn)蛇的身體 蛇可以看做是一個個節(jié)點組成的,因此可以用一個鏈表來存儲蛇身的元素,在畫蛇時遍歷這個鏈表講里面的元素一一畫出,這樣就實現(xiàn)了一條蛇. 3。 實現(xiàn)蛇的移動 用一個timer(定時器)來不斷地刷新游戲畫面,每刷新一次就再蛇頭的前面(鏈表的尾部)增加一個新元素,同時把蛇尾的一個元素刪掉,這樣從視覺上看起來就實現(xiàn)了蛇的移動。 4。 實現(xiàn)蛇吃食物 蛇移動的過程中如果蛇頭的坐標(biāo)與食物出現(xiàn)的坐標(biāo)重合了,那么就在蛇頭的位置增加一個元素同時不刪除蛇尾

44、的最后一個元素,這樣蛇每遲到一個食物 身體就會變長一截。4.3.2游戲控制模塊實現(xiàn) 1。 實現(xiàn)操作蛇的移動方向 在Android系統(tǒng)中,手機上的每個按鈕都會有一個對應(yīng)的鍵值跟它對應(yīng),所在可以給對應(yīng)的按鈕設(shè)置監(jiān)聽器OnClickListener,監(jiān)聽器是一個接口,該接口中有一個方法onClick(View v).當(dāng)按鈕被點擊的時候系統(tǒng)會自動調(diào)用該監(jiān)聽器的onClick(View v)方法。所以實現(xiàn)游戲控制的具體代碼將被寫到該方法中。 因為本游戲中不允許蛇向與蛇頭相反的方向移動,所以當(dāng)用戶操作時需要判斷用戶操作的方向是不是跟規(guī)則

45、沖突,若沖突則無視該操作,若不沖突則響應(yīng)該操作,所以需要用一個變量來記錄蛇頭的當(dāng)前方向。2. 實現(xiàn)游戲暫停 在Activity的生命周期中,有一個onPause()方法。該方法在Activity變得不可見的時候被系統(tǒng)自動調(diào)用。在玩游戲過程中,如果有來電或是其它事件中斷,這時應(yīng)該把當(dāng)前狀態(tài)保存。以便返回時,還可以繼續(xù)玩游戲。這就使用onSaveInstanceState實現(xiàn)保存當(dāng)前狀態(tài). 3. 實現(xiàn)游戲恢復(fù) Activity生命周期的onResume()方法。該方法在Activity從不可見的狀態(tài)下變得可見時被系統(tǒng)自動調(diào)用。在用戶接完電話或者在暫

46、停狀態(tài)下觸摸屏幕后可以在該生命周期方法中對游戲進(jìn)行恢復(fù).4. 實現(xiàn)游戲退出 當(dāng)一個Activity退出或者被調(diào)用finish()方法后,系統(tǒng)會調(diào)用其生命周期方法onDestroy().當(dāng)用戶退出游戲時,可以在這個方法中對資源進(jìn)行釋放。4。3.3TileView類的設(shè)計 TileView是游戲的界限,即蛇頭若觸碰到界限則游戲結(jié)束。因為界限也需要被現(xiàn)實到屏幕上,所以TileView需要繼承Android.view.View類.Android.view。View類是描繪塊狀視圖的基類。View會繪制一個包含Drawing是event事件的方形塊。View是所有與用戶交互

47、的組件的Widgets的基類(Buttons,textField等),View的子類ViewGroup是layouts類的基類,layouts類可以包含其他的View/ViewGroup組件并且定義展示的屬性. 實現(xiàn)一個View,首先需要實現(xiàn)框架中一些所有Views公用的方法。不必重寫所有所有的方法,可以僅僅重寫onDraw(Android。graphics。Canvas)。4.3。4 SnakeView類的設(shè)計 SnakeView是本游戲的業(yè)務(wù)邏輯類,該類中包含了游戲數(shù)據(jù)和一些處理數(shù)據(jù)的方法以及一些內(nèi)部類.SnakeView的方法摘要。 1。 判斷按鍵

48、的方法 在Android手機上,每個按鍵都會有一個唯一的鍵值與它對應(yīng),可以通過獲得鍵值來判斷哪個鍵被按下了并采取相應(yīng)的動作。 2. 設(shè)置提示信息的方法 通過程序判斷動態(tài)地設(shè)置用戶提示信息,如游戲結(jié)束。 3。 在隨機位置出現(xiàn)食物的方法 通過隨機數(shù)在屏幕范圍內(nèi)隨機出現(xiàn)一個食物,但是不允許同一時刻有兩個食物存在。4. 刷新蛇的當(dāng)前位置的方法 主要用于刷新蛇的當(dāng)前位置。 5。 判斷蛇是否吃到食物的方法 因為食物和蛇都會有一個坐標(biāo),所以可以通過判斷蛇頭坐標(biāo)是否跟食物坐標(biāo)相等的方法來判斷

49、蛇是否吃到了食物。4。4  程序主結(jié)構(gòu) 本次所設(shè)計貪吃蛇游戲的程序主結(jié)構(gòu)如圖45所示。 如圖4-5 4。5  程序類圖該程序由以下三個類實現(xiàn),分別為TileView,Snake,SnakeView。各個類之間的關(guān)系及所包括的方法如圖4-6所示.4.6 詳細(xì)代碼4.6.1 Snake類的詳細(xì)設(shè)計 Snake類是蛇頭以及蛇頭的控制部分,包括判斷newDirection和oldDirection是否為相反方向,用于選取有效方向。判斷蛇頭是否和蛇身的某個節(jié)點的坐標(biāo)重合,即蛇是否吃到自己.實現(xiàn)蛇身沿著蛇頭的軌跡移動。根據(jù)方向

50、鍵,改變蛇頭的x、y的值,即改變方向.以及讓蛇不停走動。Snake.javapublic class TileView extends View /* Parameters controlling the size of the tiles and their range within view. * Width/Height are in pixels, and Drawables will be scaled to fit to these dimensions. X/Y Tile Counts are the number of tiles that will be drawn. / p

51、rotected static int mTileSize; / 。tile.。.。.。.。 protected static int mXTileCount;/ 。.。x.。.。tile。.。.。 protected static int mYTileCount; private static int mXOffset;/ 。.。.。 private static int mYOffset; / A hash that maps integer handles specified by the subclasser to the * drawable that will be used fo

52、r that reference */ private Bitmap mTileArray; / .。tile。.。.。顣ÿ。.tile.。.bitmap。.mTileArray1。bitmap.。.。.。 /* * A two-dimensional array of integers in which the number represents the index of the tile that should be drawn at that locations / private int mTileGrid; / 。.。tile.。顣。int11=0。.int12=1。.。.

53、。 / .。.。ô。.。.。.。 private final Paint mPaint = new Paint();/ .。.。.。.。ú。.。.。. public TileView(Context context, AttributeSet attrs, int defStyle) super(context, attrs, defStyle); / .。õ.。TypeArray。.。.。google。¡.google。.。飬。.。.。 TypedArray a = context。obtainStyledAttributes(attrs, R.sty

54、leable。TileView); mTileSize = a。getInt(R.styleable.TileView_tileSize, 12); a。recycle(); public TileView(Context context, AttributeSet attrs) super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R。styleable。TileView); mTileSize = a.getInt(R。styleable.TileView_tileSize, 12); a.r

55、ecycle(); / Rests the internal array of Bitmaps used for drawing tiles, and sets the maximum index of tiles to be inserted * param tilecount */ public void resetTiles(int tilecount) mTileArray = new Bitmaptilecount; / 。.。.。.view。.。.。.。.view.。0。.。.layoutÿ.。view.。.。.。 Override protected void onSi

56、zeChanged(int w, int h, int oldw, int oldh) mXTileCount = (int) Math.floor(w / mTileSize); mYTileCount = (int) Math。floor(h / mTileSize); mXOffset = (w (mTileSize mXTileCount)) / 2); mYOffset = (h - (mTileSize * mYTileCount) / 2); mTileGrid = new intmXTileCountmYTileCount; clearTiles(); / * Function

57、 to set the specified Drawable as the tile for a particular * integer key。 * param key param tile .。.。.Key.。.tile。tile。.。.。.drawable。.。bitmap。 / public void loadTile(int key, Drawable tile) Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas

58、(bitmap); tile.setBounds(0, 0, mTileSize, mTileSize); tile。draw(canvas); mTileArraykey = bitmap; /* Resets all tiles to 0 (empty) / public void clearTiles() for (int x = 0; x < mXTileCount; x+) for (int y = 0; y < mYTileCount; y+) setTile(0, x, y); / * Used to indicate that a particular tile (

59、set with loadTile and referenced * by an integer) should be drawn at the given x/y coordinates during the * next invalidate/draw cycle. * param tileindex * param x param y 。.。.ÿ。tile。.。.。.。.。tileindex.。.。.mTileArray。index */ public void setTile(int tileindex, int x, int y) mTileGridxy = tileindex; / 。.。.。.。.。.。.。ÿ。tile。.。.。.。.。tile.draw.canvas。. Override public void onDraw(Canvas canvas) super.onDraw(canvas); for (int x = 0; x < mXTileCount; x += 1) for (int y = 0; y mYTileCount; y += 1) if (mTileGridxy 0) canvas。drawBitm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論