版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《3G手機(jī)軟件開發(fā)》</p><p><b> 課程設(shè)計(jì)</b></p><p> 題目:Android平臺(tái)數(shù)獨(dú)游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 院、 系: 計(jì)算機(jī)信息與技術(shù)系 </p><p> 學(xué)科專業(yè): 軟件工程 </p><p>
2、 學(xué)生姓名: XXX </p><p> 學(xué) 號(hào): B10060XXX </p><p> 指導(dǎo)教師: 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ā)展趨勢(shì)4</p><p><
4、;b> 二、需求分析4</b></p><p><b> 1.任務(wù)概述4</b></p><p><b> 2.功能需求5</b></p><p><b> 3.性能需求5</b></p><p><b> 三、概要設(shè)計(jì)6<
5、/b></p><p><b> 1.?dāng)?shù)據(jù)庫設(shè)計(jì)6</b></p><p><b> 2.功能設(shè)計(jì)6</b></p><p> 3.系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)6</p><p> 4.開發(fā)工具的選擇7</p><p><b> 四、詳細(xì)設(shè)計(jì)8</
6、b></p><p><b> 1.主界面設(shè)計(jì)8</b></p><p><b> 1.1 界面8</b></p><p> 1.2 主要代碼8</p><p> 2.游戲界面設(shè)計(jì)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.?dāng)?shù)獨(dú)簡(jiǎn)介界面18</p><p><b> 5.1 界面18</b></p><p> 5.2 主要代碼18</p><p><b>
9、; 五、軟件實(shí)現(xiàn)19</b></p><p> 1.主界面實(shí)現(xiàn)(見圖4-1)19</p><p> 2.游戲界面實(shí)現(xiàn)(見圖4-2)19</p><p> 3.通關(guān)界面實(shí)現(xiàn)(見圖4-3、圖4-4)19</p><p> 4.排行榜界面實(shí)現(xiàn)(見圖4-5)19</p><p> 5.?dāng)?shù)獨(dú)簡(jiǎn)介
10、界面實(shí)現(xiàn)(見圖4-6)19</p><p><b> 六、軟件測(cè)試19</b></p><p> 1. 測(cè)試策略19</p><p><b> 2.測(cè)試內(nèi)容20</b></p><p> 2.1 首界面主要測(cè)試內(nèi)容20</p><p> 2.2 游戲界面主
11、要測(cè)試內(nèi)容21</p><p> 2.3 游戲結(jié)束界面主要測(cè)試內(nèi)容21</p><p> 2.4 排行榜界面測(cè)試內(nèi)容21</p><p> 2.5 背景音樂測(cè)試內(nèi)容21</p><p><b> 3.測(cè)試結(jié)論21</b></p><p><b> 七、總 結(jié)22&l
12、t;/b></p><p><b> 八、參考文獻(xiàn)22</b></p><p> 附 錄(部分代碼)23</p><p><b> 一、緒 論</b></p><p><b> 1.課題內(nèi)容</b></p><p> 開發(fā)一款A(yù)ndr
13、oid平臺(tái)的數(shù)獨(dú)游戲,在教材(《Android基礎(chǔ)教程》)數(shù)獨(dú)游戲的基礎(chǔ)上進(jìn)行功能擴(kuò)展。擴(kuò)展部分的功能要求如下:</p><p> ?。?)設(shè)計(jì)游戲關(guān)口不低于3關(guān)。當(dāng)用戶從第一關(guān)通過后,可以選擇退出或游戲進(jìn)入第二關(guān)運(yùn)行,難度按照關(guān)口增加遞增;</p><p> (2)每關(guān)不少于5種初始局,且能隨機(jī)選擇其中一局運(yùn)行;</p><p> ?。?)用戶每次通關(guān)播放動(dòng)畫(
14、或音頻、圖片),并顯示用戶當(dāng)前的分?jǐn)?shù);</p><p> ?。?)程序存儲(chǔ)得分在前5名用戶的得分;</p><p><b> 2.課題意義</b></p><p> ?。?)運(yùn)用軟件工程的原理和方法來指導(dǎo)軟件的設(shè)計(jì)與開發(fā),既是對(duì)本學(xué)期剛學(xué)習(xí)的軟件工程課程的復(fù)習(xí),同時(shí)也是一次將理論應(yīng)用到實(shí)踐中的實(shí)戰(zhàn)演練,非常有助于我們提高自己的分析問題、解決問
15、題以及動(dòng)手方面的能力;</p><p> ?。?)通過對(duì)數(shù)獨(dú)游戲的設(shè)計(jì)與實(shí)現(xiàn),可以加深我們對(duì)Android了解和認(rèn)識(shí),使我們對(duì)Android編程有一個(gè)系統(tǒng)的掌握,為將來的Android游戲或者應(yīng)用軟件的開發(fā)打下堅(jiān)實(shí)基礎(chǔ)。</p><p> 3.Android系統(tǒng)介紹和發(fā)展趨勢(shì)</p><p> Android是首款基于Linux平臺(tái)的開放源代碼的操作系統(tǒng),是目前
16、市面上移動(dòng)設(shè)備最為火熱的操作系統(tǒng),其采用Linux內(nèi)核,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。Android是軟件堆層(軟件疊層)的架構(gòu),主要分為三部分:底層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。</p><p> Android手機(jī)系統(tǒng)的一個(gè)很大的優(yōu)勢(shì)在于其開放性和服務(wù)免費(fèi)。Android是一個(gè)對(duì)第三方軟件完全開放的平臺(tái),開發(fā)者在為
17、其開發(fā)程序軟件時(shí)擁有更大的自由度。Android突破了iPhone 等只能添加為數(shù)不多的固定軟件的枷鎖;同時(shí)與Windows Mobile、Symbian等廠商不同,Android操作系統(tǒng)免費(fèi)向開發(fā)人員提供。Android項(xiàng)目目前正從手機(jī)運(yùn)營(yíng)商、廠商、開發(fā)者和消費(fèi)者那里獲得大力支持。</p><p> 安卓在全球市場(chǎng)的成長(zhǎng)壯大,塞班市場(chǎng)份額不斷下跌已成不爭(zhēng)事實(shí)。安卓操作系統(tǒng)發(fā)展迅猛主要得益于免費(fèi)、開源
18、和良好產(chǎn)業(yè)運(yùn)作策略,這三點(diǎn)為安卓在智能手機(jī)市場(chǎng)贏得更多的發(fā)展機(jī)遇。系統(tǒng)的免費(fèi)讓更多的廠商加入,推動(dòng)了份額的上升;代碼的開源讓更多的開發(fā)者進(jìn)入應(yīng)用開發(fā);應(yīng)用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學(xué)習(xí)的地方。此外,谷歌通過OHA聯(lián)合眾多廠商進(jìn)行系統(tǒng)研發(fā),不斷更新版本,將系統(tǒng)應(yīng)用推廣到更多的終端產(chǎn)品中,確保用戶體驗(yàn)持續(xù)改善。</p><p><b> 二、需求分析</b></p&
19、gt;<p><b> 1.任務(wù)概述</b></p><p> 利用所學(xué)知識(shí)和通過一些拓展開發(fā)一款A(yù)ndroid平臺(tái)的數(shù)獨(dú)游戲。數(shù)獨(dú)是一種源自18世紀(jì)末的瑞士,后在美國(guó)發(fā)展、并在日本得以發(fā)揚(yáng)光大的數(shù)字謎題,是一種運(yùn)用紙、筆進(jìn)行演算的邏輯游戲。玩家需要根據(jù)9X9盤面上給出的已知數(shù)字和解題幫助推理出所有剩余空格的數(shù)字,并填入1-9的數(shù)字,使其滿足每一行、每一列、每一個(gè)粗線宮內(nèi)的
20、數(shù)字均含1-9且不重復(fù)。每一道合格的數(shù)獨(dú)謎題都有且僅有一個(gè)唯一答案,推理方法也以此為基礎(chǔ)任何無解或者多解的題目都是不合格的。這種游戲全面考驗(yàn)玩家的觀察能力和推理能力,雖然玩法不是很難,但數(shù)字排列方式卻千變?nèi)f化,所以不少教育者認(rèn)為數(shù)獨(dú)是訓(xùn)練頭腦的絕佳方式。</p><p><b> 2.功能需求</b></p><p> 本程序需要實(shí)現(xiàn)選擇難度關(guān)卡選擇,繼續(xù)上一次未
21、完成游戲,查看排行榜以及退出游戲等一系列基本功能。擴(kuò)展部分的功能要求如下:</p><p> (1)設(shè)計(jì)游戲關(guān)口不低于3關(guān)。當(dāng)用戶從第一關(guān)通過后,可以選擇退出或游戲進(jìn)入第二關(guān)運(yùn)行,難度按照關(guān)口增加遞增;</p><p> ?。?)每關(guān)不少于5種初始局,且能隨機(jī)選擇其中一局運(yùn)行;</p><p> ?。?)用戶每次通關(guān)播放動(dòng)畫(或音頻、圖片),并顯示用戶當(dāng)前的分?jǐn)?shù);
22、</p><p> ?。?)程序存儲(chǔ)得分在前5名用戶的得分。</p><p><b> 3.性能需求</b></p><p> ?。?)處理的準(zhǔn)確性和及時(shí)性</p><p> 游戲處理的準(zhǔn)確性和及時(shí)性是游戲的必要性能。在系統(tǒng)設(shè)計(jì)和開發(fā)過程中,要充分考慮系統(tǒng)當(dāng)前和將來可能承受的工作量,使系統(tǒng)的處理能力和響應(yīng)時(shí)間能夠滿足
23、用戶對(duì)信息處理的需求。</p><p><b> ?。?)軟件的易用性</b></p><p> 該游戲能讓用戶很簡(jiǎn)單的操作,使用戶能在很快的時(shí)間內(nèi)學(xué)會(huì)玩該游戲,可以便于用戶之間進(jìn)行思維的比拼。</p><p> ?。?)系統(tǒng)的響應(yīng)速度</p><p> 游戲在用戶使用過程中的響應(yīng)速度要快,達(dá)到實(shí)時(shí)要求,以及時(shí)反饋信
24、息。能正確的反應(yīng)用戶的做題時(shí)間。</p><p><b> ?。?)解題時(shí)間:</b></p><p> 因?yàn)樘幚頂?shù)據(jù)需要不同的算法,算法的好壞在一定程度上就決定了軟件的成敗,接替時(shí)間控制要達(dá)到一定的要求,只有不斷的優(yōu)化算法才能降低解題的時(shí)間從而加強(qiáng)軟件的快速響應(yīng)從而更好的滿足客戶的需求。</p><p><b> 三、概要設(shè)計(jì)&
25、lt;/b></p><p><b> 1.?dāng)?shù)據(jù)庫設(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.功能設(shè)計(jì)</b></p>
26、<p> ?。?)游戲開始功能:通過難度關(guān)卡的選擇,調(diào)用不同游戲局開始新的游戲;</p><p> ?。?)游戲繼續(xù)功能:?jiǎn)?dòng)因玩家有事或其他原因而暫停的游戲局;</p><p> ?。?)英雄榜功能:通過調(diào)用數(shù)據(jù)庫顯示前五名玩家的名次、姓名和用時(shí);</p><p> ?。?)音樂播放功能:進(jìn)入游戲主界面、開始游戲以及順利完成一局游戲或者通關(guān),播放不同的
27、背景音樂;</p><p> (5)數(shù)據(jù)存儲(chǔ)(數(shù)據(jù)庫)功能:存儲(chǔ)玩家的用時(shí)、姓名、名次等相關(guān)信息;</p><p> (6)計(jì)時(shí)功能:記錄玩家完成一局游戲所花費(fèi)的時(shí)間;</p><p> (7)數(shù)獨(dú)簡(jiǎn)介功能:對(duì)數(shù)獨(dú)進(jìn)行簡(jiǎn)要的介紹,同時(shí)對(duì)游戲的玩法進(jìn)行講解和說明;</p><p> ?。?)退出程序功能:可以順利退出游戲。</p&g
28、t;<p><b> 3.系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)</b></p><p> 系統(tǒng)結(jié)構(gòu)為進(jìn)入主界面顯示游戲界面,選擇菜單分為五項(xiàng)功能:繼續(xù)之前的游戲功能、游戲開始功能,查看排行榜功能,數(shù)獨(dú)簡(jiǎn)介功能以及退出功能。具體系統(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> 四、詳細(xì)設(shè)計(jì)</b></p><p><b> 1.主界面設(shè)計(jì)</b&
30、gt;</p><p> 主界面作為游戲的啟動(dòng)界面,用于顯示軟件的基本功能,使用戶對(duì)軟件有一個(gè)整體了解,主界面主要文件名為“Sudoku.java”,主界面布局文件名為“main.xml”。</p><p><b> 1.1 界面</b></p><p> 主界面如圖4-1所示。</p><p> 圖4-1 數(shù)
31、獨(dú)主界面</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.游戲界面設(shè)計(jì)</b></p><p> 游戲界面是數(shù)獨(dú)游戲的開始界面,顯示了正在進(jìn)行的某一局游戲。游戲界面主要文件名為“Game.java”和“PuzzleView.java”。</p><p><b> 2.1 界面</b&g
41、t;</p><p> 游戲界面如圖4-2所示。</p><p> 圖4-2 數(shù)獨(dú)游戲界面</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"; //記錄時(shí)間</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;//定義定時(shí)器</p><p> int rdm;//生成開局?jǐn)?shù)組隨機(jī)數(shù)</p><p> static int sec=0;//計(jì)算計(jì)時(shí)器分 秒</p><p> private int puzzle[] = new int[9 * 9];//用一個(gè)數(shù)組來
46、存下面的每個(gè)數(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);//生成隨機(jī)數(shù)獲得數(shù)組布局中的一種 </p><p> //Math.r
51、andom()是令系統(tǒng)隨機(jī)選取0-1之間的14位的隨機(jī)數(shù)。</p><p> //通過調(diào)用getPuzzle(diff)來啟動(dòng)不同難度級(jí)別</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)的焦點(diǎn)View</p><p> getIntent().putExtra(KEY_DIFFICULTY, DIFFICULTY_CONTINUE);</p><p> getIntent().putExtra(recordtime,this.t
54、ime);//獲得用戶用時(shí) }</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);//讀取保存的用戶用時(shí)</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;//計(jì)算用戶用時(shí)分秒</p><p> PuzzleView.timethread.flag=false;//停止計(jì)時(shí)</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)界面是完成一局?jǐn)?shù)獨(dú)游戲后彈出的的界面,顯示玩家該局游戲的得分,如果得分破了數(shù)據(jù)庫里面的前五條記錄則彈出破紀(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> //恭喜您破紀(jì)錄了</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:顯示時(shí)間)</p><p> toast.s
77、etGravity(Gravity.CENTER, 0, 0);//setGravity(起點(diǎn)位置,水平向右位移,垂直向下位移)</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("成績(jī)已登錄排行榜!");</p><p><b> }</b></p><p><b> else </b></p><p> { //消息對(duì)話框</p><p> new AlertDialog.Builder
86、(this).setMessage("您輸入的名字過長(zhǎng)(不超過10位)請(qǐng)返回重新輸入!").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ǎn)擊“英雄榜”彈出的界面,調(diào)用數(shù)據(jù)庫顯示前五名玩家的名次、用戶名和用時(shí)等數(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è)置數(shù)據(jù)</b>
93、</p><p> listView.setAdapter(</p><p> // 所有的數(shù)據(jù)是字符串</p><p> new ArrayAdapter<String>( this,// 上下文對(duì)象</p><p> // 列表顯示的布局 </p><p> android.R.layou
94、t.simple_list_item_1,new MytabCursor(// 實(shí)例化查詢</p><p> // 取得SQLiteDatabase對(duì)象</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.?dāng)?shù)獨(dú)簡(jiǎn)介界面</b></p><p> 簡(jiǎn)介界面是點(diǎn)擊“關(guān)于數(shù)獨(dú)”彈出的界面,這是顯示的是數(shù)獨(dú)的簡(jiǎn)要介紹以及對(duì)游戲的玩法進(jìn)行講解和說明的文字。簡(jiǎn)介界面的
96、文件名為“About.java”,布局文件為“about.xml”。</p><p><b> 5.1 界面</b></p><p> 數(shù)獨(dú)簡(jiǎn)介界面如圖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> 五、軟件實(shí)現(xiàn)</b></p><p> 1.主界面實(shí)現(xiàn)(見圖4-1)</p><p> 2.游戲界
99、面實(shí)現(xiàn)(見圖4-2)</p><p> 3.通關(guān)界面實(shí)現(xiàn)(見圖4-3、圖4-4)</p><p> 4.排行榜界面實(shí)現(xiàn)(見圖4-5)</p><p> 5.?dāng)?shù)獨(dú)簡(jiǎn)介界面實(shí)現(xiàn)(見圖4-6)</p><p><b> 六、軟件測(cè)試</b></p><p><b> 1. 測(cè)試策略&
100、lt;/b></p><p> 以黑盒測(cè)試為主,白盒測(cè)試為輔,通過簡(jiǎn)單的查看軟件內(nèi)部代碼,了解軟件的運(yùn)行狀態(tài)。</p><p><b> ?。?)、易用性測(cè)試</b></p><p><b> ?。?)、功能測(cè)試</b></p><p><b> ?。?)、性能測(cè)試</b&g
101、t;</p><p> (4)、配置/兼容性測(cè)試</p><p><b> ?。?)、安全性測(cè)試</b></p><p><b> 2.測(cè)試內(nèi)容</b></p><p> 2.1 首界面主要測(cè)試內(nèi)容</p><p> 按鈕是否響應(yīng),是否能彈出相應(yīng)對(duì)話框。</p&
102、gt;<p> 2.2 游戲界面主要測(cè)試內(nèi)容</p><p> (1)是否能正確彈出棋局;</p><p> ?。?)棋盤是否正常顯示;</p><p> ?。?)點(diǎn)擊界面是否彈出當(dāng)前位置的小鍵盤,是否有數(shù)字提示;</p><p> (4)數(shù)字是否能正確填入,填寫出錯(cuò)是否響應(yīng)錯(cuò)誤提示。</p><p&g
103、t; 2.3 游戲結(jié)束界面主要測(cè)試內(nèi)容</p><p> ?。?)是否正確彈出“通過提示”對(duì)話框;</p><p> ?。?)圖片是否正常顯示,得分顯示是否正確;</p><p> (3)當(dāng)玩家用時(shí)低于數(shù)據(jù)庫中的記錄時(shí)是否能彈出“破紀(jì)錄”對(duì)話框,并正確顯示玩家的用時(shí);</p><p> ?。?)輸入用戶信息時(shí):合法輸入,能否正常存入數(shù)據(jù)庫
104、并再次彈出“通關(guān)提示”對(duì)話框;非法輸入,系統(tǒng)能否辨別并作出響應(yīng);</p><p> ?。?)當(dāng)玩家成功通過三大關(guān)卡中的某一個(gè)三局及其以上游戲,是否能彈出相應(yīng)提示并結(jié)束。</p><p> 2.4 排行榜界面測(cè)試內(nèi)容</p><p> ?。?)是否能正常調(diào)用數(shù)據(jù)庫;</p><p> ?。?)信息是否正確顯示。</p><
105、p> 2.5 背景音樂測(cè)試內(nèi)容</p><p> ?。?)打開游戲首界面、進(jìn)行游戲、游戲通關(guān)是否播放不同背景音樂;</p><p> ?。?)點(diǎn)擊“返回”退出游戲,是否音樂停止。</p><p><b> 3.測(cè)試結(jié)論 </b></p><p> ?。?)測(cè)試目標(biāo)基本完成;</p><p&g
106、t; (2)測(cè)試全部通過。</p><p> 此次測(cè)試是將系統(tǒng)各功能模塊進(jìn)行逐一的檢查,對(duì)系統(tǒng)各功能的正常運(yùn)行做了充分的測(cè)試。輸入數(shù)據(jù)庫數(shù)據(jù)的檢測(cè)功能以及出錯(cuò)處理情況。但由于功能模塊較多,采用功能測(cè)試設(shè)計(jì)的測(cè)試用例比較多,測(cè)試花費(fèi)了一定的時(shí)間。</p><p><b> 七、總 結(jié)</b></p><p> 在做課程設(shè)計(jì)之前,我對(duì)And
107、roid知識(shí)的掌握是很有限的,主要來自于課堂上老師授予的,而自己在課后花的時(shí)間相對(duì)較少。因此有些知識(shí)記得不清楚甚至不知道,這就在很大程度上給本次課程設(shè)計(jì)帶來了很多麻煩,如時(shí)間的多余開銷,程序編寫的效率低下,代碼顯得長(zhǎng)而復(fù)雜等。</p><p> 在本次課程設(shè)計(jì)的過程中,每一步功能的實(shí)現(xiàn)都讓我感到無比高興,哪怕只是一小步。因?yàn)槊恳恍↑c(diǎn)的成功都能讓我學(xué)到并掌握許多的知識(shí)。SQLite 數(shù)據(jù)庫的實(shí)現(xiàn)是一個(gè)非常艱難的過
108、程,但成功連接的那一刻真的是難以言說的激動(dòng)。通過TimeThread類實(shí)現(xiàn)游戲的計(jì)時(shí),GameOver類實(shí)現(xiàn)游戲通關(guān)的提示與跳轉(zhuǎn),Rank類將存入數(shù)據(jù)庫中的記錄顯示輸出等功能的實(shí)現(xiàn)都是本次課程設(shè)計(jì)中令我感到驕傲的地方,也是收獲最多的地方。</p><p> 通過這次課程設(shè)計(jì),讓我意識(shí)到自己和周圍的同學(xué)存在著很大的差距,小到Android中語句的定義,我都需要重新去學(xué)習(xí)。因此我比別人花的更多的時(shí)間,浪費(fèi)了更多的精
109、力,但這些都是值得的,因?yàn)檫@一過程中我學(xué)到了許多知識(shí)。通過本次課程設(shè)計(jì)讓我進(jìn)一步熟悉了Android的編程,進(jìn)一步掌握各種程序調(diào)試方法,進(jìn)一步了解和學(xué)習(xí)了良好的程序設(shè)計(jì)風(fēng)格,受益匪淺!</p><p> 本次課程設(shè)計(jì)的基本成功是在老師的辛勤幫助下才得以實(shí)現(xiàn),在此感謝張琳老師給我提供了這一個(gè)實(shí)踐動(dòng)手的機(jī)會(huì)以及給予我們的悉心指導(dǎo)和幫助,同時(shí)也感謝幫助我的各位同學(xué),因?yàn)橛兴麄兊奶嵝押徒ㄗh,才有了我本次課程設(shè)計(jì)的成功。
110、</p><p><b> 八、參考文獻(xiàn)</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ù)與實(shí)例詳解[M].北京:電子工業(yè)出版社.2010</p><p> [4] Rogers Cadenhead,Laura Lemay.21天學(xué)通Java 2[M].北京:民郵電出版社.2004 </p><p> [5] 張海藩.
112、軟件工程導(dǎo)論(第五版)[M].北京:清華大學(xué)出版社,2008</p><p> [6] 李鐘尉,周小彤,陳丹丹.Java從入門到精通(第2版)[M].北京:清華大學(xué)出版社,2010</p><p> [7] 郭宏志.android應(yīng)用開發(fā)詳解.電子工業(yè)出版社</p><p> [8]Mars.千鋒3G學(xué)院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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- android課程設(shè)計(jì)報(bào)告--android智能手機(jī)軟件開發(fā)
- 基于BREW平臺(tái)的3G手機(jī)軟件開發(fā)研討.pdf
- 基于android平臺(tái)的手機(jī)軟件開發(fā)-基于android平臺(tái)的手機(jī)星座查詢軟件設(shè)計(jì)
- 基于android系統(tǒng)的手機(jī)軟件開發(fā)研究
- 3g時(shí)代手機(jī)軟件技術(shù)--騰訊
- android平臺(tái)3g手機(jī)氣象軟件——畢業(yè)論文
- 基于3G手機(jī)平臺(tái)網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 在BREW平臺(tái)下的手機(jī)軟件開發(fā).pdf
- GSM手機(jī)軟件開發(fā).pdf
- 基于android平臺(tái)的3g氣象軟件
- 基于Android平臺(tái)的3G氣象軟件的開發(fā).pdf
- 畢業(yè)設(shè)計(jì)---基于android平臺(tái)的3g氣象軟件
- Android手機(jī)軟件自動(dòng)化測(cè)試的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 畢業(yè)論文范文——android平臺(tái)3g手機(jī)氣象軟件
- 移動(dòng)平臺(tái)游戲軟件開發(fā)課程設(shè)計(jì)說明書
- 基于android平臺(tái)的3g氣象軟件
- 基于Android平臺(tái)的手機(jī)游戲設(shè)計(jì)與實(shí)現(xiàn).pdf
- android平臺(tái)掃雷游戲課程設(shè)計(jì)
- 基于Android平臺(tái)的3G氣象軟件.doc
- 嵌入式系統(tǒng)課程設(shè)計(jì)--android 實(shí)現(xiàn)愛情連連看(3g移動(dòng)開發(fā)技術(shù))
評(píng)論
0/150
提交評(píng)論