版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 智能手機(jī)程序設(shè)計</b></p><p> 題 目 安卓智能手機(jī)貪吃蛇游戲設(shè)計 </p><p> 二0 一四 年 六 月 一日</p><p><b> 目錄</b></p><p><b> 第一章 緒論
2、3</b></p><p><b> 1.1開發(fā)背景3</b></p><p> 1.1.1安卓系統(tǒng)簡介3</p><p> 1.1.2游戲簡介3</p><p> 1.2開發(fā)目的及意義4</p><p> 1.3開發(fā)環(huán)境及工具4</p><p
3、> 第二章需求分析5</p><p> 2.1游戲界面分析5</p><p> 2.2游戲角色分析5</p><p> 2.3游戲控制分析5</p><p> 2.4 可行性分析6</p><p> 第三章總體設(shè)計7</p><p> 3.1系統(tǒng)功能模塊層次圖
4、7</p><p><b> 3.2運(yùn)行機(jī)制8</b></p><p> 3.3貪吃蛇功能流程圖10</p><p> 第四章 詳細(xì)設(shè)計與實現(xiàn)12</p><p> 4.1 TiltView類12</p><p> 4.2 SnakeView類14</p>
5、<p> 4.3 界面設(shè)計16</p><p><b> 第五章 測試20</b></p><p> 5.1游戲功能測試20</p><p> 5.2游戲控制測試20</p><p> 5.3游戲界面測試20</p><p> 5.4測試結(jié)果20</p&
6、gt;<p><b> 第六章結(jié)論21</b></p><p><b> 第一章 緒論</b></p><p><b> 1.1開發(fā)背景</b></p><p> 1.1.1安卓系統(tǒng)簡介</p><p> 安卓系統(tǒng)作為新興的手機(jī)操作系統(tǒng),在問世不久
7、,變風(fēng)靡全球,占領(lǐng)手機(jī)操作系統(tǒng)里很大的市場份額,與蘋果,諾基亞三分天下,Android是基于Linux開放性內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。 早期由原名為"Android"的公司開發(fā),谷歌在2005年收購"Android.Inc"后,繼續(xù)對Android系統(tǒng)開發(fā)運(yùn)營,它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底
8、層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。</p><p><b> 1.1.2游戲簡介</b></p><p> 1976年,Gremlin平臺推出了一款經(jīng)典街機(jī)游戲Blockade。游戲中,兩名玩家分別控制一個角色在屏幕上移動,所經(jīng)之處砌起圍欄。角色只能向左、右方向90度轉(zhuǎn)彎,游戲目標(biāo)保證讓對方先撞上屏幕或圍欄。
9、 聽起來有點復(fù)雜?其實就是下面這個樣子: 基本上就是兩條每走一步都會長大的貪吃蛇比誰后完蛋,玩家要做的就是避免撞上障礙物和越來越長的身體。更多照片、視頻可以看 Games D Base 的介紹。 Blockade 很受歡迎,類似的游戲先后出現(xiàn)在 Atari 2600、TRS-80、蘋果 2 等早期游戲機(jī)、計算機(jī)上。但真正讓這種游戲形式紅遍全球的還是21年后隨諾基亞手機(jī)走向世界的貪吃蛇游戲——Snake。</p&
10、gt;<p> 貪吃蛇游戲是一款老牌的手機(jī)游戲,同時也是一款比較需要耐心地游戲。貪吃蛇游戲就是一條小蛇,不停地在屏幕上游走,吃各個方向出現(xiàn)的食物,越吃越長。只要蛇頭碰到屏幕四周,或者碰到自己的身子,小蛇就立即斃命。玩“貪吃蛇游戲”,難度最大的不是蛇長得很長的時候,而是開始的時候。那時蛇身很短,看上去難度不大,卻最容易死掉,因為把玩一條小蛇讓人容易走神,失去耐心。</p><p> 1.2開發(fā)目的
11、及意義</p><p> 通過本次課程設(shè)計,了解android軟件的開發(fā)過程,熟悉并掌握J(rèn)AVA語言,HTML. 程序關(guān)鍵在于表示蛇的圖形及蛇的移動。用一個小矩形快表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊,蛇頭用倆節(jié)表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當(dāng)前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置
12、,而后蛇的身體隨蛇頭移動,圖形的實現(xiàn)是從蛇頭新位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫矩形塊和覆蓋矩形塊。為了便于理解,定義兩個結(jié)構(gòu)體:食物與蛇 目的 本程序?qū)崿F(xiàn)主要技巧在于java語言的應(yīng)用。目的在于提高編程的水平。</p><p> 1.3開發(fā)環(huán)境及工具</p><p>
13、; 采用eclipse開發(fā)工具,在windows xp下進(jìn)行,基于安卓2.2操作系統(tǒng)。</p><p><b> 環(huán)境搭建:</b></p><p><b> 1. JDK安裝</b></p><p> 2. Eclipse安裝</p><p> 3. Android SDK安裝&l
14、t;/p><p> 4. ADT安裝創(chuàng)建AVD</p><p><b> 需求分析</b></p><p><b> 2.1游戲界面分析</b></p><p> 首先應(yīng)解決操作界面的問題,操作界面應(yīng)該人性化設(shè)計,提示玩家當(dāng)前游戲狀態(tài),何時開始,按什么按鍵開始游戲,開始游戲之后,在游戲界面中,
15、以坐標(biāo)的形式對整體界面進(jìn)行劃分,將界面劃分為許多個小方格,還應(yīng)設(shè)計蛇的樣式,蘋果的樣式和墻的樣式,在蛇吃到蘋果后的樣式,還有游戲結(jié)束或暫停時,界面的顯示,游戲結(jié)束后,要顯示所得的分?jǐn)?shù)。</p><p><b> 2.2游戲角色分析</b></p><p> 設(shè)置游戲貪吃蛇初始時由固定個小矩形塊組成,并且,游戲中,要隨機(jī)出現(xiàn)由單個矩形塊構(gòu)成的蘋果,并且在設(shè)置蘋果的時
16、候,還要設(shè)置,不能使將要出現(xiàn)的蘋果出現(xiàn)在蛇的身體之下,在蛇吃到蘋果的時候,要將蛇的身體加長,隨著游戲的進(jìn)行,蛇移動的速度也要加快。此外,要判定游戲成功與失敗的條件,當(dāng)蛇的頭和尾相撞或者蛇的頭部撞到了墻上,則游戲失敗,此時游戲結(jié)束,界面顯示所得分?jǐn)?shù),當(dāng)累積分?jǐn)?shù)達(dá)到一定標(biāo)準(zhǔn)則游戲成功。另外蛇的移動原理,由外部按鍵設(shè)置監(jiān)聽控制蛇頭的移動方向,在方向的指引下進(jìn)行移動,蛇及蘋果的位置都是由坐標(biāo)數(shù)組確定的,蘋果的位置也是隨機(jī)產(chǎn)生的蛇的移動原理是后一
17、矩形塊覆蓋前一個矩形塊。當(dāng)一個蘋果被吃掉的時候,要自動生成并顯示下一個蘋果的位置。這些都是在設(shè)計過程中需要實現(xiàn)的。</p><p><b> 2.3游戲控制分析</b></p><p> 游戲中需要通過按鍵對蛇的移動方位進(jìn)行控制,共需要設(shè)置四個方位,分別是“東”“西”“南”“北”,在按鍵上用“上”“下”“左”“右”,按鍵與執(zhí)行部分便涉及到監(jiān)聽,通過監(jiān)聽指示蛇的運(yùn)動
18、,此外,要設(shè)置蛇移動是的默認(rèn)方向為“上”</p><p> 游戲開始時也是由“上”鍵啟動,暫停后根據(jù)玩家的操作自動控制蛇的移動方向,設(shè)計過程中還應(yīng)注意,蛇的移動只能是90度偏轉(zhuǎn),不能進(jìn)行180度偏轉(zhuǎn)。此外還要設(shè)置游戲的四種狀態(tài),準(zhǔn)備,運(yùn)行,暫停,結(jié)束,蛇體變長的時候要用累加器進(jìn)行加分。游戲暫停時,要對當(dāng)前游戲的參數(shù)和狀態(tài)進(jìn)行保存。</p><p> 2.4 可行性分析 貪吃蛇游戲
19、是一種簡單的大眾的游戲,自從計算機(jī)實現(xiàn)以來,深受廣大電腦玩家的喜愛,做一個簡單的貪吃蛇小游戲?! ?貪吃蛇的核心算法時如何實現(xiàn)移動和吃掉食物,沒有碰到食物的時候,把當(dāng)前運(yùn)動方向上的下個節(jié)點入隊,并以蛇節(jié)點的顏色繪制這個節(jié)點,然后把頭指針?biāo)傅墓?jié)點出隊,并以游戲框架內(nèi)部背景色重繪出隊的節(jié)點,這樣就可以達(dá)到移動的效果。而在吃到食物的時候,則只需把食物入隊即可。實現(xiàn)貪吃蛇的基本的蛇身移動、吃到食物身體增長、和碰到墻壁或自身死亡,能夠暫停和開
20、始?! ?本次設(shè)計我將主要運(yùn)用java語言來完成。Java語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺上運(yùn)行?! ∮捎贘ava主要用于網(wǎng)絡(luò)應(yīng)用程序開發(fā),因此對安全性有較高的要求。如果沒有安全保證,用戶從網(wǎng)絡(luò)下載程序執(zhí)行就非常危險。Java通過自己的安全機(jī)制防止了病毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。</p><p><b>
21、 總體設(shè)計</b></p><p> 3.1系統(tǒng)功能模塊層次圖</p><p> 工程中包括4個Activity,分別為Snake(主界面)、Game(游戲界面)、Help(游戲說明界面)、AuthorView(作者信息界面),通過不同Activity之間的轉(zhuǎn)換實現(xiàn)不同界面之間的切換。Snake(Activity)繼承了SnakeView類,SnakeView類繼承了Til
22、eView類。TileView類繼承了View其實 Snake的工程蠻簡單的,源文件就三個: Snake.java SnakeView.java TileView.java。 Snake類是這個游戲的入口點, TitleView類進(jìn)行游戲的繪畫, SnakeView類則是對游戲控制操作的處理。 Coordinate, RefreshHandler是 2個輔助類,也是 SnakeView類中的內(nèi)部類。其中, Coordinate是一個點的
23、坐標(biāo)( x, y), RefreshHandler將 RefreshHandler對象綁定某個線程并給它發(fā)送消息。如下圖:</p><p><b> 類圖</b></p><p><b> 3.2運(yùn)行機(jī)制</b></p><p> 任何游戲都需要有個引擎來推動游戲的運(yùn)行,最簡化的游戲引擎就是:在一個線程中 While
24、循環(huán),檢測用戶操作,對用戶的操作作出反應(yīng),更新游戲的界面,直到用戶退出游戲。在 Snake這個游戲中,輔助類 RefreshHandler繼承自 Handler,用來把 RefreshHandler與當(dāng)前線程進(jìn)行綁定,從而可以直接給線程發(fā)送消息并處理消息。注意一點: Handle對消息的處理都是異步。 RefreshHandler在 Handler的基礎(chǔ)上增加 sleep()接口,用來每隔一個時間段后給當(dāng)前線程發(fā)送一個消息。 han
25、dleMessage()方法在接受消息后,根據(jù)當(dāng)前的游戲狀態(tài)重繪界面,運(yùn)行機(jī)制如下: 活動圖運(yùn)行機(jī)制這比較類似定時器的概念,在特定的時刻發(fā)送消息,根據(jù)消息處理相應(yīng)的事件。 update()與 sleep()間接的相互調(diào)用就構(gòu)成了一個循環(huán)。這里要注意: mRedrawHandle綁定的是 Avtivity所在的線程,也就是程序的主線程;另外由于 sleep()是個異步函數(shù),所以 up
26、date()與 sleep()之間</p><p> 3.3貪吃蛇功能流程圖</p><p> 第四章 詳細(xì)設(shè)計與實現(xiàn)</p><p> 4.1 TiltView類</p><p> TiltView的基類是View,包含了貪吃蛇游戲畫面的各個設(shè)定參數(shù),主要負(fù)責(zé)繪制游戲畫面。TileView類定義如下:</p>&l
27、t;p> public class TileView extends View {</p><p> private static final String tag = "yao";</p><p> protected static int mTileSize = 20;//方格的邊長</p><p> protected sta
28、tic int mXTileCount;//X軸上方格的個數(shù)</p><p> protected static into mYTileCount;//Y軸上方格的個數(shù)</p><p> private static int mXOffset;//繪圖時X軸上的起始坐標(biāo)</p><p> private static int mYOffset;//繪圖時Y軸上
29、的起始坐標(biāo)</p><p> private Bitmap[] mTileArray;//位圖數(shù)組</p><p> private int[][] mTileGrid;//映射整個游戲畫面的數(shù)組</p><p> private final Paint mPaint = new Paint();//畫筆</p><p> publi
30、c TileView(Context context, AttributeSet attrs) {</p><p> super(context, attrs);</p><p> Log.i(tag, "TileView Constructor");</p><p> Log.i(tag, "mTileSize=" +
31、 mTileSize);</p><p><b> }</b></p><p> //重置位圖數(shù)組的長度</p><p> public void resetTiles(int tilecount) {</p><p> mTileArray = new Bitmap[tilecount];</p>
32、<p><b> }</b></p><p><b> @Override</b></p><p> //適應(yīng)各種分辨率的屏幕,當(dāng)改變屏幕大小尺寸時,同時修改tile的相關(guān)計數(shù)指標(biāo)</p><p> protected void onSizeChanged(int w, int h, int oldw,
33、 int oldh) {</p><p> Log.i(tag, "onSizeChanged," + "w=" + w + " h=" + h + " oldw=" + oldw + " oldh=" + oldh);</p><p> mXTileCount = (int) Math
34、.floor(w / mTileSize);</p><p> mYTileCount = (int) Math.floor(h / mTileSize);</p><p> Log.i(tag, "mXTileCount=" + mXTileCount);</p><p> Log.i(tag, "mYTileCount=&qu
35、ot; + mYTileCount);</p><p> mXOffset = ((w - (mTileSize * mXTileCount)) / 2);</p><p> mYOffset = ((h - (mTileSize * mYTileCount)) / 2);</p><p> Log.i(tag, "mXOffset=" +
36、 mXOffset);</p><p> Log.i(tag, "mYOffset=" + mYOffset);</p><p> mTileGrid = new int[mXTileCount][mYTileCount];</p><p> clearTiles();</p><p><b> }<
37、;/b></p><p> //這里做了一個 Drawable 到 bitmap 的轉(zhuǎn)換</p><p> public void loadTile(int key, Drawable tile) {</p><p> Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Con
38、fig.ARGB_8888);</p><p> Canvas canvas = new Canvas(bitmap);</p><p> tile.setBounds(0, 0, mTileSize, mTileSize);</p><p> tile.draw(canvas);</p><p> mTileArray[key] =
39、 bitmap;</p><p><b> }</b></p><p><b> //清空圖形顯示</b></p><p> public void clearTiles() {</p><p> Log.i(tag, "TileView.clearTiles");<
40、;/p><p> for (int x = 0; x < mXTileCount; x++) {</p><p> for (int y = 0; y < mYTileCount; y++) {</p><p> setTile(0, x, y);</p><p><b> }</b></p>
41、<p><b> }</b></p><p><b> }</b></p><p> //在相應(yīng)的坐標(biāo)位置繪制相應(yīng)的磚塊</p><p> public void setTile(int tileindex, int x, int y) {</p><p> mTileGri
42、d[x][y] = tileindex;</p><p><b> }</b></p><p><b> // onDraw</b></p><p><b> @Override</b></p><p> //將直接操作的畫布繪制到手機(jī)界面上</p>&l
43、t;p> public void onDraw(Canvas canvas) {</p><p> Log.i(tag, "onDraw");</p><p> super.onDraw(canvas);</p><p> Bitmap bmp;</p><p> float left;</p>
44、<p> float top;</p><p> for (int x = 0; x < mXTileCount; x++) {</p><p> for (int y = 0; y < mYTileCount; y++) {</p><p> if (mTileGrid[x][y] > 0) {</p><
45、;p> bmp = mTileArray[mTileGrid[x][y]];</p><p> left = x * mTileSize + mXOffset;</p><p> top = y * mTileSize + mYOffset;</p><p> canvas.drawBitmap(bmp, left, top, mPaint);<
46、/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
47、;<p> 4.2 SnakeView類</p><p> SnakeView類定義了游戲運(yùn)行時的畫面改變及蛇體和果子的更新方法。</p><p> 首先用Handler機(jī)制實現(xiàn)定時刷新,代碼如下:</p><p> class RefreshHandler extends Handler {</p><p><
48、b> //獲取消息并處理</b></p><p><b> @Override</b></p><p> public void handleMessage(Message msg) {</p><p> SnakeView.this.update();</p><p> SnakeView.
49、this.invalidate();//刷新view為基類的界面</p><p> Log.i(tag, "handleMessage|Thread Name="+Thread.currentThread().getName());</p><p><b> }</b></p><p> //定時發(fā)送消息給UI線程,以
50、此達(dá)到更新效果</p><p> public void sleep(long delayMillis) {</p><p> this.removeMessages(0); //清空消息隊列,Handler進(jìn)入對新消息的等待 </p><p> Log.i(tag, "sleep|Thread Name="+Thread.curren
51、tThread().getName());</p><p> //定時發(fā)送新消息,激活handler </p><p> sendMessageDelayed(obtainMessage(0), delayMillis);</p><p><b> }</b></p><p><b> };<
52、/b></p><p> 定義SnakeView()函數(shù)初始化游戲,代碼如下:</p><p> public SnakeView(Context context, AttributeSet attrs) {</p><p> super(context, attrs);</p><p> Log.i(tag, "Sn
53、akeView Constructor");</p><p> initSnakeView();//構(gòu)造函數(shù)中,初始化游戲</p><p><b> }</b></p><p> 定義initSnakeView()初始化SnakeView類,代碼如下:</p><p> private void ini
54、tSnakeView() {</p><p> Log.e(tag, "initSnakeView");</p><p> //設(shè)置焦點,由于存在 文字界面 和 游戲界面的跳轉(zhuǎn)。這個focus是不可或缺的。</p><p> setFocusable(true);</p><p> //取得資源中的圖片,加載到 磚
55、塊字典 中。 </p><p> Resources r = this.getContext().getResources();</p><p> resetTiles(4);</p><p> loadTile(RED_STAR, r.getDrawable(R.drawable.redstar));</p><p> loadTi
56、le(YELLOW_STAR, r.getDrawable(R.drawable.yellowstar));</p><p> loadTile(GREEN_STAR, r.getDrawable(R.drawable.greenstar));</p><p><b> }</b></p><p> 此外還定義了updateWalls()
57、、updateApples()、updateSnake()繪制墻、果子、蛇,以及更新畫面函數(shù)、保存位置坐標(biāo)函數(shù)等,具體代碼請詳見目錄。</p><p><b> 4.3界面設(shè)計</b></p><p> 界面設(shè)計包括游戲主界面(Snake)、游戲說明界面、游戲界面的設(shè)計。界面的設(shè)計采用的是xml文檔形式,在xml文檔中規(guī)劃好界面布局布局后,分別在java文件中聲明
58、。</p><p> 主界面設(shè)計:主界面包括一個 TextView及布局設(shè)定,其main.xml文檔如下</p><p> <?xml version="1.0" encoding="utf-8"?></p><p> <!-- Copyright (C) 2007 The Android Open S
59、ource Project</p><p> Licensed under the Apache License, Version 2.0 (the "License");</p><p> you may not use this file except in compliance with the License.</p><p> Y
60、ou may obtain a copy of the License at</p><p> http://www.apache.org/licenses/LICENSE-2.0</p><p> Unless required by applicable law or agreed to in writing, software</p><p> dist
61、ributed under the License is distributed on an "AS IS" BASIS,</p><p> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</p><p> See the License for the specifi
62、c language governing permissions and</p><p> limitations under the License.</p><p><b> --></b></p><p> <FrameLayout xmlns:android="http://schemas.android.c
63、om/apk/res/android"</p><p> android:layout_width="match_parent"</p><p> android:layout_height="match_parent"></p><p> <com.example.android.snake.Sn
64、akeView</p><p> android:id="@+id/snake"</p><p> android:layout_width="match_parent"</p><p> android:layout_height="match_parent"</p><p>
65、; tileSize="24"</p><p><b> /></b></p><p> <RelativeLayout</p><p> android:layout_width="match_parent"</p><p> android:layout_
66、height="match_parent" ></p><p><b> <TextView</b></p><p> android:id="@+id/text"</p><p> android:text="@string/snake_layout_text_text&qu
67、ot;</p><p> android:visibility="visible"</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p&g
68、t; android:layout_centerInParent="true"</p><p> android:gravity="center_horizontal"</p><p> android:textColor="#ff8888ff"</p><p> android:textSize=
69、"24sp"/></p><p> </RelativeLayout></p><p> </FrameLayout></p><p> 至此,全部界面設(shè)計完成,但還有最重要的一步,就是將所有的Activity注冊到AndroidManifest.xml中。AndroidManifest.xml文檔如下:<
70、;/p><p> <?xml version="1.0" encoding="utf-8"?></p><p> <!-- Copyright (C) 2007 The Android Open Source Project</p><p> Licensed under the Apache Licens
71、e, Version 2.0 (the "License");</p><p> you may not use this file except in compliance with the License.</p><p> You may obtain a copy of the License at</p><p> http://
72、www.apache.org/licenses/LICENSE-2.0</p><p> Unless required by applicable law or agreed to in writing, software</p><p> distributed under the License is distributed on an "AS IS" BAS
73、IS,</p><p> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</p><p> See the License for the specific language governing permissions and</p><p> limitatio
74、ns under the License.</p><p><b> --></b></p><p> <!-- Declare the contents of this Android application. The namespace</p><p> attribute brings in the Android p
75、latform namespace, and the package</p><p> supplies a unique name for the application. When writing your</p><p> own application, the package name must be changed from "com.example.*&quo
76、t;</p><p> to come from a domain that you own or have control over. --></p><p> <manifest xmlns:android="http://schemas.android.com/apk/res/android"</p><p> packa
77、ge="com.example.android.snake"></p><p> <application android:label="Snake on a Phone"></p><p> <activity android:name="Snake"</p><p> an
78、droid:theme="@android:style/Theme.NoTitleBar"</p><p> android:screenOrientation="portrait"</p><p> android:configChanges="keyboardHidden|orientation"></p>
79、;<p> <intent-filter></p><p> <action android:name="android.intent.action.MAIN" /></p><p> <category android:name="android.intent.category.LAUNCHER"
80、/></p><p> </intent-filter></p><p> </activity></p><p> </application></p><p> </manifest></p><p><b> 4.4項目演示</b&g
81、t;</p><p><b> 游戲前畫面</b></p><p><b> 游戲中界面</b></p><p><b> 游戲結(jié)束時畫面</b></p><p><b> 第五章 測試</b></p><p><b&
82、gt; 5.1游戲功能測試</b></p><p> 經(jīng)過在模擬器上的測試,本軟件能書案例實現(xiàn)其功能,達(dá)到了小蛇在屏幕上的移動,小蛇吃蘋果,蘋果隨機(jī)出現(xiàn)的功能,當(dāng)小蛇頭尾相撞或與墻相撞時,游戲結(jié)束.這些均在測試中得到驗證。</p><p><b> 5.2游戲控制測試</b></p><p> 在測試過程中,也著重對游戲的控
83、制功能進(jìn)行了測試,游戲是通過方向鍵的控制來實現(xiàn)的,在游戲剛開始的階段,上下左右四個方位的控制都很成功,但隨著蛇移動的速度越來越快,按鍵的控制反應(yīng)會出現(xiàn)滯后,通過分析,可能是由于蛇的運(yùn)動速度超過了鍵盤的反應(yīng)速度造成的,與軟件無關(guān),所以得出結(jié)論,游戲的控制設(shè)計也是成功的。</p><p><b> 5.3游戲界面測試</b></p><p> 游戲運(yùn)行之后,就是在畫面
84、中出現(xiàn)蛇和兩個蘋果的初始位置,并且是靜止的,并且在畫面上還會出現(xiàn)操作提示“按上鍵開始游戲”,游戲運(yùn)行過程中,除了蛇的運(yùn)動之外,界面大題沒有變化,分別由綠色矩形塊的圍墻,黃色矩形塊的蘋果和紅色矩形塊的蛇身(蛇頭為黃色)組成。游戲結(jié)束后,界面處于暫停狀態(tài),提示游戲結(jié)束并顯示分?jǐn)?shù)。</p><p><b> 5.4測試結(jié)果</b></p><p> 通過對游戲軟件的功能
85、測試,控制測試和界面測試。詳細(xì)說是對游戲的開始新游戲、 退出、 查看最高成績、 計時、 統(tǒng)計分?jǐn)?shù)等功能進(jìn)行測試, 并測試程序的鼠標(biāo)點擊事件、菜單的響應(yīng)及按鍵響應(yīng)等事件,結(jié)論是該游戲軟件能正確實現(xiàn)功能要求。要求輸出的效果與預(yù)期的輸出效果完全 一致。</p><p><b> 結(jié)論</b></p><p> 回顧這個設(shè)計過程,我學(xué)到了許多書本上沒有學(xué)到的知識。通過這次
86、自己制作的軟件,豐富了自己的實踐技能,擴(kuò)展了本專業(yè)的知識面,使我受益非淺,同時 也體驗到了搞軟件開發(fā)的困難度。 在這次設(shè)計的同時,我又從中學(xué)到了許多東西。 但由于我對這樣的軟件開發(fā)還只是一個開始,了解的不多,這其中或許還有很多 的不足,有些模塊做得不是很好,界面的設(shè)計及整體的布局還比較簡單,沒有突 出特色出來,這也可能是我這個系統(tǒng)的不足之處,在這里也懇請老師能夠?qū)?我的作品指明不足并加以改正。 </p><p>
87、 我所做的設(shè)計功能并不算強(qiáng)大,但是這些結(jié)合了本學(xué)期所學(xué)習(xí)的內(nèi)容,主要是界面的設(shè)計,并改寫了兩個類。通過自己寫代碼,我更進(jìn)一步清楚了android工程的框架及設(shè)計的步驟,以及每個文件的作用,稍微掌握了一些View類的方法,同時也學(xué)到了更多的界面設(shè)計的方法,比如如何實現(xiàn)一個TextView里顯示多行數(shù)據(jù),如何自定義視圖等。</p><p> 但同時我也遇到了問題,比如在編寫控制模塊代碼的時候,如何何時按鍵監(jiān)聽這一
88、塊讓我很頭疼,另外在設(shè)計界面整體布局的時候,如何編寫XML文件,這也是很大的問題后來通過查閱資料,對這些問題都做到了很好的解決</p><p> 總之,在這一次的課程設(shè)計過程中,我查閱了大量的資料,對 Java 有了一 點初步的認(rèn)識,對于軟件工程這些輔助性的教材也鞏固了不少,為我這次的課設(shè) 提供了很大的幫助,鍛煉了我的能力讓我掌握了一門新的程序設(shè)計語言:java 語言,系統(tǒng)地學(xué)習(xí)了數(shù)據(jù)庫方面的知識,并更進(jìn)一步提
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安卓貪吃蛇課程設(shè)計報告
- 課程設(shè)計--安卓手機(jī)游戲---貪吃蛇
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計
- android貪吃蛇課程設(shè)計報告
- java貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計
- 貪吃蛇課程設(shè)計
- 貪吃蛇java課程設(shè)計--貪吃蛇程序設(shè)計
- java課程設(shè)計貪吃蛇
- java課程設(shè)計--貪吃蛇
- 貪吃蛇vc課程設(shè)計
- java課程設(shè)計報告貪吃蛇游戲
- java貪吃蛇游戲 課程設(shè)計
- java-課程設(shè)計--貪吃蛇
- c++課程設(shè)計----貪吃蛇
- c++貪吃蛇課程設(shè)計
評論
0/150
提交評論