




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、濱江學院 智能手機程序設計題 目 安卓智能手機貪吃蛇游戲設計 院 系 濱江學院計算機系專 業(yè) 信息工程 學生姓名 周盈偉 學 號 指導教師 高超 二0 一四 年 六 月 一日目錄第一章 緒論31.1開發(fā)背景31.1.1安卓系統(tǒng)簡介31.1.2游戲簡介31.2開發(fā)目的及意義41.3開發(fā)環(huán)境及工具4第二章需求分析52.1游戲界面分析52.2游戲角色分析52.3游戲控制分析52.4 可行性分析6第三章總體設計73.1系統(tǒng)功能模塊層次圖73.2運行機制83.3貪吃蛇功能流程圖10第四章 詳細設計與實現(xiàn)124.1 TiltView類124.2 SnakeView類144.3 界面設計16第五章 測試20
2、5.1游戲功能測試205.2游戲控制測試205.3游戲界面測試205.4測試結(jié)果20第六章結(jié)論21第一章 緒論1.1開發(fā)背景1.1.1安卓系統(tǒng)簡介安卓系統(tǒng)作為新興的手機操作系統(tǒng),在問世不久,變風靡全球,占領手機操作系統(tǒng)里很大的市場份額,與蘋果,諾基亞三分天下,Android是基于Linux開放性內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機操作系統(tǒng)。 早期由原名為Android的公司開發(fā),谷歌在2005年收購Android.Inc后,繼續(xù)對Android系統(tǒng)開發(fā)運營,它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提
3、供基本功能,其他的應用軟件則由各公司自行開發(fā),部分程序以Java編寫。1.1.2游戲簡介1976年,Gremlin平臺推出了一款經(jīng)典街機游戲Blockade。游戲中,兩名玩家分別控制一個角色在屏幕上移動,所經(jīng)之處砌起圍欄。角色只能向左、右方向90度轉(zhuǎn)彎,游戲目標保證讓對方先撞上屏幕或圍欄。聽起來有點復雜?其實就是下面這個樣子: 基本上就是兩條每走一步都會長大的貪吃蛇比誰后完蛋,玩家要做的就是避免撞上障礙物和越來越長的身體。更多照片、視頻可以看 Games D Base 的介紹。 Blockade 很受歡迎,類似的游戲先后出現(xiàn)在 Atari 2600、TRS-80、蘋果 2 等早期游戲機、計算機
4、上。但真正讓這種游戲形式紅遍全球的還是21年后隨諾基亞手機走向世界的貪吃蛇游戲Snake。貪吃蛇游戲是一款老牌的手機游戲,同時也是一款比較需要耐心地游戲。貪吃蛇游戲就是一條小蛇,不停地在屏幕上游走,吃各個方向出現(xiàn)的食物,越吃越長。只要蛇頭碰到屏幕四周,或者碰到自己的身子,小蛇就立即斃命。玩“貪吃蛇游戲”,難度最大的不是蛇長得很長的時候,而是開始的時候。那時蛇身很短,看上去難度不大,卻最容易死掉,因為把玩一條小蛇讓人容易走神,失去耐心。1.2開發(fā)目的及意義通過本次課程設計,了解android軟件的開發(fā)過程,熟悉并掌握JAVA語言,HTML. 程序關鍵在于表示蛇的圖形及蛇的移動。用一個小矩形快表示
5、蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用倆節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動,圖形的實現(xiàn)是從蛇頭新位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義兩個結(jié)構(gòu)體:食物與蛇 目的 本程序?qū)崿F(xiàn)主要技巧在于java語言的應用。目的在于提高編程的水平。1.3開發(fā)環(huán)境及工具
6、采用eclipse開發(fā)工具,在windows xp下進行,基于安卓2.2操作系統(tǒng)。環(huán)境搭建:1. JDK安裝2. Eclipse安裝3. Android SDK安裝4. ADT安裝創(chuàng)建AVD第二章 需求分析2.1游戲界面分析首先應解決操作界面的問題,操作界面應該人性化設計,提示玩家當前游戲狀態(tài),何時開始,按什么按鍵開始游戲,開始游戲之后,在游戲界面中,以坐標的形式對整體界面進行劃分,將界面劃分為許多個小方格,還應設計蛇的樣式,蘋果的樣式和墻的樣式,在蛇吃到蘋果后的樣式,還有游戲結(jié)束或暫停時,界面的顯示,游戲結(jié)束后,要顯示所得的分數(shù)。2.2游戲角色分析設置游戲貪吃蛇初始時由固定個小矩形塊組成,并
7、且,游戲中,要隨機出現(xiàn)由單個矩形塊構(gòu)成的蘋果,并且在設置蘋果的時候,還要設置,不能使將要出現(xiàn)的蘋果出現(xiàn)在蛇的身體之下,在蛇吃到蘋果的時候,要將蛇的身體加長,隨著游戲的進行,蛇移動的速度也要加快。此外,要判定游戲成功與失敗的條件,當蛇的頭和尾相撞或者蛇的頭部撞到了墻上,則游戲失敗,此時游戲結(jié)束,界面顯示所得分數(shù),當累積分數(shù)達到一定標準則游戲成功。另外蛇的移動原理,由外部按鍵設置監(jiān)聽控制蛇頭的移動方向,在方向的指引下進行移動,蛇及蘋果的位置都是由坐標數(shù)組確定的,蘋果的位置也是隨機產(chǎn)生的蛇的移動原理是后一矩形塊覆蓋前一個矩形塊。當一個蘋果被吃掉的時候,要自動生成并顯示下一個蘋果的位置。這些都是在設計
8、過程中需要實現(xiàn)的。2.3游戲控制分析游戲中需要通過按鍵對蛇的移動方位進行控制,共需要設置四個方位,分別是“東”“西”“南”“北”,在按鍵上用“上”“下”“左”“右”,按鍵與執(zhí)行部分便涉及到監(jiān)聽,通過監(jiān)聽指示蛇的運動,此外,要設置蛇移動是的默認方向為“上”游戲開始時也是由“上”鍵啟動,暫停后根據(jù)玩家的操作自動控制蛇的移動方向,設計過程中還應注意,蛇的移動只能是90度偏轉(zhuǎn),不能進行180度偏轉(zhuǎn)。此外還要設置游戲的四種狀態(tài),準備,運行,暫停,結(jié)束,蛇體變長的時候要用累加器進行加分。游戲暫停時,要對當前游戲的參數(shù)和狀態(tài)進行保存。2.4 可行性分析 貪吃蛇游戲是一種簡單的大眾的游戲,自從計算機實現(xiàn)以來,
9、深受廣大電腦玩家的喜愛,做一個簡單的貪吃蛇小游戲。 貪吃蛇的核心算法時如何實現(xiàn)移動和吃掉食物,沒有碰到食物的時候,把當前運動方向上的下個節(jié)點入隊,并以蛇節(jié)點的顏色繪制這個節(jié)點,然后把頭指針所指的節(jié)點出隊,并以游戲框架內(nèi)部背景色重繪出隊的節(jié)點,這樣就可以達到移動的效果。而在吃到食物的時候,則只需把食物入隊即可。實現(xiàn)貪吃蛇的基本的蛇身移動、吃到食物身體增長、和碰到墻壁或自身死亡,能夠暫停和開始。 本次設計我將主要運用java語言來完成。Java語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應用程序不用修改就可在不同的軟硬件平臺上運行。由于Java主要用于網(wǎng)絡應用程序開發(fā),
10、因此對安全性有較高的要求。如果沒有安全保證,用戶從網(wǎng)絡下載程序執(zhí)行就非常危險。Java通過自己的安全機制防止了病毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。第三章 總體設計3.1系統(tǒng)功能模塊層次圖工程中包括4個Activity,分別為Snake(主界面)、Game(游戲界面)、Help(游戲說明界面)、AuthorView(作者信息界面),通過不同Activity之間的轉(zhuǎn)換實現(xiàn)不同界面之間的切換。Snake(Activity)繼承了SnakeView類,SnakeView類繼承了TileView類。TileView類繼承了View其實 Snake的工程蠻簡單的,源文件就三個: Snake.ja
11、va SnakeView.java TileView.java。 Snake類是這個游戲的入口點, TitleView類進行游戲的繪畫, SnakeView類則是對游戲控制操作的處理。 Coordinate, RefreshHandler是 2個輔助類,也是 SnakeView類中的內(nèi)部類。其中, Coordinate是一個點的坐標( x, y), RefreshHandler將 RefreshHandler對象綁定某個線程并給它發(fā)送消息。如下圖:類圖3.2運行機制任何游戲都需要有個引擎來推動游戲的運行,最簡化的游戲引擎就是:在一個線程中 While循環(huán),檢測用戶操作,對用戶的操作作出反應,更
12、新游戲的界面,直到用戶退出游戲。在 Snake這個游戲中,輔助類 RefreshHandler繼承自 Handler,用來把 RefreshHandler與當前線程進行綁定,從而可以直接給線程發(fā)送消息并處理消息。注意一點: Handle對消息的處理都是異步。 RefreshHandler在 Handler的基礎上增加 sleep()接口,用來每隔一個時間段后給當前線程發(fā)送一個消息。 handleMessage()方法在接受消息后,根據(jù)當前的游戲狀態(tài)重繪界面,運行機制如下: 活動圖運行機制這比較類似定時器的概念,在特定的時刻發(fā)送消息,根據(jù)消息處理相應的事件。 update()與 sleep()間
13、接的相互調(diào)用就構(gòu)成了一個循環(huán)。這里要注意: mRedrawHandle綁定的是 Avtivity所在的線程,也就是程序的主線程;另外由于 sleep()是個異步函數(shù),所以 update()與 sleep()之間的相互調(diào)用才沒有構(gòu)成死循環(huán)。最后分析下游戲數(shù)據(jù)的保存機制,如下: 活動圖這里考慮了 Activity的生命周期:如果用戶在游戲期間離開游戲界面,游戲暫停;或者由于內(nèi)存比較緊張, Android關閉游戲釋放內(nèi)存,那么當用戶返回游戲界面的時候恢復到上次離開時的界面。3.3貪吃蛇功能流程圖 開始始初化蛇和蘋果屏幕顯示蛇和蘋果位置蛇開始移動,后坐標覆蓋前坐標是否有按鍵否根據(jù)上次方向更新坐標是根據(jù)
14、按鍵不同在原坐標基礎上改變蛇的坐標位置更新方向是否吃到蘋果是蛇身加1否是否越界或撞到蛇身是游戲結(jié)束否第四章 詳細設計與實現(xiàn)4.1 TiltView類TiltView的基類是View,包含了貪吃蛇游戲畫面的各個設定參數(shù),主要負責繪制游戲畫面。TileView類定義如下:public class TileView extends View private static final String tag = yao;protected static int mTileSize = 20;/方格的邊長protected static int mXTileCount;/X軸上方格的個數(shù)protected
15、 static into mYTileCount;/Y軸上方格的個數(shù)private static int mXOffset;/繪圖時X軸上的起始坐標private static int mYOffset;/繪圖時Y軸上的起始坐標private Bitmap mTileArray;/位圖數(shù)組private int mTileGrid;/映射整個游戲畫面的數(shù)組private final Paint mPaint = new Paint();/畫筆public TileView(Context context, AttributeSet attrs) super(context, attrs);Lo
16、g.i(tag, TileView Constructor);Log.i(tag, mTileSize= + mTileSize);/重置位圖數(shù)組的長度public void resetTiles(int tilecount) mTileArray = new Bitmaptilecount;Override/適應各種分辨率的屏幕,當改變屏幕大小尺寸時,同時修改tile的相關計數(shù)指標protected void onSizeChanged(int w, int h, int oldw, int oldh) Log.i(tag, onSizeChanged, + w= + w + h= + h
17、+ oldw= + oldw + oldh= + oldh);mXTileCount = (int) Math.floor(w / mTileSize);mYTileCount = (int) Math.floor(h / mTileSize);Log.i(tag, mXTileCount= + mXTileCount);Log.i(tag, mYTileCount= + mYTileCount);mXOffset = (w - (mTileSize * mXTileCount) / 2);mYOffset = (h - (mTileSize * mYTileCount) / 2);Log.i
18、(tag, mXOffset= + mXOffset);Log.i(tag, mYOffset= + mYOffset);mTileGrid = new intmXTileCountmYTileCount;clearTiles();/這里做了一個 Drawable 到 bitmap 的轉(zhuǎn)換public void loadTile(int key, Drawable tile) Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(
19、bitmap);tile.setBounds(0, 0, mTileSize, mTileSize);tile.draw(canvas);mTileArraykey = bitmap;/清空圖形顯示public void clearTiles() Log.i(tag, TileView.clearTiles);for (int x = 0; x mXTileCount; x+) for (int y = 0; y mYTileCount; y+) setTile(0, x, y);/在相應的坐標位置繪制相應的磚塊public void setTile(int tileindex, int x,
20、 int y) mTileGridxy = tileindex;/ onDrawOverride/將直接操作的畫布繪制到手機界面上public void onDraw(Canvas canvas) Log.i(tag, onDraw);super.onDraw(canvas);Bitmap bmp;float left;float top;for (int x = 0; x mXTileCount; x+) for (int y = 0; y 0) bmp = mTileArraymTileGridxy;left = x * mTileSize + mXOffset;top = y * mTi
21、leSize + mYOffset;canvas.drawBitmap(bmp, left, top, mPaint);4.2 SnakeView類SnakeView類定義了游戲運行時的畫面改變及蛇體和果子的更新方法。首先用Handler機制實現(xiàn)定時刷新,代碼如下:class RefreshHandler extends Handler /獲取消息并處理Overridepublic void handleMessage(Message msg) SnakeView.this.update();SnakeView.this.invalidate();/刷新view為基類的界面Log.i(tag,
22、 handleMessage|Thread Name=+Thread.currentThread().getName(); /定時發(fā)送消息給UI線程,以此達到更新效果public void sleep(long delayMillis) this.removeMessages(0); /清空消息隊列,Handler進入對新消息的等待 Log.i(tag, sleep|Thread Name=+Thread.currentThread().getName();/定時發(fā)送新消息,激活handler sendMessageDelayed(obtainMessage(0), delayMillis);
23、定義SnakeView()函數(shù)初始化游戲,代碼如下:public SnakeView(Context context, AttributeSet attrs) super(context, attrs);Log.i(tag, SnakeView Constructor);initSnakeView();/構(gòu)造函數(shù)中,初始化游戲定義initSnakeView()初始化SnakeView類,代碼如下:private void initSnakeView() Log.e(tag, initSnakeView);/設置焦點,由于存在 文字界面 和 游戲界面的跳轉(zhuǎn)。這個focus是不可或缺的。setFo
24、cusable(true);/取得資源中的圖片,加載到 磚塊字典 中。 Resources r = this.getContext().getResources();resetTiles(4);loadTile(RED_STAR, r.getDrawable(R.drawable.redstar);loadTile(YELLOW_STAR, r.getDrawable(R.drawable.yellowstar);loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar);此外還定義了updateWalls()、updateApples()
25、、updateSnake()繪制墻、果子、蛇,以及更新畫面函數(shù)、保存位置坐標函數(shù)等,具體代碼請詳見目錄。4.3界面設計界面設計包括游戲主界面(Snake)、游戲說明界面、游戲界面的設計。界面的設計采用的是xml文檔形式,在xml文檔中規(guī)劃好界面布局布局后,分別在java文件中聲明。主界面設計:主界面包括一個 TextView及布局設定,其main.xml文檔如下至此,全部界面設計完成,但還有最重要的一步,就是將所有的Activity注冊到AndroidManifest.xml中。AndroidManifest.xml文檔如下: 4.4項目演示 游戲前畫面游戲中界面游戲結(jié)束時畫面第五章 測試5.
26、1游戲功能測試經(jīng)過在模擬器上的測試,本軟件能書案例實現(xiàn)其功能,達到了小蛇在屏幕上的移動,小蛇吃蘋果,蘋果隨機出現(xiàn)的功能,當小蛇頭尾相撞或與墻相撞時,游戲結(jié)束.這些均在測試中得到驗證。5.2游戲控制測試在測試過程中,也著重對游戲的控制功能進行了測試,游戲是通過方向鍵的控制來實現(xiàn)的,在游戲剛開始的階段,上下左右四個方位的控制都很成功,但隨著蛇移動的速度越來越快,按鍵的控制反應會出現(xiàn)滯后,通過分析,可能是由于蛇的運動速度超過了鍵盤的反應速度造成的,與軟件無關,所以得出結(jié)論,游戲的控制設計也是成功的。5.3游戲界面測試游戲運行之后,就是在畫面中出現(xiàn)蛇和兩個蘋果的初始位置,并且是靜止的,并且在畫面上還會出現(xiàn)操作提示“按上鍵開始游戲”,游戲運行過程中,除了蛇的運動之外,界面大題沒有變化,分別由綠色矩形塊的圍墻,黃色矩形塊的蘋果和紅色矩形塊的蛇身(蛇頭為黃色)組成。游戲結(jié)束后,界面處于暫停狀態(tài),提
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年萍鄉(xiāng)市稅務系統(tǒng)遴選面試真題附解析含答案
- 某智慧園區(qū)中心變電所運行維護服務競標方案
- 魯北監(jiān)獄醫(yī)用設備需求
- 老年人居家醫(yī)療服務試點工作方案 (一)
- 老年患者護理
- 老師的職業(yè)道德培訓課件
- 2025年安全工作述職報告范本(六)
- 車棚鋼結(jié)構(gòu)焊接與質(zhì)量檢測服務合同
- 建筑工程采購合同施工進度與質(zhì)量跟蹤服務協(xié)議
- 老妖精消防視頻課件
- 中國硒化汞行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2029版
- 水庫安保服務方案
- INSAR技術(shù)在城市地面沉降監(jiān)測中的應用
- 產(chǎn)品審核VDA6.5培訓課件
- 艾滋病乙肝梅毒知識講座
- 九年級化學下冊 第11單元 課題2 化學肥料課件 新人教版
- 暖氣片報價單范本
- 臨床醫(yī)學研究中心年度考核細則
- PSSE軟件操作說明
- 22S803 圓形鋼筋混凝土蓄水池
- 級配碎石試驗段施工總結(jié)報告
評論
0/150
提交評論