畢業(yè)論文--基于 android 平臺的仿真水族館的實現(xiàn)_第1頁
已閱讀1頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢 業(yè) 設(shè) 計</b></p><p>  題 目:基于 Android 平臺的仿</p><p>  真水族館的實現(xiàn) </p><p>  所在專業(yè): 計算機科學與技術(shù) </p><p><b>  摘 要</b><

2、;/p><p>  在科技日益發(fā)展的今天,社會競爭越來越激烈,3G時代已經(jīng)慢慢融入了我們的日常生活。手機已經(jīng)成為人們?nèi)粘I钪胁豢扇鄙俚囊徊糠?,尤其是在電子產(chǎn)品日新月異的今天,我們在平時隨處可見的電子產(chǎn)品中,手機無疑是一個最大的用戶集,而各大廠商智能手機則依舊是電子商場的一個耀眼明星。</p><p>  據(jù)了解,現(xiàn)在越來越多的人們喜歡用手機玩游戲了,游戲不僅可以梳理心情,也可以作為娛樂的項目

3、,各種游戲也已進入到手機的平臺上,用戶越來越需要更加個性化,優(yōu)質(zhì)化的游戲,現(xiàn)在的手機系統(tǒng)有大量的游戲?,F(xiàn)在的手機游戲有很多很多比如IPhone開發(fā)了一款水果忍者下載量對于中國來說已經(jīng)是全球第二,然而今夏最熱的安卓版手機游戲《捕魚之海底撈》,憑借其優(yōu)秀的游戲品質(zhì)和火爆的下載人氣,就在7月1日首發(fā)安卓市場的前三天,其下載量便突破了百萬大關(guān),一直穩(wěn)居當月新游戲下載榜首!而自從1.04版“美人魚來襲”發(fā)布以來,游戲中流暢的運行速度、簡單的操作、

4、華麗的畫面、神秘的美人魚,以及豐富的魚種等精彩亮點,更是贏得了眾多媒體與玩家的一致好評。</p><p>  所以本課題就利用了現(xiàn)在游戲的火熱這一點為基于Android手機平臺下的仿真水族館游戲進行設(shè)計開發(fā)。在Android SDK2.1環(huán)境下,運用Eclipse,PhotoShop等相關(guān)工具進行開發(fā)。同時解決了游戲的發(fā)炮,魚的游動,關(guān)卡,背景音樂等眾多技術(shù)難題,從而深化對Java 手機應(yīng)用開發(fā)技術(shù)和移動軟件平臺

5、開發(fā)技術(shù)的掌握。</p><p>  關(guān)鍵詞:Java、Android、PhotoShop、仿真水族館游戲</p><p><b>  Abstract</b></p><p>  Increasing development in technology today, more competitive society, 3G era is sl

6、owly integrated into our daily lives. Mobile phones have become an indispensable everyday part of life, especially in today's rapidly changing electronic products, we usually ubiquitous electronic products, mobile ph

7、one is undoubtedly one of the largest set of users, and smart phones is still the major manufacturers of electronic mall a dazzling star. It is understood that more and more people prefer to use mo</p><p&

8、gt;  Keywords: Java, Android, PhotoShop, aquarium simulation game</p><p><b>  目 錄</b></p><p><b>  摘 要2</b></p><p>  Abstract3</p><p><b&g

9、t;  第1章 緒論6</b></p><p>  1.1 Android概況6</p><p>  1.1 選題意義6</p><p>  第2章 可行性分析7</p><p>  2.1 開發(fā)前景7</p><p>  2.2市場可行性7</p><p>  2.3技

10、術(shù)可行性7</p><p>  第3章 系統(tǒng)分析8</p><p>  3.1功能需求用例圖8</p><p><b>  3.2頁面介紹8</b></p><p>  3.3系統(tǒng)流程圖8</p><p>  3.4運行環(huán)境需求8</p><p>  第4章 系

11、統(tǒng)功能詳細設(shè)計9</p><p>  4.1 關(guān)鍵性功能點實現(xiàn)9</p><p>  4.1.1汽泡自定義組件9</p><p>  4.1.2 自定義按鈕9</p><p>  4.1.3 金幣動畫效果9</p><p>  4.1.4 游戲音效9</p><p>  第5章 系統(tǒng)

12、測試10</p><p>  5.1 測試環(huán)境10</p><p>  5.2 測試用例10</p><p>  5.2.1 白盒測試10</p><p>  5.2.2 黑盒測試12</p><p>  5.3 測試結(jié)果13</p><p><b>  第6章 總結(jié)13

13、</b></p><p><b>  致謝14</b></p><p><b>  參考文獻15</b></p><p><b>  第1章 緒論</b></p><p>  1.1 Android概況</p><p><b>

14、  1.1 選題意義</b></p><p><b>  第2章 可行性分析</b></p><p><b>  2.1 開發(fā)前景</b></p><p>  隨著新技術(shù)的不斷開發(fā)與應(yīng)用,近年來Java技術(shù)發(fā)展十分迅速,一個以Java應(yīng)用為主的新技術(shù)革命浪潮正在蓬勃興起。而基于Android的軟件開發(fā)是一個前景

15、很大的技術(shù),然而市面上基于Android的游戲雖然有不少種,各種的手機游戲各有千秋,但是由于游戲類型繁多,開發(fā)思路不同,加之Google開放的源代碼,Android的SDK的版本不同,</p><p><b>  2.2市場可行性</b></p><p><b>  2.3技術(shù)可行性</b></p><p><b&g

16、t;  第3章 系統(tǒng)分析</b></p><p>  3.1功能需求用例圖</p><p>  功能需求(用例分析)</p><p>  1.1主菜單界面的基本功能需求;</p><p><b>  圖1海底撈</b></p><p><b>  用例名稱:開始游戲</

17、b></p><p>  目標:使得用戶可以進入游戲界面(支持保留上一次游戲進度,)</p><p>  用例名稱:教學幫助 </p><p>  目標:使得用戶可以了解游戲規(guī)則</p><p><b>  用例名稱: 設(shè)置</b></p><p>  目標:使得用戶可以 對游戲進行一些設(shè)置

18、</p><p> ?。ㄈ纾罕尘耙魳罚粜?,特效,和返回主菜單)</p><p><b>  用例名稱:排名</b></p><p>  目標:記錄游戲成績并進行排名 </p><p>  1.2游戲界面的基本功能需求</p><p>  圖2游戲界面的基本功能需求圖</p><

19、;p>  1.用例名稱:點擊任意點</p><p>  目標:點擊屏幕的任意一點,就可以發(fā)射漁網(wǎng)捕魚點擊成功后會看到屏幕上出現(xiàn)波紋,并發(fā)炮彈,灑網(wǎng),漁網(wǎng)范圍內(nèi)的魚都有幾率被捕捉。</p><p><b>  2.用例名稱:漁炮</b></p><p>  目標:漁炮分七種不同等級,分別對應(yīng)七種不同的漁網(wǎng)。分值越高的漁炮捕捉魚的幾率越高。&

20、lt;/p><p>  3.用例名稱:點擊+、-號</p><p>  目標:1級漁網(wǎng)消耗1個金幣,以此類推,7級漁網(wǎng)消耗7個金幣,點擊底部的漁炮和“+”“-”號可切換不同的漁網(wǎng)。</p><p><b>  4.用例名稱:魚群</b></p><p>  目標:魚群中不同種類的魚獲得不同數(shù)量金幣,魚的等級越高,捕中率越低,

21、能獲得的金幣數(shù)越高。</p><p>  5.用例名稱:計時器 </p><p>  目標:每60秒會自動獲得5個金幣,即便關(guān)閉了游戲也會自動增長,但關(guān)閉了游戲之后自動增長速度變慢,而且最高限額增加到200個金幣 </p><p>  6.用例名稱:當前金幣數(shù) </p><p>  目標:獲得自動增加的金幣購買或用活動碼兌換的金幣都會在此顯示

22、 </p><p>  7.用例名稱: 購買金幣、活動號碼兌換</p><p>  目標:除了捕魚和自動獲得的金幣外,還可以通過購買“金幣”和用“活動號碼”換取的方式獲得金幣。</p><p><b>  8.用例名稱:暫停</b></p><p>  目標:暫停游戲,可返回主菜單,設(shè)置音樂和音效</p>

23、<p>  9.用例名稱:等級和經(jīng)驗條</p><p>  目標:等級和經(jīng)驗條積滿時可一次灑多個網(wǎng)。</p><p>  10.用例名稱:激光蓄力槽</p><p>  目標:激光蓄力槽積滿時可發(fā)出光束,可捕中任何分值的魚。</p><p>  1.3教學幫助界面的基本功能需求</p><p>  圖2教學幫

24、助界面的基本功能需求圖</p><p>  用例名稱:游戲規(guī)則 </p><p>  目標:顯示游戲規(guī)則,幫助玩家更快的了解游戲</p><p><b>  用例名稱:返回</b></p><p><b>  目標:返回主菜單</b></p><p>  1.3設(shè)置界面的基本

25、功能需求</p><p>  圖3設(shè)置界面的基本功能需求圖</p><p>  用例名稱:背景音樂 </p><p>  目標:設(shè)置有無背景音樂 </p><p><b>  用例名稱:音效 </b></p><p><b>  目標:設(shè)置有無音效</b></p>

26、<p><b>  用例名稱:特效</b></p><p><b>  目標:設(shè)置有無音效</b></p><p><b>  用例名稱:產(chǎn)菜單</b></p><p><b>  目標:返回主菜單</b></p><p><b>

27、  3.2頁面介紹</b></p><p><b>  圖1.1.1主菜單</b></p><p><b>  圖1.1.2</b></p><p><b>  圖1.1.3</b></p><p><b>  圖1.1.4</b></p

28、><p><b>  3.3系統(tǒng)流程圖</b></p><p><b>  3.4運行環(huán)境需求</b></p><p>  手機平臺:HTC Wildfire S A510e(G13)</p><p>  手機系統(tǒng):Android 2.1</p><p>  CPU頻率:600M

29、Hz</p><p>  機身內(nèi)存:512MB ROM+786MB RAM</p><p><b>  儲存卡:2G</b></p><p>  第4章 系統(tǒng)功能詳細設(shè)計 </p><p>  4.1 關(guān)鍵性功能點實現(xiàn)</p><p>  4.1.1汽泡自定義組件</p><p

30、>  在手面游戲開始時,菜單欄兩側(cè)會產(chǎn)生一個水溝上升的效果。它是一自定義組件。</p><p><b>  實例圖</b></p><p><b>  需要解決的技術(shù)問題</b></p><p>  如何創(chuàng)建自定義組件。</p><p><b>  如何獲得幀圖處。</b>

31、;</p><p><b>  如何始組件動起來。</b></p><p>  要解決以上問題需要參考的文獻。</p><p><b>  自定義組件的定義</b></p><p><b>  自定義組件的使用</b></p><p><b>

32、  三.實現(xiàn)步驟</b></p><p>  第一步:要創(chuàng)建自定義組件。需用到BubbleView組件。在Xml中的代碼。</p><p>  Width:控件寬度</p><p>  Height:控件高度</p><p>  marginLeflt:離屏幕左邊距離</p><p>  start_x:屏

33、幕X軸坐標</p><p>  start_y:屏幕Y軸坐標</p><p>  top:與頂部的距離</p><p>  <com.che.BubbleView</p><p>  xmlns:app="http://schemas.android.com/apk/res/com.che"</p>&

34、lt;p>  android:layout_width="50dp" </p><p>  android:layout_height="wrap_content" </p><p>  android:layout_marginLeft="100dp"</p><p>  app:bitmap=&q

35、uot;@drawable/bubble"</p><p>  app:start_x="20"</p><p>  app:start_y="250"</p><p>  app:top="70"</p><p><b>  /></b><

36、;/p><p>  由于只實現(xiàn)氣泡的上升,不需要繪制和刷新其它的組件,為了減少代碼不必要的冗余,所以就氣泡上升這個動畫而言,只需創(chuàng)建一個自定義組件</p><p>  1.創(chuàng)建自定義組件,獲得其氣泡圖片的資源和長,寬,橫縱坐標等基本屬性。</p><p><b>  // 獲得組件屬性</b></p><p>  Typed

37、Array typdeArray = context.obtainStyledAttributes(attrs,</p><p>  R.styleable.BubbleView);</p><p>  int bitmap = typdeArray.getResourceId(R.styleable.BubbleView_bitmap, 0);</p><p> 

38、 CharSequence start_x = typdeArray</p><p>  .getText(R.styleable.BubbleView_start_x);</p><p>  CharSequence start_y = typdeArray</p><p>  .getText(R.styleable.BubbleView_start_y);&l

39、t;/p><p>  CharSequence top = typdeArray.getText(R.styleable.BubbleView_top); </p><p>  3.為了實現(xiàn)動畫的效果,而要進行屏幕的刷新,每0.05秒,刷新一次屏幕就可以使圖片產(chǎn)生動態(tài)效果。為了要實現(xiàn)屏幕的不斷刷新,就要用過線程來實現(xiàn)</p><p><b>  線程創(chuàng)建與調(diào)用

40、:</b></p><p>  new ReFresh().start();</p><p><b>  線程</b></p><p>  class ReFresh extends Thread {</p><p><b>  @Override</b></p><

41、p>  public void run() {</p><p>  while (true) {</p><p><b>  try {</b></p><p>  Thread.sleep(50);</p><p>  } catch (InterruptedException e) {</p>&

42、lt;p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  // 刷屏</b></p><p>  postInvalidate();</p><p><b>  }</b></p><p

43、><b>  }</b></p><p><b>  }</b></p><p>  因為在實現(xiàn)氣泡上升過程中,多次反復(fù)使用有關(guān)氣泡的屬性和運算方法。為了減少代碼的冗余,所以要將有關(guān)氣泡的所有屬性抽象成一個類,以便于創(chuàng)建該對象,方體于調(diào)用和使用。</p><p>  class Bubble {</p>

44、<p><b>  // 起始坐標</b></p><p>  private int x = 0;</p><p>  private int y = 0;</p><p><b>  // 氣泡的上限</b></p><p>  private int top = 0;</p&

45、gt;<p><b>  // 氣泡的大小</b></p><p>  private float size = 5;</p><p><b>  // 位移的度數(shù)</b></p><p>  private int degress = 0;</p><p><b>  //

46、 位移量</b></p><p>  private float offset = 0;</p><p>  private Bitmap bubble;</p><p>  public Bubble(Bitmap bubble, int x, int y, int top) {</p><p>  this.bubble =

47、bubble;</p><p>  this.x = x;</p><p>  this.y = y;</p><p>  this.top = top;</p><p><b>  }</b></p><p><b>  }</b></p><p>

48、  在class Bubble{}中創(chuàng)建drawBubble()方法,由于每畫一個氣泡都要重新計算一次坐標并且執(zhí)行一次氣泡的重繪,所以我們將坐標的計算和氣泡重繪的算法封裝成一個方法。減少代碼量,便于程序的重構(gòu)與分析。</p><p><b>  代碼解析:</b></p><p>  public void drawBubble(Canvas canvas, Pain

49、t paint) {</p><p>  // 更新氣泡的大小</p><p>  size += 0.03;</p><p>  // 更新 y 坐標</p><p><b>  y -= 1;</b></p><p><b>  // 更新位移度數(shù)</b></p&g

50、t;<p>  degress += 30;</p><p><b>  // 更新位移</b></p><p>  offset += 0.02;</p><p><b>  int nowX;</b></p><p>  if (degress > 90 || degress

51、 < 270) {</p><p>  // 更新 x 坐標</p><p>  nowX = (int) ((float) x + offset</p><p>  * Math.sin(degress * Math.PI / 180));</p><p><b>  } else {</b></p>

52、<p>  // 更新 x 坐標</p><p>  nowX = (int) ((float) x - offset</p><p>  * Math.sin(degress * Math.PI / 180));</p><p><b>  }</b></p><p><b>  // 類型轉(zhuǎn)換

53、</b></p><p>  int size = (int) this.size;</p><p><b>  // 畫氣泡</b></p><p>  canvas.drawBitmap(bubble,</p><p>  //從0,0開始獲取圖片的長,圖片的寬</p><p> 

54、 new Rect(0, 0, bubble.getWidth(), bubble.getHeight()),</p><p>  //在從nowX, y開始畫,畫nowX + size, y + size參數(shù)變么大</p><p>  new Rect(nowX, y, nowX + size, y + size), paint);</p><p>  if (d

55、egress > 360) {</p><p>  degress = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.執(zhí)行onDraw()方法。</p><p>  該方法主要負責游戲界面的繪制工作。刷帖線

56、程會定時調(diào)用該方法進行屏幕刷新。</p><p><b>  該方法的分析:</b></p><p>  運用判斷語句來實現(xiàn)每10幀向集合中添加一個氣泡,用循環(huán)語句來獲得集合中的每一個氣泡,超過長度時移除。并創(chuàng)建其對象,用自義bubble.drawBubble()方法,來畫氣泡。</p><p>  protected void onDraw(

57、Canvas canvas) {</p><p>  super.onDraw(canvas);</p><p><b>  // 累加當前幀數(shù)</b></p><p><b>  fream++;</b></p><p>  // 每10幀增加一個氣泡</p><p>  

58、if ((fream % 10) == 1) {</p><p><b>  // 增加一個氣泡</b></p><p>  list.add(new Bubble(bubble, start_x, start_y, top));</p><p><b>  }</b></p><p>  // 每

59、15幀增加一個氣泡</p><p>  if ((fream % 15) == 1) {</p><p><b>  // 增加一個氣泡</b></p><p>  list.add(new Bubble(bubble, start_x, start_y, top));</p><p><b>  }</

60、b></p><p><b>  // 畫出所有氣泡</b></p><p>  for (int i = 0; i < list.size(); i++) {</p><p><b>  // 得到氣泡對象</b></p><p>  Bubble bubble = list.get(

61、i);</p><p><b>  // 畫出氣泡</b></p><p>  bubble.drawBubble(canvas, paint);</p><p>  // 如果氣泡到達上限</p><p>  if (bubble.death()) {</p><p>  // 從氣泡集合中移出

62、此對象</p><p>  list.remove(i);</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.1.2 自定義按鈕</p><p><b>  實例圖</b></p>&l

63、t;p><b>  要解決的技術(shù)問題</b></p><p><b>  獲取資源</b></p><p><b>  創(chuàng)建自定義按鈕</b></p><p><b>  給自定義按鈕加事件</b></p><p>  三.整體的功能的實現(xiàn)</

64、p><p><b>  1.功能點概述</b></p><p>  根據(jù)自已的需要繪制出想要的組件,并添加相應(yīng)的事件,使其獲得相應(yīng)的功能。</p><p><b>  2.功能實現(xiàn)步驟</b></p><p>  4.1.3 金幣動畫效果</p><p>  二維游戲海底撈中,玩

65、家在每捕到一種魚時,屏幕就會顯示該魚應(yīng)得的分值。分值就會產(chǎn)生一閃爍的效果。</p><p><b>  實例圖如:</b></p><p><b>  需要解決的技術(shù)問題</b></p><p>  1.如何獲得分值圖片資源。</p><p>  2. 如何讓水波圖片產(chǎn)生動態(tài)效果。</p>

66、;<p>  二.解決上述技術(shù)問題的需要的一些相關(guān)文獻資料</p><p>  1. 從資源中獲取位圖</p><p>  可以使用BitmapDrawable或者BitmapFactory來獲取資源中的位圖。 </p><p>  當然,首先需要獲取資源: </p><p>  Resources res=getResourc

67、es(); </p><p>  使用BitmapDrawable獲取位圖 </p><p>  使用BitmapDrawable (InputStream is)構(gòu)造一個BitmapDrawable; </p><p>  使用BitmapDrawable類的getBitmap()獲取得到位圖;</p><p>  2.實現(xiàn)圖片的動態(tài)效果&

68、lt;/p><p>  主要通過自定義View來開發(fā)程序中的動太效果。其主要的工作包括</p><p>  繪制屏幕:由于使用自定義Veiw,程序的畫面需要從頭到尾進行設(shè)計。這些工作都需要放在繪制屏幕模塊中進行。</p><p>  刷新屏幕:在程序的運行中,如果后臺數(shù)據(jù)發(fā)生了變化,需要開發(fā)人員自己刷新屏幕以將最新的數(shù)據(jù)顯示給用戶。</p><p&g

69、t;  只要按照一定的時間刷新屏幕的圖片資源,顯示出來就形成了動畫效果,而時時刷新屏幕主要是用線程來時現(xiàn)的。</p><p>  線程主要功能是修改View類繪制的數(shù)據(jù),這樣就實現(xiàn)了水波的動畫播放。</p><p><b>  線程的格式:</b></p><p>  class RippleThread extends Thread {<

70、;/p><p>  public void run(){</p><p>  super.run();</p><p><b>  }</b></p><p><b>  }</b></p><p>  將一個位圖按照需求重畫一遍,畫后的位圖就是我們需要的了,與位圖的顯示幾乎一樣

71、:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) </p><p><b>  三.整體功能的實現(xiàn)</b></p><p>  1.整體功能的概述分析:</p><p>  其實本功能的實現(xiàn)就是將分值的序列幀圖片,在一個定點坐標上的播放。</p><p&

72、gt;  首先就要獲得各分值動畫的序列幀圖片在一定點上通過集合下標的變換播放水波圖片序列幀。再通過線程刷新出來。</p><p><b>  1實現(xiàn)步驟</b></p><p><b>  第一步:</b></p><p>  抽取分值類,在類中分值圖片資源的獲取。</p><p>  由于,在編程

73、過程中,由于反復(fù)使用圖片資源。所以將圖片資源提取出來封裝成一個類。以便運算時的調(diào)用,減少資源的浪費。</p><p>  使用BitmapFactory類decodeStream(InputStream is)解碼位圖資源,獲取位圖。</p><p>  用BitmapFactory.decodeResource()方法來獲得圖片的ID,路徑。</p><p>  

74、建立一個集合。用add()方法將圖片的坐標添加進去。</p><p>  設(shè)置各分值的get方法來,便于其它類調(diào)用其資源。</p><p>  第二步:分值圖片產(chǎn)生動態(tài)效果</p><p>  上面以經(jīng)獲得圖片的序列幀。只要按照一定的時間刷新屏幕的圖片資源,顯示出來就形成了動畫效果,而時時刷新屏幕,重復(fù)調(diào)用OnDraw()方法。主要是用線程來時現(xiàn)的。</p&g

75、t;<p>  線程主要功能是修改View類OnDraw()方法中繪制的數(shù)據(jù),這樣就實現(xiàn)了分值的動畫播放。</p><p>  View類中的OnDraw()方法來主要負責界面的繪制工作,前所編的程序最后都是通過訪方法最后實現(xiàn)在屏幕上的。</p><p><b>  /**</b></p><p><b>  * 畫筆類

76、</b></p><p><b>  */</b></p><p><b>  @Override</b></p><p>  protected void onDraw(Canvas canvas) {</p><p>  super.onDraw(canvas);</p>

77、<p>  // 背景顏色--白色</p><p>  canvas.drawColor(Color.WHITE);</p><p>  point.drawPoint(canvas, paint);</p><p><b>  }</b></p><p>  上段代碼中的point.drawPoint(c

78、anvas, paint)是類Point{}中的一個方法,通過對象point來調(diào)用。</p><p>  第四步:類Point{}是我們自己創(chuàng)建的。因為將一個位圖按照需求重畫一遍,畫后的位圖就是我們需要的了,用到的方法:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。由于每畫一幀,就重寫一次方法。為了程序的可讀性和管理性。也為了使代碼更減潔。我

79、們就將和畫分值的和關(guān)方法單獨封裝成一個類為:類Point{}。</p><p>  構(gòu)造函數(shù)是負責設(shè)置定點坐標的。該定點設(shè)定為的屏幕的中心點。</p><p>  drawPoint()方法:用來時實動畫效果幀的變化。也就是通過圖片集合的下標的變化。來實現(xiàn)一幀一幀的變化。</p><p><b>  /**</b></p><

80、;p><b>  * 設(shè)置圖片</b></p><p><b>  * </b></p><p>  * @param point</p><p>  * @param centerX</p><p>  * @param centerY</p><p><b&g

81、t;  */</b></p><p>  //構(gòu)造函數(shù)中的屏幕中心點坐標(width,Hinght)</p><p>  public Point(ArrayList<Bitmap> point, int centerX, int centerY) {</p><p>  this.point = point;</p><

82、p>  // 獲得圖片的寬度、高度</p><p>  int width = point.get(0).getWidth() / 2;</p><p>  int Hinght= point.get(0).getHeight() / 2;</p><p><b>  // 獲取X坐標</b></p><p>  

83、this.left = centerX - width;</p><p><b>  // 獲取Y坐標</b></p><p>  this.top = centerY - height;</p><p><b>  }</b></p><p><b>  /**</b><

84、;/p><p>  * 獎勵動畫開始、結(jié)束時間</p><p><b>  * </b></p><p>  * @param canvas</p><p>  * @param paint</p><p><b>  */</b></p><p>  /

85、/根據(jù)下標index的變更。變換傳值圖片。</p><p>  public void drawPoint(Canvas canvas, Paint paint) {</p><p><b>  // 累加幀數(shù)</b></p><p><b>  index++;</b></p><p>  //

86、判斷幀數(shù)是否越界</p><p>  if (index > point.size() - 1) {</p><p><b>  // 返回初始值</b></p><p>  index = 0;</p><p><b>  }</b></p><p>  canvas

87、.drawBitmap(point.get(index), left, top, paint);</p><p><b>  // 累加時間</b></p><p>  nowFrame++;</p><p>  // 判斷動畫時間是否越界</p><p>  if (nowFrame > maxFrame) {&

88、lt;/p><p><b>  // 停止動畫</b></p><p>  alive = false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.1.4 游戲音效</p><

89、p>  在二維游戲海底撈中,用戶打開游戲頁面時,會有音樂播放,當用戶在玩的過程中想要取消音樂播放效果,則可以點擊相應(yīng)的按鈕進行相關(guān)設(shè)置。</p><p><b>  實例圖如:</b></p><p>  一.需要解決的技術(shù)問題</p><p><b>  如果播放背景音樂</b></p><p&

90、gt;<b>  如果釋放資源</b></p><p><b>  如何播放音效</b></p><p>  二.解決上述技術(shù)問題的需要的一些相關(guān)文獻資料</p><p><b>  1. 播放背景音樂</b></p><p>  首先,先定義一個音樂播放器</p>

91、<p>  Android中的多媒體播放由Media Player類來進行處理。能夠播放存儲在應(yīng)用程序資源、本地文件、內(nèi)容提供器或者來自網(wǎng)絡(luò)URL的流式傳輸中的媒體。</p><p>  Media Player對音頻和視頻文件以及數(shù)據(jù)流的管理是作為一個狀態(tài)機來處理的。通過狀態(tài)機的轉(zhuǎn)換可以描述如下:</p><p>  使用將要播放的媒體初始化Media Player<

92、/p><p>  使Media Player準備播放</p><p><b>  開始播放</b></p><p>  在播放完成之前暫停或者停止播放</p><p><b>  播放完成</b></p><p>  private MediaPlayer player;<

93、/p><p><b>  然后,播放背景音樂</b></p><p>  public void playMusic() {</p><p><b>  //傳送上下文</b></p><p>  player = MediaPlayer.create(musicContext, id);</p&

94、gt;<p><b>  //循環(huán)播放</b></p><p>  player.setLooping(true);</p><p><b>  //開始播放</b></p><p>  player.start();</p><p><b>  }</b><

95、;/p><p><b>  最后,暫停播放</b></p><p>  public void pauseMusic() {</p><p>  player.pause();</p><p><b>  }</b></p><p><b>  2.釋放資源 </

96、b></p><p>  Android支持有限數(shù)量的同步Media Player對象,如果不釋放它們,將會在系統(tǒng)耗盡資源時導致運行時異常</p><p>  public void destroyMusic() {</p><p>  if (player != null) {</p><p><b>  try {<

97、/b></p><p>  if (player.isPlaying()) {</p><p><b>  //停止播放</b></p><p>  player.stop();</p><p><b>  }</b></p><p><b>  } //判斷

98、異常</b></p><p>  catch (Exception e) {</p><p>  System.out.println("背景音樂釋放資源錯誤");</p><p>  e.printStackTrace();</p><p><b>  }</b></p>

99、<p>  player.release();</p><p><b>  }</b></p><p><b>  3.播放音效</b></p><p>  public void playSound(String soundType) {</p><p>  if (isPlay ==

100、true) {</p><p>  AudioManager mgr = (AudioManager) context</p><p>  .getSystemService(Context.AUDIO_SERVICE);</p><p>  // 獲取當前的音量值</p><p>  int streamVolume = mgr.getSt

101、reamVolume(AudioManager.STREAM_MUSIC);</p><p><b>  // 獲得資源ID</b></p><p>  int soundID = soundPoolMap.get(soundType);</p><p><b>  // 播放音效</b></p><p

102、>  soundPool.play(soundID, streamVolume, streamVolume, 0, 0, 1f);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  三.整體功能的實現(xiàn)</b></p><

103、;p><b>  實現(xiàn)步驟</b></p><p><b>  第一步:</b></p><p>  建立音樂播放器類,在這里主要實現(xiàn)背景音樂的播放,暫停以及釋放資源</p><p><b>  /**</b></p><p><b>  * 播放背景音樂<

104、;/b></p><p><b>  */</b></p><p>  public void playMusic() {</p><p>  player = MediaPlayer.create(musicContext, id);</p><p>  player.setLooping(true);</

105、p><p>  player.start();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 暫停</b></p><p><b>  */</b></p>

106、;<p>  public void pauseMusic() {</p><p>  player.pause();</p><p><b>  }</b></p><p><b>  /**</b></p><p><b>  * 釋放資源</b></p

107、><p><b>  */</b></p><p>  public void destroyMusic() {</p><p>  if (player != null) {</p><p><b>  try {</b></p><p>  if (player.isPlay

108、ing()) {</p><p>  player.stop();</p><p><b>  }</b></p><p>  } catch (Exception e) {</p><p>  System.out.println("背景音樂釋放資源錯誤");</p><p>

109、;  e.printStackTrace();</p><p><b>  }</b></p><p><b>  // 釋放資源</b></p><p>  player.release();</p><p><b>  }</b></p><p>&

110、lt;b>  }</b></p><p><b>  第二步:</b></p><p>  游戲音效類,主要實現(xiàn)音效的播放效果以及釋放資源</p><p><b>  /**</b></p><p><b>  * 播放音效</b></p>&l

111、t;p><b>  * </b></p><p>  * @param soundType</p><p><b>  */</b></p><p>  public void playSound(String soundType) {</p><p>  if (isPlay == true

112、) {</p><p>  AudioManager mgr = (AudioManager) context</p><p>  .getSystemService(Context.AUDIO_SERVICE);</p><p>  // 獲取當前的音量值</p><p>  int streamVolume = mgr.getStream

113、Volume(AudioManager.STREAM_MUSIC);</p><p><b>  // 獲得資源ID</b></p><p>  int soundID = soundPoolMap.get(soundType);</p><p><b>  // 播放音效</b></p><p>

114、  soundPool.play(soundID, streamVolume, streamVolume, 0, 0, 1f);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /**</b></p><p><

115、b>  * 釋放資源</b></p><p><b>  */</b></p><p>  public void destroy() {</p><p>  isPlay = false;</p><p>  soundPool.release();</p><p><b

116、>  }</b></p><p><b>  第5章 系統(tǒng)測試</b></p><p><b>  5.1 測試環(huán)境</b></p><p>  手機平臺:HTC Wildfire S A510e(G13)</p><p>  手機系統(tǒng):Android OS v2.1</p&

117、gt;<p>  CPU頻率:1024MHz</p><p>  機身內(nèi)存:512MB RAM</p><p><b>  儲存卡:4GB</b></p><p><b>  5.2 測試用例</b></p><p>  5.2.1 白盒測試</p><p> 

118、 白盒測試法的覆蓋標準有邏輯覆蓋、循環(huán)覆蓋和基本路徑測試。其中邏輯覆蓋包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋。 </p><p>  六種覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋發(fā)現(xiàn)錯誤的能力呈由弱至強的變化。語句覆蓋每條語句至少執(zhí)行一次。判定覆蓋每個判定的每個分支至少執(zhí)行一次。條件覆蓋每個判定的每個條件應(yīng)取到各種可能的值。判定/條件覆蓋同時

119、滿足判定覆蓋條件覆蓋。條件組合覆蓋每個判定中各條件的每一種組合至少出現(xiàn)一次。路徑覆蓋使程序中每一條可能的路徑至少執(zhí)行一次。 </p><p>  白盒測試也稱結(jié)構(gòu)測試或邏輯驅(qū)動測試,它是知道產(chǎn)品內(nèi)部工作過程,可通過測試來檢測產(chǎn)品內(nèi)部動作是否按照規(guī)格說明書的規(guī)定正常進行,按照程序內(nèi)部的結(jié)構(gòu)測試程序,檢驗程序中的每條通路是否都有能按預(yù)定要求正確工作,而不顧它的功能,白盒測試的主要方法有邏輯驅(qū)動、基路測試等,主要用于軟

120、件驗證。</p><p>  "白盒"法全面了解程序內(nèi)部邏輯結(jié)構(gòu)、對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測試數(shù)據(jù)。貫穿程序的獨立路徑數(shù)是天文數(shù)字。但即使每條路徑都測試了仍然可能有錯誤。第一,窮舉路徑測試決不能查出程序違反了設(shè)計規(guī)范,即程序本身是個錯誤的程序。第二,窮舉路徑測試不可能查出程序

121、中因遺漏路徑而出錯。第三,窮舉路徑測試可能發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯誤。</p><p>  白盒測試目前主要用在具有高可靠性要求的軟件領(lǐng)域,例如:軍工軟件、航天航空軟件、工業(yè)控制軟件等等。白盒測試工具在選購時應(yīng)當主要是對開發(fā)語言的支持、代碼覆蓋的深度、嵌入式軟件的測試、測試的可視化等。</p><p>  對開發(fā)語言的支持:白盒測試工具是對源代碼進行的測試,測試的主要內(nèi)容包括詞法分析與語

122、法分析、靜態(tài)錯誤分析、動態(tài)檢測等。但是對于不同的開發(fā)語言,測試工具實現(xiàn)的方式和內(nèi)容差別是較大的。目前測試工具主要支持的開發(fā)語言包括:標準C、C++、Visual C++、Java、Visual J++等。</p><p>  代碼的覆蓋深度:從覆蓋源程序語句的詳盡程度分析,邏輯覆蓋標準包括以下不同的覆蓋標準:語句覆蓋、判定覆蓋、條件覆蓋、條件判定組合覆蓋、多條件覆蓋和修正判定條件覆蓋。</p>&l

123、t;p>  ·語句覆蓋 為了暴露程序中的錯誤,程序中的每條語句至少應(yīng)該執(zhí)行一次。因此語句覆蓋(STatement Coverage)的含義是:選擇足夠多的測試數(shù)據(jù),使被測程序中每條語句至少執(zhí)行一次。語句覆蓋是很弱的邏輯覆蓋。</p><p>  ·判定覆蓋 比語句覆蓋稍強的覆蓋標準是判定覆蓋(DECision Coverage)。判定覆蓋的含義是:設(shè)計足夠的測試用例,使得程序中的每個判定

124、至少都獲得一次“真值”或“假值”,或者說使得程序中的每一個取“真”分支和取“假”分支至少經(jīng)歷一次,因此判定覆蓋又稱為分支覆蓋。</p><p>  ·條件覆蓋 在設(shè)計程序中,一個判定語句是由多個條件組合而成的復(fù)合判定。為了更徹底地實現(xiàn)邏輯覆蓋,可以采用條件覆蓋(ConDItion Coverage)的標準。條件覆蓋的含義是:構(gòu)造一組測試用例,使得每一判定語句中每個邏輯條件的可能值至少滿足一次。</

125、p><p>  ·多條件覆蓋 多條件覆蓋也稱條件組合覆蓋,它的含義是:設(shè)計足夠的測試用例,使得每個判定中條件的各種可能組合都至少出現(xiàn)一次。顯然滿足多條件覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。</p><p>  ·修正條件判定覆蓋 修正條件判定覆蓋是由歐美的航空/航天制造廠商和使用單位聯(lián)合制定的“航空運輸和裝備系統(tǒng)軟件認證標準”,目前在國外的國防、

126、航空航天領(lǐng)域應(yīng)用廣泛。這個覆蓋度量需要足夠的測試用例來確定各個條件能夠影響到包含的判定的結(jié)果。它要求滿足兩個條件:首先,每一個程序模塊的入口和出口點都要考慮至少要被調(diào)用一次,每個程序的判定到所有可能的結(jié)果值要至少轉(zhuǎn)換一次;其次,程序的判定被分解為通過邏輯操作符(and、or)連接的布爾條件,每個條件對于判定的結(jié)果值是獨立的。</p><p>  5.2.2 黑盒測試</p><p>  黑

127、盒測試也稱功能測試或數(shù)據(jù)驅(qū)動測試,它是在已知產(chǎn)品所應(yīng)具有的功能,通過測試來檢測每個功能是否都能正常使用,在測試時,把程序看作一個不能打開的黑盆子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,測試者在程序接口進行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)鋸而產(chǎn)生正確的輸出信息,并且保持外部信息(如數(shù)據(jù)庫或文件)的完整性。黑盒測試方法主要有等價類劃分、邊值分析、因—果圖、錯誤推測等,主要用于軟件確

128、認測試。 “黑盒”法著眼于程序外部結(jié)構(gòu)、不考慮內(nèi)部邏輯結(jié)構(gòu)、針對軟件界面和軟件功能進行測試?!昂诤小狈ㄊ歉F舉輸入測試,只有把所有可能的輸入都作為測試情況使用,才能以這種方法查出程序中所有的錯誤。實際上測試情況有無窮多個,人們不僅要測試所有合法的輸入,而且還要對那些不合法但是可能的輸入進行測試。</p><p>  采用黑盒技術(shù)設(shè)計測試用例的方法有:等價類劃分、邊界值分析、錯誤推測、因果圖和綜合策略。 </p

129、><p>  黑盒測試注重于測試軟件的功能性需求,也即黑盒測試使軟件工程師派生出執(zhí)行程序所有功能需求的輸入條件。黑盒測試并不是白盒測試的替代品,而是用于輔助白盒測試發(fā)現(xiàn)其他類型的錯誤。</p><p>  黑盒測試試圖發(fā)現(xiàn)以下類型的錯誤:</p><p>  1)功能錯誤或遺漏;</p><p><b>  2)界面錯誤;</b&

130、gt;</p><p>  3)數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯誤;</p><p><b>  4)性能錯誤;</b></p><p>  5)初始化和終止錯誤。</p><p><b>  黑盒測試的優(yōu)點</b></p><p>  1.基本上不用人管著,如果程序停止運行了一般

131、就是被測試程序CRASh了</p><p>  2.設(shè)計完測試例之后,下來的工作就是爽了,當然更苦悶的是確定crash原因</p><p><b>  黑盒測試的缺點</b></p><p>  1.結(jié)果取決于測試例的設(shè)計,測試例的設(shè)計部分來勢來源于經(jīng)驗,OUSPG的東西很值得借鑒。</p><p>  2.沒有狀態(tài)轉(zhuǎn)換

132、的概念,目前一些成功的例子基本上都是針對PDU來做的,還做不到針對被測試程序的狀態(tài)轉(zhuǎn)換。</p><p>  3.就沒有狀態(tài)概念的測試來說,尋找和確定造成程序crash的測試例是個麻煩事情,必須把周圍可能的測試例單獨確認一遍。而就有狀態(tài)的測試來說,就更麻煩了,尤其不是一個單獨的tEStcase造成的問題。這些在堆的問題中表現(xiàn)的更為突出。</p><p><b>  5.3 測試結(jié)

133、果</b></p><p><b>  第6章 總結(jié)</b></p><p>  Android是目前最流行的軟件開發(fā)語言之一。Android是一門包含多種知識的學科,提供了豐富的類庫,能最大限度地利用網(wǎng)絡(luò)。在學習的過程中我學到了許多以前沒有學到的概念和新鮮資訊。運用這些知識可以完成老師交給我的課程設(shè)計任務(wù)。這次老師讓我們自己擬訂題目,給了我們很大的想象空

134、間。我選了一個基于Android手機平臺下的仿真水族館游戲進行設(shè)計開發(fā)。。</p><p>  在接到這個程序設(shè)計任務(wù)的時候,我茫然了,不知道應(yīng)該作些什么,從哪里出發(fā)?;氐綄嬍椅异o靜的思考,整理了一下思緒,又在同學的幫助下,我有了系統(tǒng)的規(guī)劃。我首先去圖書館查找資料,找了一些Android課程設(shè)計相關(guān)的書籍;然后我又上網(wǎng)查找了有關(guān)的圖片和說明。最后,在老師的指導和幫助下,在加上自己的努力,一份成功的Android程

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論