《3g手機軟件開發(fā)》課程設計--android平臺數(shù)獨游戲的設計與實現(xiàn)_第1頁
已閱讀1頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《3G手機軟件開發(fā)》</p><p><b>  課程設計</b></p><p>  題目:Android平臺數(shù)獨游戲的設計與實現(xiàn)</p><p>  院、 系: 計算機信息與技術(shù)系 </p><p>  學科專業(yè): 軟件工程 </p><p> 

2、 學生姓名: XXX </p><p>  學 號: B10060XXX </p><p>  指導教師: XX XX </p><p>  ×××2013年06月05日</p><p><b>  目 錄</b

3、></p><p><b>  一、緒 論3</b></p><p><b>  1.課題內(nèi)容3</b></p><p><b>  2.課題意義3</b></p><p>  3.Android系統(tǒng)介紹和發(fā)展趨勢4</p><p><

4、;b>  二、需求分析4</b></p><p><b>  1.任務概述4</b></p><p><b>  2.功能需求5</b></p><p><b>  3.性能需求5</b></p><p><b>  三、概要設計6<

5、/b></p><p><b>  1.數(shù)據(jù)庫設計6</b></p><p><b>  2.功能設計6</b></p><p>  3.系統(tǒng)的結(jié)構(gòu)設計6</p><p>  4.開發(fā)工具的選擇7</p><p><b>  四、詳細設計8</

6、b></p><p><b>  1.主界面設計8</b></p><p><b>  1.1 界面8</b></p><p>  1.2 主要代碼8</p><p>  2.游戲界面設計10</p><p><b>  2.1 界面10</b

7、></p><p>  2.2 主要代碼10</p><p><b>  3.通關(guān)界面13</b></p><p><b>  3.1 界面13</b></p><p>  3.2 主要代碼13</p><p>  4.排行榜界面16</p>&

8、lt;p><b>  4.1 界面16</b></p><p>  4.2 主要代碼17</p><p>  5.數(shù)獨簡介界面18</p><p><b>  5.1 界面18</b></p><p>  5.2 主要代碼18</p><p><b>

9、;  五、軟件實現(xiàn)19</b></p><p>  1.主界面實現(xiàn)(見圖4-1)19</p><p>  2.游戲界面實現(xiàn)(見圖4-2)19</p><p>  3.通關(guān)界面實現(xiàn)(見圖4-3、圖4-4)19</p><p>  4.排行榜界面實現(xiàn)(見圖4-5)19</p><p>  5.數(shù)獨簡介

10、界面實現(xiàn)(見圖4-6)19</p><p><b>  六、軟件測試19</b></p><p>  1. 測試策略19</p><p><b>  2.測試內(nèi)容20</b></p><p>  2.1 首界面主要測試內(nèi)容20</p><p>  2.2 游戲界面主

11、要測試內(nèi)容21</p><p>  2.3 游戲結(jié)束界面主要測試內(nèi)容21</p><p>  2.4 排行榜界面測試內(nèi)容21</p><p>  2.5 背景音樂測試內(nèi)容21</p><p><b>  3.測試結(jié)論21</b></p><p><b>  七、總 結(jié)22&l

12、t;/b></p><p><b>  八、參考文獻22</b></p><p>  附 錄(部分代碼)23</p><p><b>  一、緒 論</b></p><p><b>  1.課題內(nèi)容</b></p><p>  開發(fā)一款Andr

13、oid平臺的數(shù)獨游戲,在教材(《Android基礎(chǔ)教程》)數(shù)獨游戲的基礎(chǔ)上進行功能擴展。擴展部分的功能要求如下:</p><p>  (1)設計游戲關(guān)口不低于3關(guān)。當用戶從第一關(guān)通過后,可以選擇退出或游戲進入第二關(guān)運行,難度按照關(guān)口增加遞增;</p><p> ?。?)每關(guān)不少于5種初始局,且能隨機選擇其中一局運行;</p><p> ?。?)用戶每次通關(guān)播放動畫(

14、或音頻、圖片),并顯示用戶當前的分數(shù);</p><p> ?。?)程序存儲得分在前5名用戶的得分;</p><p><b>  2.課題意義</b></p><p> ?。?)運用軟件工程的原理和方法來指導軟件的設計與開發(fā),既是對本學期剛學習的軟件工程課程的復習,同時也是一次將理論應用到實踐中的實戰(zhàn)演練,非常有助于我們提高自己的分析問題、解決問

15、題以及動手方面的能力;</p><p> ?。?)通過對數(shù)獨游戲的設計與實現(xiàn),可以加深我們對Android了解和認識,使我們對Android編程有一個系統(tǒng)的掌握,為將來的Android游戲或者應用軟件的開發(fā)打下堅實基礎(chǔ)。</p><p>  3.Android系統(tǒng)介紹和發(fā)展趨勢</p><p>  Android是首款基于Linux平臺的開放源代碼的操作系統(tǒng),是目前

16、市面上移動設備最為火熱的操作系統(tǒng),其采用Linux內(nèi)核,由Google公司和開放手機聯(lián)盟領(lǐng)導及開發(fā)。Android是軟件堆層(軟件疊層)的架構(gòu),主要分為三部分:底層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。</p><p>  Android手機系統(tǒng)的一個很大的優(yōu)勢在于其開放性和服務免費。Android是一個對第三方軟件完全開放的平臺,開發(fā)者在為

17、其開發(fā)程序軟件時擁有更大的自由度。Android突破了iPhone 等只能添加為數(shù)不多的固定軟件的枷鎖;同時與Windows Mobile、Symbian等廠商不同,Android操作系統(tǒng)免費向開發(fā)人員提供。Android項目目前正從手機運營商、廠商、開發(fā)者和消費者那里獲得大力支持。</p><p>  安卓在全球市場的成長壯大,塞班市場份額不斷下跌已成不爭事實。安卓操作系統(tǒng)發(fā)展迅猛主要得益于免費、開源

18、和良好產(chǎn)業(yè)運作策略,這三點為安卓在智能手機市場贏得更多的發(fā)展機遇。系統(tǒng)的免費讓更多的廠商加入,推動了份額的上升;代碼的開源讓更多的開發(fā)者進入應用開發(fā);應用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學習的地方。此外,谷歌通過OHA聯(lián)合眾多廠商進行系統(tǒng)研發(fā),不斷更新版本,將系統(tǒng)應用推廣到更多的終端產(chǎn)品中,確保用戶體驗持續(xù)改善。</p><p><b>  二、需求分析</b></p&

19、gt;<p><b>  1.任務概述</b></p><p>  利用所學知識和通過一些拓展開發(fā)一款Android平臺的數(shù)獨游戲。數(shù)獨是一種源自18世紀末的瑞士,后在美國發(fā)展、并在日本得以發(fā)揚光大的數(shù)字謎題,是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據(jù)9X9盤面上給出的已知數(shù)字和解題幫助推理出所有剩余空格的數(shù)字,并填入1-9的數(shù)字,使其滿足每一行、每一列、每一個粗線宮內(nèi)的

20、數(shù)字均含1-9且不重復。每一道合格的數(shù)獨謎題都有且僅有一個唯一答案,推理方法也以此為基礎(chǔ)任何無解或者多解的題目都是不合格的。這種游戲全面考驗玩家的觀察能力和推理能力,雖然玩法不是很難,但數(shù)字排列方式卻千變?nèi)f化,所以不少教育者認為數(shù)獨是訓練頭腦的絕佳方式。</p><p><b>  2.功能需求</b></p><p>  本程序需要實現(xiàn)選擇難度關(guān)卡選擇,繼續(xù)上一次未

21、完成游戲,查看排行榜以及退出游戲等一系列基本功能。擴展部分的功能要求如下:</p><p> ?。?)設計游戲關(guān)口不低于3關(guān)。當用戶從第一關(guān)通過后,可以選擇退出或游戲進入第二關(guān)運行,難度按照關(guān)口增加遞增;</p><p> ?。?)每關(guān)不少于5種初始局,且能隨機選擇其中一局運行;</p><p> ?。?)用戶每次通關(guān)播放動畫(或音頻、圖片),并顯示用戶當前的分數(shù);

22、</p><p>  (4)程序存儲得分在前5名用戶的得分。</p><p><b>  3.性能需求</b></p><p>  (1)處理的準確性和及時性</p><p>  游戲處理的準確性和及時性是游戲的必要性能。在系統(tǒng)設計和開發(fā)過程中,要充分考慮系統(tǒng)當前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應時間能夠滿足

23、用戶對信息處理的需求。</p><p><b> ?。?)軟件的易用性</b></p><p>  該游戲能讓用戶很簡單的操作,使用戶能在很快的時間內(nèi)學會玩該游戲,可以便于用戶之間進行思維的比拼。</p><p> ?。?)系統(tǒng)的響應速度</p><p>  游戲在用戶使用過程中的響應速度要快,達到實時要求,以及時反饋信

24、息。能正確的反應用戶的做題時間。</p><p><b> ?。?)解題時間:</b></p><p>  因為處理數(shù)據(jù)需要不同的算法,算法的好壞在一定程度上就決定了軟件的成敗,接替時間控制要達到一定的要求,只有不斷的優(yōu)化算法才能降低解題的時間從而加強軟件的快速響應從而更好的滿足客戶的需求。</p><p><b>  三、概要設計&

25、lt;/b></p><p><b>  1.數(shù)據(jù)庫設計</b></p><p>  本程序的數(shù)據(jù)庫名為rank.db,其中的數(shù)據(jù)表名為myrank,數(shù)據(jù)內(nèi)容具體如表3-1所示。</p><p>  表3-1 myrank</p><p><b>  2.功能設計</b></p>

26、<p>  (1)游戲開始功能:通過難度關(guān)卡的選擇,調(diào)用不同游戲局開始新的游戲;</p><p>  (2)游戲繼續(xù)功能:啟動因玩家有事或其他原因而暫停的游戲局;</p><p> ?。?)英雄榜功能:通過調(diào)用數(shù)據(jù)庫顯示前五名玩家的名次、姓名和用時;</p><p> ?。?)音樂播放功能:進入游戲主界面、開始游戲以及順利完成一局游戲或者通關(guān),播放不同的

27、背景音樂;</p><p> ?。?)數(shù)據(jù)存儲(數(shù)據(jù)庫)功能:存儲玩家的用時、姓名、名次等相關(guān)信息;</p><p> ?。?)計時功能:記錄玩家完成一局游戲所花費的時間;</p><p> ?。?)數(shù)獨簡介功能:對數(shù)獨進行簡要的介紹,同時對游戲的玩法進行講解和說明;</p><p>  (8)退出程序功能:可以順利退出游戲。</p&g

28、t;<p><b>  3.系統(tǒng)的結(jié)構(gòu)設計</b></p><p>  系統(tǒng)結(jié)構(gòu)為進入主界面顯示游戲界面,選擇菜單分為五項功能:繼續(xù)之前的游戲功能、游戲開始功能,查看排行榜功能,數(shù)獨簡介功能以及退出功能。具體系統(tǒng)結(jié)構(gòu)如圖3-1所示。</p><p>  圖3-1 系統(tǒng)結(jié)構(gòu)圖</p><p><b>  4.開發(fā)工具的選擇

29、</b></p><p>  本軟件采用 Android嵌入式數(shù)據(jù)庫引擎SQLite創(chuàng)建數(shù)據(jù)庫,開發(fā)工具采用的是Eclipse。如圖3-2所示。</p><p>  圖3-3 Eclipse</p><p><b>  四、詳細設計</b></p><p><b>  1.主界面設計</b&

30、gt;</p><p>  主界面作為游戲的啟動界面,用于顯示軟件的基本功能,使用戶對軟件有一個整體了解,主界面主要文件名為“Sudoku.java”,主界面布局文件名為“main.xml”。</p><p><b>  1.1 界面</b></p><p>  主界面如圖4-1所示。</p><p>  圖4-1 數(shù)

31、獨主界面</p><p><b>  1.2 主要代碼</b></p><p>  public void onCreate(Bundle savedInstanceState) {</p><p>  super.onCreate(savedInstanceState);</p><p>  setContentVie

32、w(R.layout.main);</p><p>  // Set up click listeners for all the buttons</p><p>  View continueButton = findViewById(R.id.continue_button);</p><p>  continueButton.setOnClickListene

33、r(this);</p><p>  View newButton = findViewById(R.id.new_button);</p><p>  newButton.setOnClickListener(this);</p><p>  View aboutButton = findViewById(R.id.about_button);</p>

34、<p>  aboutButton.setOnClickListener(this);</p><p>  View exitButton = findViewById(R.id.exit_button);</p><p>  exitButton.setOnClickListener(this);</p><p>  View rankButton=

35、findViewById(R.id.rank_button);</p><p>  rankButton.setOnClickListener(this);}</p><p>  public void onClick(View v) {</p><p>  switch (v.getId()) {</p><p>  case R.id.c

36、ontinue_button: </p><p>  startGame(Game.DIFFICULTY_CONTINUE);</p><p><b>  break;</b></p><p>  case R.id.about_button:</p><p>  Intent i = new Intent(

37、this, About.class);</p><p>  startActivity(i);</p><p><b>  break;</b></p><p>  case R.id.new_button:</p><p>  openNewGameDialog();</p><p><b

38、>  break;</b></p><p>  case R.id.rank_button:</p><p>  Intent t=new Intent(this,Rank.class);</p><p>  startActivity(t);</p><p>  Log.d("ttt", "i

39、ntent go");</p><p><b>  break;</b></p><p>  case R.id.exit_button:</p><p><b>  finish();</b></p><p><b>  break;}</b></p>

40、<p><b>  }</b></p><p><b>  2.游戲界面設計</b></p><p>  游戲界面是數(shù)獨游戲的開始界面,顯示了正在進行的某一局游戲。游戲界面主要文件名為“Game.java”和“PuzzleView.java”。</p><p><b>  2.1 界面</b&g

41、t;</p><p>  游戲界面如圖4-2所示。</p><p>  圖4-2 數(shù)獨游戲界面</p><p><b>  2.2 主要代碼</b></p><p>  public class Game extends Activity {</p><p>  private static f

42、inal String TAG = "Sudoku";</p><p>  public static final String KEY_DIFFICULTY =</p><p>  "org.example.sudoku.difficulty";</p><p>  private static final String P

43、REF_PUZZLE = "puzzle" ; </p><p>  protected static String recordtime="recordtime"; //記錄時間</p><p>  private static int continuetime;</p><p>  public static fin

44、al int DIFFICULTY_EASY = 0;</p><p>  public static final int DIFFICULTY_MEDIUM = 1;</p><p>  public static final int DIFFICULTY_HARD = 2;</p><p>  protected static final int DIFFICU

45、LTY_CONTINUE = -1;</p><p>  int time=0;//定義定時器</p><p>  int rdm;//生成開局數(shù)組隨機數(shù)</p><p>  static int sec=0;//計算計時器分 秒</p><p>  private int puzzle[] = new int[9 * 9];//用一個數(shù)組來

46、存下面的每個數(shù)字</p><p>  private final String easyPuzzle =</p><p>  "360000000004230800000004200" +</p><p>  "070460003820000014500013020" +</p><p>  "

47、;001900000007048300000000045";</p><p>  private final String mediumPuzzle =</p><p>  "650000070000506000014000005" +</p><p>  "007009000002314700000700800"

48、+</p><p>  "500000630000201000030000097";</p><p>  private final String hardPuzzle =</p><p>  "009000000080605020501078000" +</p><p>  "0000007

49、00706040102004000000" +</p><p>  "000720903090301080000000600";</p><p>  private PuzzleView puzzleView;</p><p>  protected void onCreate(Bundle savedInstanceState) {&

50、lt;/p><p>  super.onCreate(savedInstanceState);</p><p>  Log.d(TAG, "onCreate");</p><p>  rdm=(int)(Math.random()*100%5);//生成隨機數(shù)獲得數(shù)組布局中的一種 </p><p>  //Math.r

51、andom()是令系統(tǒng)隨機選取0-1之間的14位的隨機數(shù)。</p><p>  //通過調(diào)用getPuzzle(diff)來啟動不同難度級別</p><p>  int diff = getIntent().getIntExtra(KEY_DIFFICULTY,</p><p>  DIFFICULTY_EASY); //獲取Activity傳來的整形數(shù)據(jù)<

52、;/p><p>  puzzle = getPuzzle(diff);//puzzle數(shù)組的值來自于getPuzzle(diff)返回的值</p><p>  calculateUsedTiles(); </p><p>  puzzleView = new PuzzleView(this);</p><p>  setContentView(p

53、uzzleView);</p><p>  puzzleView.requestFocus(); //用于指定屏幕內(nèi)的焦點View</p><p>  getIntent().putExtra(KEY_DIFFICULTY, DIFFICULTY_CONTINUE);</p><p>  getIntent().putExtra(recordtime,this.t

54、ime);//獲得用戶用時 }</p><p>  private int[] getPuzzle(int diff) {</p><p>  String puz;</p><p>  switch (diff) {</p><p>  case DIFFICULTY_CONTINUE:</p><p>  puz

55、= getPreferences(MODE_PRIVATE).getString(PREF_PUZZLE,</p><p>  easyPuzzle[rdm]);//easypuzzle</p><p>  time=getPreferences(MODE_PRIVATE).getInt(recordtime, continuetime);//讀取保存的用戶用時</p>&l

56、t;p><b>  break;</b></p><p>  case DIFFICULTY_HARD:</p><p>  puz = hardPuzzle[rdm];</p><p><b>  break;</b></p><p>  case DIFFICULTY_MEDIUM:<

57、;/p><p>  puz = mediumPuzzle[rdm];</p><p><b>  break;</b></p><p>  case DIFFICULTY_EASY:</p><p><b>  default:</b></p><p>  puz = easyP

58、uzzle[rdm];</p><p><b>  break;}</b></p><p>  return fromPuzzleString(puz);}</p><p>  private void calculateUsedTiles() {</p><p>  for (int x = 0; x < 9;

59、x++) {</p><p>  for (int y = 0; y < 9; y++) {</p><p>  used[x][y] = calculateUsedTiles(x, y);}</p><p><b>  }</b></p><p><b>  //游戲結(jié)束</b></p

60、><p>  int num=0;</p><p>  for(int i=0;i<81;i++){</p><p>  if(puzzle[i]!=0)</p><p><b>  num++;}</b></p><p>  if(num==81){ </p><p&g

61、t;  Intent t=new Intent(this,GameOver.class);</p><p>  sec=time;//計算用戶用時分秒</p><p>  PuzzleView.timethread.flag=false;//停止計時</p><p>  Log.d("aaa","flag false");&l

62、t;/p><p>  startActivity(t); }</p><p><b>  }</b></p><p><b>  3.通關(guān)界面</b></p><p>  通關(guān)界面是完成一局數(shù)獨游戲后彈出的的界面,顯示玩家該局游戲的得分,如果得分破了數(shù)據(jù)庫里面的前五條記錄則彈出破紀錄界面。通關(guān)界面的文件

63、名為“GameOver.java”,布局文件為“gameover.xml”和“gameover1.xml”。</p><p><b>  3.1 界面</b></p><p>  通關(guān)界面如圖4-3、圖4-4所示。</p><p>  圖4-3 通關(guān)界面1 圖4-4 通關(guān)界面2</p>

64、<p><b>  3.2 主要代碼</b></p><p>  public class GameOver extends Activity implements OnClickListener{</p><p>  private Button restart,outgame,orderbutton;</p><p>  pr

65、ivate TextView mytime,gameover,score1;</p><p>  private EditText myname;</p><p>  static int num=0;</p><p>  SQLiteOpenHelper helper=null;</p><p>  private MytabOperate

66、 myrank = null ;</p><p>  private MytabCursor mytabcursor;</p><p>  MediaPlayer mp;</p><p>  int s,mn,t=1,score=0;</p><p>  protected void onCreate(Bundle savedInstanc

67、eState) {</p><p>  super.onCreate(savedInstanceState);</p><p>  helper = new MyDatabaseHelper(this);</p><p>  mytabcursor=new MytabCursor(GameOver.this.helper.getWritableDatabase())

68、;</p><p>  s=Game.sec;</p><p>  Log.d("aaa",s+" ----------");</p><p>  Log.d("aaa",s+" gameover");</p><p>  mn=mytabcursor.findm

69、in();</p><p>  Log.d("aaa",mn+" gameover");</p><p><b>  //恭喜您通關(guān)了</b></p><p>  //s>mn&&mn!=0</p><p>  if(s>mn&&mn!

70、=0){ </p><p>  setContentView(R.layout.gameover);</p><p>  restart=(Button)findViewById(R.id.restart);</p><p>  outgame=(Button)findViewById(R.id.outgame);</p><p>  sc

71、ore1=(TextView)findViewById(R.id.score1);</p><p>  restart.setOnClickListener(this);</p><p>  outgame.setOnClickListener(this);</p><p>  score= 1000 - s*10;</p><p>  sc

72、ore1.setText(score+"分");//setText(String.valueOf(score))</p><p><b>  }</b></p><p><b>  //恭喜您破紀錄了</b></p><p><b>  else</b></p>&l

73、t;p><b>  {</b></p><p>  setContentView(R.layout.gameover1);</p><p>  mytime=(TextView)findViewById(R.id.mytime);</p><p>  myname=(EditText)findViewById(R.id.myname);

74、</p><p>  orderbutton=(Button)findViewById(R.id.orderbutton);</p><p>  orderbutton.setOnClickListener(this);</p><p>  mytime.setText(s+"秒");</p><p><b> 

75、 }</b></p><p><b>  }</b></p><p>  public void onClick(View v) {</p><p>  switch(v.getId()){</p><p>  case R.id.restart:</p><p>  num=num

76、+1;</p><p>  if (num>2) {</p><p>  mp.stop();</p><p>  Toast toast = Toast.makeText(this,"恭喜您順利通過三關(guān),完成了本關(guān)卡的挑戰(zhàn)", 2500); // (duration:顯示時間)</p><p>  toast.s

77、etGravity(Gravity.CENTER, 0, 0);//setGravity(起點位置,水平向右位移,垂直向下位移)</p><p>  toast.show();</p><p>  Intent tt=new Intent(this,Sudoku.class);</p><p>  startActivity(tt);</p><

78、p><b>  break;</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  Intent t=new Intent(this,Game.class);</p><p>  startActivity(

79、t);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  case R.id.outgame:</p><p>  mp.stop();</p><p>  Intent tt=new Intent(this,Sud

80、oku.class);</p><p>  startActivity(tt);</p><p><b>  break;</b></p><p>  case R.id.orderbutton:</p><p>  //傳輸數(shù)據(jù)到數(shù)據(jù)庫</p><p>  if(myname.getText()

81、.length()<=10&&s!=0)</p><p>  {GameOver.this.myrank = new MytabOperate(</p><p>  GameOver.this.helper.getWritableDatabase());</p><p>  GameOver.this.myrank.insert(myname

82、.getText().toString(), s);</p><p>  Log.d("aaa","insert success");</p><p>  setContentView(R.layout.gameover);</p><p>  gameover=(TextView)findViewById(R.id.game

83、over);</p><p>  restart=(Button)findViewById(R.id.restart);//再來一局</p><p>  outgame=(Button)findViewById(R.id.outgame);//返回</p><p>  score1=(TextView)findViewById(R.id.score1);</p

84、><p>  score= 1000 - s*10;</p><p>  score1.setText(score+"分");</p><p>  restart.setOnClickListener(this);</p><p>  outgame.setOnClickListener(this);</p>&

85、lt;p>  gameover.setText("成績已登錄排行榜!");</p><p><b>  }</b></p><p><b>  else </b></p><p>  { //消息對話框</p><p>  new AlertDialog.Builder

86、(this).setMessage("您輸入的名字過長(不超過10位)請返回重新輸入!").create().show();</p><p><b>  }</b></p><p><b>  break;}</b></p><p><b>  }</b></p>

87、<p>  protected void onResume(){</p><p>  super.onResume();</p><p>  mp=MediaPlayer.create(this, R.raw.shengli);</p><p>  mp.start();</p><p><b>  }</b>

88、</p><p><b>  }</b></p><p><b>  4.排行榜界面</b></p><p>  排行榜界面是點擊“英雄榜”彈出的界面,調(diào)用數(shù)據(jù)庫顯示前五名玩家的名次、用戶名和用時等數(shù)據(jù)。排行榜界面的文件名為“Rank.java”,布局文件為“Rank.xml”。</p><p>&

89、lt;b>  4.1 界面</b></p><p>  排行榜界面如圖4-5所示。</p><p>  圖4-5 排行榜界面</p><p><b>  4.2 主要代碼</b></p><p>  public class Rank extends Activity{</p><

90、p>  private SQLiteOpenHelper helper = null ;</p><p>  private LinearLayout mylayout = null ;</p><p>  public void onCreate(Bundle savedInstanceState) {</p><p>  super.onCreate(sa

91、vedInstanceState);</p><p>  super.setContentView(R.layout.rank);</p><p>  Log.d("aaa", "contentView go");</p><p>  this.mylayout</p><p>  = (LinearL

92、ayout) super.findViewById(R.id.ranklayout);</p><p>  this.helper = new MyDatabaseHelper(this);</p><p>  ListView listView = new ListView(this) ;</p><p><b>  // 要設置數(shù)據(jù)</b>

93、</p><p>  listView.setAdapter(</p><p>  // 所有的數(shù)據(jù)是字符串</p><p>  new ArrayAdapter<String>( this,// 上下文對象</p><p>  // 列表顯示的布局 </p><p>  android.R.layou

94、t.simple_list_item_1,new MytabCursor(// 實例化查詢</p><p>  // 取得SQLiteDatabase對象</p><p>  this.helper.getReadableDatabase()).find()));// 調(diào)用find()方法,返回List<String> ;</p>

95、;<p>  this.mylayout.addView(listView) ;}</p><p><b>  }</b></p><p><b>  5.數(shù)獨簡介界面</b></p><p>  簡介界面是點擊“關(guān)于數(shù)獨”彈出的界面,這是顯示的是數(shù)獨的簡要介紹以及對游戲的玩法進行講解和說明的文字。簡介界面的

96、文件名為“About.java”,布局文件為“about.xml”。</p><p><b>  5.1 界面</b></p><p>  數(shù)獨簡介界面如圖4-6所示。</p><p>  圖4-6 排行榜界面</p><p><b>  5.2 主要代碼</b></p><

97、p>  public class About extends Activity {</p><p><b>  @Override</b></p><p>  protected void onCreate(Bundle savedInstanceState) {</p><p>  super.onCreate(savedInstanc

98、eState);</p><p>  setContentView(R.layout.about); }</p><p><b>  }</b></p><p><b>  五、軟件實現(xiàn)</b></p><p>  1.主界面實現(xiàn)(見圖4-1)</p><p>  2.游戲界

99、面實現(xiàn)(見圖4-2)</p><p>  3.通關(guān)界面實現(xiàn)(見圖4-3、圖4-4)</p><p>  4.排行榜界面實現(xiàn)(見圖4-5)</p><p>  5.數(shù)獨簡介界面實現(xiàn)(見圖4-6)</p><p><b>  六、軟件測試</b></p><p><b>  1. 測試策略&

100、lt;/b></p><p>  以黑盒測試為主,白盒測試為輔,通過簡單的查看軟件內(nèi)部代碼,了解軟件的運行狀態(tài)。</p><p><b>  (1)、易用性測試</b></p><p><b> ?。?)、功能測試</b></p><p><b>  (3)、性能測試</b&g

101、t;</p><p>  (4)、配置/兼容性測試</p><p><b> ?。?)、安全性測試</b></p><p><b>  2.測試內(nèi)容</b></p><p>  2.1 首界面主要測試內(nèi)容</p><p>  按鈕是否響應,是否能彈出相應對話框。</p&

102、gt;<p>  2.2 游戲界面主要測試內(nèi)容</p><p> ?。?)是否能正確彈出棋局;</p><p>  (2)棋盤是否正常顯示;</p><p>  (3)點擊界面是否彈出當前位置的小鍵盤,是否有數(shù)字提示;</p><p> ?。?)數(shù)字是否能正確填入,填寫出錯是否響應錯誤提示。</p><p&g

103、t;  2.3 游戲結(jié)束界面主要測試內(nèi)容</p><p> ?。?)是否正確彈出“通過提示”對話框;</p><p> ?。?)圖片是否正常顯示,得分顯示是否正確;</p><p>  (3)當玩家用時低于數(shù)據(jù)庫中的記錄時是否能彈出“破紀錄”對話框,并正確顯示玩家的用時;</p><p> ?。?)輸入用戶信息時:合法輸入,能否正常存入數(shù)據(jù)庫

104、并再次彈出“通關(guān)提示”對話框;非法輸入,系統(tǒng)能否辨別并作出響應;</p><p>  (5)當玩家成功通過三大關(guān)卡中的某一個三局及其以上游戲,是否能彈出相應提示并結(jié)束。</p><p>  2.4 排行榜界面測試內(nèi)容</p><p>  (1)是否能正常調(diào)用數(shù)據(jù)庫;</p><p>  (2)信息是否正確顯示。</p><

105、p>  2.5 背景音樂測試內(nèi)容</p><p> ?。?)打開游戲首界面、進行游戲、游戲通關(guān)是否播放不同背景音樂;</p><p> ?。?)點擊“返回”退出游戲,是否音樂停止。</p><p><b>  3.測試結(jié)論 </b></p><p> ?。?)測試目標基本完成;</p><p&g

106、t; ?。?)測試全部通過。</p><p>  此次測試是將系統(tǒng)各功能模塊進行逐一的檢查,對系統(tǒng)各功能的正常運行做了充分的測試。輸入數(shù)據(jù)庫數(shù)據(jù)的檢測功能以及出錯處理情況。但由于功能模塊較多,采用功能測試設計的測試用例比較多,測試花費了一定的時間。</p><p><b>  七、總 結(jié)</b></p><p>  在做課程設計之前,我對And

107、roid知識的掌握是很有限的,主要來自于課堂上老師授予的,而自己在課后花的時間相對較少。因此有些知識記得不清楚甚至不知道,這就在很大程度上給本次課程設計帶來了很多麻煩,如時間的多余開銷,程序編寫的效率低下,代碼顯得長而復雜等。</p><p>  在本次課程設計的過程中,每一步功能的實現(xiàn)都讓我感到無比高興,哪怕只是一小步。因為每一小點的成功都能讓我學到并掌握許多的知識。SQLite 數(shù)據(jù)庫的實現(xiàn)是一個非常艱難的過

108、程,但成功連接的那一刻真的是難以言說的激動。通過TimeThread類實現(xiàn)游戲的計時,GameOver類實現(xiàn)游戲通關(guān)的提示與跳轉(zhuǎn),Rank類將存入數(shù)據(jù)庫中的記錄顯示輸出等功能的實現(xiàn)都是本次課程設計中令我感到驕傲的地方,也是收獲最多的地方。</p><p>  通過這次課程設計,讓我意識到自己和周圍的同學存在著很大的差距,小到Android中語句的定義,我都需要重新去學習。因此我比別人花的更多的時間,浪費了更多的精

109、力,但這些都是值得的,因為這一過程中我學到了許多知識。通過本次課程設計讓我進一步熟悉了Android的編程,進一步掌握各種程序調(diào)試方法,進一步了解和學習了良好的程序設計風格,受益匪淺!</p><p>  本次課程設計的基本成功是在老師的辛勤幫助下才得以實現(xiàn),在此感謝張琳老師給我提供了這一個實踐動手的機會以及給予我們的悉心指導和幫助,同時也感謝幫助我的各位同學,因為有他們的提醒和建議,才有了我本次課程設計的成功。

110、</p><p><b>  八、參考文獻</b></p><p>  [1] Ed Burnette著,田俊靜,張波,黃湘清譯.Android基礎(chǔ)教程(第3版·修訂版)[M].北京:人民郵電出版社.2011</p><p>  [2] Nicolas Gramlich,張勁鋒.Android編程入門教程andbook中文版[M].北

111、京:人民郵電出版社.2010</p><p>  [3] 吳亞峰,索依娜.Android核心技術(shù)與實例詳解[M].北京:電子工業(yè)出版社.2010</p><p>  [4] Rogers Cadenhead,Laura Lemay.21天學通Java 2[M].北京:民郵電出版社.2004 </p><p>  [5] 張海藩.

112、軟件工程導論(第五版)[M].北京:清華大學出版社,2008</p><p>  [6] 李鐘尉,周小彤,陳丹丹.Java從入門到精通(第2版)[M].北京:清華大學出版社,2010</p><p>  [7] 郭宏志.android應用開發(fā)詳解.電子工業(yè)出版社</p><p>  [8]Mars.千鋒3G學院android游戲開發(fā)教程</p><

113、;p>  [DB/OL].http://www.mobiletrain.org/ </p><p><b>  附 錄(部分代碼)</b></p><p><b>  主程序代碼:</b></p><p>  import org.example.sudoku.Game;</p><p>  

114、import android.app.Activity;</p><p>  import android.app.AlertDialog;</p><p>  import android.app.AlertDialog.Builder;</p><p>  import android.content.DialogInterface;</p>&l

115、t;p>  import android.content.Intent;</p><p>  import android.os.Bundle;</p><p>  import android.util.Log;</p><p>  import android.view.KeyEvent;</p><p>  import andr

116、oid.view.Menu;</p><p>  import android.view.MenuInflater;</p><p>  import android.view.MenuItem;</p><p>  import android.view.View;</p><p>  import android.view.View.On

117、ClickListener;</p><p>  public class Sudoku extends Activity implements OnClickListener {</p><p>  private static final String TAG = "Sudoku";</p><p>  public void onCreat

118、e(Bundle savedInstanceState) {</p><p>  super.onCreate(savedInstanceState);</p><p>  setContentView(R.layout.main);</p><p>  // Set up click listeners for all the buttons</p>

119、<p>  View continueButton = findViewById(R.id.continue_button);</p><p>  continueButton.setOnClickListener(this);</p><p>  View newButton = findViewById(R.id.new_button);</p><p&

120、gt;  newButton.setOnClickListener(this);</p><p>  View aboutButton = findViewById(R.id.about_button);</p><p>  aboutButton.setOnClickListener(this);</p><p>  View exitButton = findV

121、iewById(R.id.exit_button);</p><p>  exitButton.setOnClickListener(this);</p><p>  View rankButton=findViewById(R.id.rank_button);</p><p>  rankButton.setOnClickListener(this); }<

122、/p><p>  protected void onResume() {</p><p>  super.onResume();</p><p>  Music.play(this, R.raw.main); }</p><p>  protected void onPause() {</p><p>  super.o

123、nPause();</p><p>  Music.stop(this);}</p><p>  public void onClick(View v) {</p><p>  switch (v.getId()) {</p><p>  case R.id.continue_button: </p><p&g

124、t;  Intent c=new Intent(this,Game.class);</p><p>  c.putExtra(Game.KEY_DIFFICULTY, -1);</p><p>  startActivity(c);</p><p><b>  break;</b></p><p>  case R.id

125、.about_button:</p><p>  Intent i = new Intent(this, About.class);</p><p>  startActivity(i);</p><p><b>  break;</b></p><p>  case R.id.new_button:</p>

126、<p>  openNewGameDialog();</p><p><b>  break;</b></p><p>  case R.id.rank_button:</p><p>  Intent t=new Intent(this,Rank.class);</p><p>  startActivi

127、ty(t);</p><p>  Log.d("ttt", "intent go");</p><p><b>  break;</b></p><p>  case R.id.exit_button:</p><p><b>  exit();</b><

128、;/p><p><b>  break;} }</b></p><p>  public boolean onCreateOptionsMenu(Menu menu) {</p><p>  super.onCreateOptionsMenu(menu);</p><p>  MenuInflater inflater =

溫馨提示

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

評論

0/150

提交評論