基于Android的數(shù)獨游戲設計說明_第1頁
基于Android的數(shù)獨游戲設計說明_第2頁
基于Android的數(shù)獨游戲設計說明_第3頁
基于Android的數(shù)獨游戲設計說明_第4頁
基于Android的數(shù)獨游戲設計說明_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、. . . . 學生班級學號專 業(yè)計算機科學與技術課程設計題目基于Android的數(shù)獨游戲設計評語組長簽字:成績?nèi)掌?014 年 月 日課程設計任務書學 院信息科學與工程學院專 業(yè)計算機科學與技術學生班級學號課程設計題目基于Android的數(shù)獨游戲設計實踐教學要求與任務:能夠運用Java語言設計數(shù)獨游戲,實現(xiàn)基本游戲效果。會搭建Android的開發(fā)環(huán)境,并學會運用 Eclipse開發(fā)工具相關Android程序進行開發(fā);深入了解Android項目生成的文件之間的關系和它們的作用。工作計劃與進度安排:第一階段:20學時。設計階段。學生根據(jù)所選題目,查閱有關 資料,綜合所學的理論知識,完成

2、整體設計與具體設計。第二階段:8學時。調(diào)試測試階段。上機調(diào)試測試,要求學生務 必認真,思想高度集中,調(diào)試成功后,整理、編寫設計資料與實驗 報告。 第三階段:4學時。驗收答辯。指導教師: 2014 年 月 日專業(yè)負責人:2014 年 月 日學院教學副院長:2014 年 月 日摘要移動互聯(lián)網(wǎng)時代的到來極大的改變了我們的生活,而Android是一種以Linux為基礎的開放源碼操作系統(tǒng)迅速占領了智能機操作系統(tǒng),所以在android環(huán)境下開發(fā)顯得尤為必要。Android是開放性體系架構,不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且還支持各種可擴展的用戶體驗,包括豐富的圖形組件、多媒體支持功能以與強大的瀏覽器。因

3、此,對于軟件從業(yè)人員來說,Android平臺具有無限的吸引力。本文就在分析討論Android手機軟件開發(fā)技術原理的基礎上,為用戶開發(fā)出基于Android平臺的數(shù)獨游戲的軟件。通過對Android系統(tǒng)架構和應用開發(fā)進行初步研究,設計一款數(shù)獨游戲。在對系統(tǒng)進行詳細需求分析的基礎上,確定了系統(tǒng)的功能和性能要求,對游戲的開機動畫,菜單界面、屏幕繪制、時間控制、布局算法等進行了設計。本文詳細介紹了在Android平臺上以Java為語言編寫游戲的過程,最終實現(xiàn)了一個界面友好、操作簡單的手機益智游戲。關鍵詞:Android 數(shù)獨 智能機目錄1、開發(fā)工具與環(huán)境52、系統(tǒng)分析與設計92.1數(shù)獨游戲背景92.2游

4、戲功能簡介93、系統(tǒng)詳細設計123.1 歡迎界面的設計和實現(xiàn)123.2 游戲界面相關類的實現(xiàn)173.3 數(shù)獨算法類的實現(xiàn)193.4 游戲的測試和運行234、總結28參考文獻291、開發(fā)工具與環(huán)境Android 是谷歌公司發(fā)布的手機操作系統(tǒng),它是基于Linux 平臺的開源手機操作系統(tǒng),谷歌公司將要把其打造為基于移動終端的真正開放的移動軟件平臺,不僅擁有移動所需要的工作軟件,而且在專利權方面能夠不侵犯他人權利去推動移動互聯(lián)網(wǎng)的創(chuàng)新。谷歌公司為了開發(fā)Android,與開放手機聯(lián)盟進行了合作,手機開放聯(lián)盟由全球30 多家移動開發(fā)和手機應用的領先企業(yè)組成。谷歌公司不僅僅和運營商達成了合作關系、而且與設備

5、制造商以與開發(fā)商保持長期合作,目的就在于利用其優(yōu)勢建立移動軟件平臺,其特點是標準化、開放式的。Android是谷歌公司未來企業(yè)戰(zhàn)略的一部分,其目的是為了在任何時候任何地點能夠提供信息。Android應用程序與其他很多計算機平臺的應用程序不同,他們沒有唯一的啟動入口,一個Android應用程序是由多個不同組件組合而成,組件間通過Intent實現(xiàn)通信。Android系統(tǒng)的基本組件包括Activity、Service、Broadcast Receiver和Content Provider等,要實現(xiàn)組件間通信,還需要Intent消息組件。并不是每個Android應用程序都必須具備這四個組件,很多時候只

6、需要這四種中的某幾種就可以了。除此之外,應用程序的所有組件還都必須在AndroidManifest.xml中聲明8。這是一個XML配置文件,這個配置文件用于定義應用程序的組件、組件的功能與必要條件等。這個配置文件是任何一個Android應用程序所必需的。1.1 ActivityActivity 可以說是開發(fā)人員最常用的組件,同時也屬于Android 最基本的組成部分之一。Android 程序中,一般一個Activity 代表手機屏幕上的一屏。舉例來說,如果將手機比作一個瀏覽器,那么一個Activity 就相當于一個網(wǎng)頁。在Activity 中,可以添加多個視圖,然后為這些視圖添加一些事件處理。

7、這些視圖可以是按鈕、文本框、列表等。可以看到,Activity 的概念和網(wǎng)頁的概念相當類似。一般一個Android 應用是由多個Activity 組成,同時這些Activity 相互之間可以進行跳轉(zhuǎn),例如,按下某個Activity 中的Button 按鈕后,可能會跳轉(zhuǎn)到一個其他的Activity。不過和網(wǎng)頁跳轉(zhuǎn)稍有不同,Activity之間的跳轉(zhuǎn)可以有返回值,例如,在Activity A 跳轉(zhuǎn)到Activity B 后,那么當Activity B運行結束時,可能會返回給Activity A 一個值。在多個Activity 交流的過程中,這種返回機制是相當實用的。當用戶進入一個新的屏幕時,之前的

8、屏幕會轉(zhuǎn)入暫停狀態(tài),并且保存在歷史堆棧中。正是由于歷史堆棧的存在,用戶可以通過返回操作,返回到之前打開過的所有屏幕。Android默認的是將應用程序從開始到當前的每一個屏幕都保存到堆棧中,不過與此同時,Android還提供了很方便的機制,讓開發(fā)人員自定義某個屏幕是否需要保存到歷史堆棧。Activity 的跳轉(zhuǎn)實現(xiàn),必須借助于Intent 類。因此Intent 在Android 應用中占據(jù)的地位是極其重要的。簡單來說,一個Intent 就是對一個將要執(zhí)行的操作請求的抽象描述。Intent 的描述,主要包含有兩個數(shù)據(jù)結構:動作(action)和動作對應的數(shù)據(jù)(data)。動作有很多種,系統(tǒng)中最常見

9、的動作類型有:MAIN(表明該Activity 是應用程序的入口)、VIEW、PICK、EDIT 等等;而動作對應的數(shù)據(jù)一般以URI 的形式表示,例如:要查看某一個網(wǎng)頁,則需要創(chuàng)建Intent,它的動作類型為VIEW,對應的數(shù)據(jù)應該是該網(wǎng)頁的網(wǎng)址。值得一提的是,有一個類叫IntentFilter,它是Intent的相關類。如果說Intent是一個有效的操作請求,那么一個IntentFiler則用于描述一個Activity(或者Intent Receiver等)能夠接收哪些Intent的請求。比如系統(tǒng)瀏覽器的Activity用于查看某一個網(wǎng)頁,那么它用于接收Intent的IntentFilter

10、,要定義類型為VIEW的動作并且能夠過濾表示一個網(wǎng)頁網(wǎng)址的URI。通常IntentFilter要被注冊在AndroidManifest.xml文件中。Activity 之間的跳轉(zhuǎn)正是通過解析各種Intent 來實現(xiàn)的。例如一個Activity 調(diào)用startActivity(intent)方法,希望跳轉(zhuǎn)到其他的Activity 時,會觸發(fā)系統(tǒng)的Intent 解析過程,在所有安裝的應用程序中已注冊的IntentFilter 中查找,并最終挑選出能夠匹配Intent 的Activity。然后這個新的Activity 因為接收到Intent 的請求而開始運行,完成Activity 的跳轉(zhuǎn)。這種跳轉(zhuǎn)機

11、制提供了兩個關鍵好處:(1)操作請求被Intent 封裝起來,方便Activity 重復利用。(2)相互跳轉(zhuǎn)的多個Activity 之間實現(xiàn)了松耦合。只要IntentFilier 保持不變,一個ctivity 可以隨意修改,而不用擔心其他Activity 找不到它。1.2 Broadcast Receiver應用程序可以通過Broadcast Receiver 監(jiān)聽一個外部的事件,并做出響應。例如,當應用程序需要對呼入這個外部事件做出反應時,可以利用Broadcast Receiver 進行處理。再如,當一個后臺下載任務成功的事件發(fā)生時,需要提示用戶下載完成,仍然可以利用Broadcast R

12、eceiver 來進行處理。Broadcast Receiver不能生成UI,也就是說對于用戶來說是透明的,用戶是看不到的。Broadcast Receiver只能通過NotificationManager來通知用戶這些事件發(fā)生了。BroadcastReceiver既可以在AndroidManifest.xml中注冊,也可以在運行時的代碼中使用Context.registerReceiver()進行注冊。注冊完成之后,當事件來臨的時候,即使程序沒有啟動,系統(tǒng)依然可以根據(jù)定義,自動啟動程序。各種應用也可以通過使用Context.sendBroadcast()將它們自己的Intent Broadc

13、ast廣播給其他應用程序。1.3 ServiceService是一種程序,它可以運行很長時間,但是它卻沒有用戶界面,不可交互,而且不能自己運行。它需要通過某一個Activity或者其他的Context對象來調(diào)用12。最常見的例子,比如說用戶正在運行一個音樂播放器的程序,此時如果想瀏覽網(wǎng)頁,那么,在用戶導航到Android的瀏覽器以后,雖然進入了瀏覽器屏幕,但是歌曲的播放并沒有停止,而是在后臺繼續(xù)播放著。其實播放的動作正是由播放音樂的Service執(zhí)行著。當然,如果需要的話,Service也是可以停止。通過startService(Intent service)可以啟動一個Service,通過C

14、ontext.bindService()可以綁定一個Service。1.4 Content Provider對于數(shù)據(jù)存儲,Android與其他的操作系統(tǒng)有一點不太一樣,即數(shù)據(jù)在Android程序中都是私有的,這些數(shù)據(jù)包括文件類型和數(shù)據(jù)庫類型以與其他類型的數(shù)據(jù)。這樣系統(tǒng)和應用程序的數(shù)據(jù)就各自獨立起來,以避免受到某些不正常程序或是病毒的影響。不過這并不代表各應用程序之間就因此而無法進行數(shù)據(jù)交換了。當某個應用程序希望與其它的應用共享其數(shù)據(jù)時,Android提供的Content Provider就可以發(fā)揮作用了。在實現(xiàn)ContentProvider的抽象接口以后,程序便可以將自己的數(shù)據(jù)暴露出去,其他程

15、序只要有權限,就可以通過這一套標準而統(tǒng)一的接口,讀取或是刪除該程序的數(shù)據(jù)13。2、系統(tǒng)分析與設計2.1數(shù)獨游戲背景數(shù)獨的前身為“九宮格”,最早起源于中國。但當時的算法比現(xiàn)在的更為復雜,要求縱向、橫向、斜向上的三個數(shù)字之和等于15,而不是數(shù)字不能重復。儒家典籍易經(jīng)中的“九宮圖”也是來源于此。到了18世紀末,瑞士數(shù)學家萊昂哈德·歐文又發(fā)明了一種叫做“拉丁方塊”的游戲,之后不久,美國的一家數(shù)字邏輯游戲雜志開始刊登這類游戲,使此類游戲得到良好發(fā)展,之后又在日本得到了廣泛的傳播。2004年,第一個“數(shù)獨”游戲被刊登上了英國泰晤士報的封面,此時開始數(shù)獨游戲才真正為世界所知曉。數(shù)獨游戲的規(guī)則很簡單

16、,只需要在空格處填寫19的數(shù)字,并保證每個數(shù)字在每個九宮格只出現(xiàn)一次,而一般的游戲過程是系統(tǒng)隨機生成一個棋局,然后玩家需要在空白處填上相應的數(shù)字使其滿足游戲規(guī)則。由于此類游戲操作簡單,不需要特定的語言基礎,也不需要進行數(shù)字運算且可玩性高、鍛煉思維、開發(fā)大腦,所以很快風靡全球。2.2游戲功能簡介數(shù)獨游戲的規(guī)則很簡單,只需在空格處填入19 的數(shù)字,并保證每個數(shù)字在每個九宮格只能出現(xiàn)一次,且每個數(shù)字在每一行、每一列也只能出現(xiàn)一次,而一般的游戲過程是系統(tǒng)隨機生成一個棋局,然后玩家需要在空白處填上相應的數(shù)字使其滿足游戲規(guī)則。游戲框架如下圖所示:圖3.1 游戲框架圖該游戲的運行步驟如下。1.啟動游戲后首先

17、進入的便是歡迎界面的動畫,在歡迎界面中,“點擊屏幕繼續(xù)”閃動,達到提示的效果。2.在游戲界面點擊屏幕,便進入菜單界面。3.在菜單界面單擊“關于游戲”菜單可進入“關于”界面,在“關于”界面中介紹了該游戲的目標平臺與開發(fā)日期。4.在菜單界面單擊“幫助游戲”菜單可進入“幫助”界面,在“幫助”界面介紹了游戲的基本規(guī)則。5.在菜單界面單擊“開始游戲”菜單可進入游戲界面。6.當在游戲過程中單擊“暫?!卑粹o時,便進入暫停狀態(tài)。7在游戲過程中隨時可以通過“換題”按鈕來更換題目。8.當玩家單擊“放棄”按鈕時,會提示玩家是否真的需要退出游戲,然后根據(jù)玩家的選擇進行操作。9.當玩家單擊“提示”按鈕時,界面上會出現(xiàn)一

18、個紅心表示當前可以提示玩家輸入數(shù)字,此時再單擊空白處,便會自動填上正確答案。10.當玩家將界面中所有的空白全部填滿數(shù)字時,系統(tǒng)會自動判斷所填寫的數(shù)字正確與否,當有錯誤時,會出現(xiàn)游戲失敗界面;當全部填寫正確時,會出現(xiàn)游戲勝利界面。11.在勝利或者失敗狀態(tài)時,玩家可以通過點擊屏幕任意位置返回歡迎界面。12.在菜單界面單擊“退出游戲”便可退出該游戲。3、系統(tǒng)詳細設計3.1 歡迎界面的設計和實現(xiàn)3.1.1 主類KLSDActivity實現(xiàn)在本游戲設計中,控制調(diào)度模塊主要是由KLSDActivity類來實現(xiàn)的KLSDActivity繼承自Activity 類,它提供了整個游戲的入口。并且在游戲運行過程中

19、也隨時需要KLSDActivity的管理。組成該類的成員變量如下所示:WelcomeView welcomeView; GameView gameView; AboutView aboutView; HelpView helpView; Handler myHandler 以上類都是對View的繼承,其中WelcomeView是對歡迎動畫界面的引用,GameView是對游戲界面的引用,AboutView是對目錄界面的引用,HelpView是對幫助界面的引用,Handler Handler主要負責線程之間的通信,通過接受消息來更新UI線程中的控件。這里使用Handler類主要實現(xiàn)的是根據(jù)接收到的

20、消息做出相應的切換視圖操作,從而控制調(diào)度各個視圖的顯示。Handler機制使得線程間的通信通過Message和Runnable對象來傳遞和處理。在此模塊的實現(xiàn)中,Handler傳遞的消息容被封裝到一個Message對象中,Message中包含了消息的描述和任何形式的可以被Handler發(fā)送的數(shù)據(jù)對象,其最主要的字段是what,此字段由用戶自己定義,為消息類型碼,接收方可以根據(jù)該字段的值來確定收到的消息是關于什么的。這里重點實現(xiàn)了Handler類中的handleMessage()方法,此方法用來接收并處理消息,接收的參數(shù)為一個Message對象。在這里定義了Message的what字段,根據(jù)接收

21、到的what字段的值來切換到不同的界面,從而實現(xiàn)對整個游戲運行的管理。下面介紹KLSDActivity的成員函數(shù):onCreat():此函數(shù)是Activity 類的入口函數(shù),在此函數(shù)中先將手機設置成全屏模式,然后切換到加載界面并在后臺初始化歡迎動畫界面。initWelcomeView():此函數(shù)實現(xiàn)歡迎界面的切換。initGameView():此函數(shù)實現(xiàn)游戲界面的切換。initHelpView():此函數(shù)初始化幫助界面。initAboutView():此函數(shù)初試化關于界面。上面介紹了實現(xiàn)控制調(diào)度模塊的KLSDActivity 類,可以看出這里主要通過Android中的Handler 機制來控制

22、當前屏幕顯示哪一個界面,從而完成控制調(diào)度功能。3.1.2 歡迎界面WelcomeView類的實現(xiàn)歡迎界面WelcomeView類實現(xiàn)的是開機動畫的功能,簡要流程圖如下:圖4.1 WelcomeView類功能流程圖歡迎界面是通過WelcomeView 類實現(xiàn)的。該類繼承自SurfaceView 類,采用雙緩沖機制進行繪圖。它可以控制表面的格式,比如大小,顯示在屏幕中的位置,最關鍵是的提供了SurfaceHolder 類,使用getHolder 方法獲取。在用WelcomeView 繪制之前必須使用lockCanvas()方法鎖定畫布,并得到畫布,然后在畫布上繪制;當繪制完成后,需要使用unloc

23、kCanvasAndPost 方法來解鎖畫布,于是才能顯示在屏幕上。BitmapID創(chuàng)建了存放動畫幀圖片ID 的數(shù)組,將其存放到數(shù)組中方便管理,在之后進行系統(tǒng)維護時,如需新增動畫幀,只需在此數(shù)組中添加新的ID 即可。在WelcomeView 類中,public WelcomeView(KLSDActivity activity) 是此類的構造器,主要用來初始化刷幀線程、動畫線程、以與初始化圖片,onDraw()方法主要用來繪制屏幕,按次序分別歡迎動畫以與菜單界面。onTouchEvent()方法為屏幕的監(jiān)聽方法,該方法通過玩家單擊位置的坐標判斷出玩家單擊的是菜單界面的哪些區(qū)域,并根據(jù)單擊的按鈕

24、向Activity 的Handler 發(fā)送消息。3.1.3 WelcomeViewDrawThread類和WelcomeViewGoThread類的實現(xiàn)為了實現(xiàn)歡迎界面的動畫效果,這里設計了WelcomeViewDrawThread類,這個類主要負責界面的定時刷新,而WelcomeViewGoThread類負責動畫的生成。WelcomeViewDrawThread類和WelcomeViewGoThread類的生繼承自Thread 類,重寫了Thread 類里的run()方法,都是通過run()方法實現(xiàn)功能。WelcomeViewDrawThread其run()方法的代碼如下:publicvoi

25、d run() /重寫的run方法Canvas c;/聲明畫布while (this.flag) /循環(huán) c = null;try /鎖定整個畫布 c = this.surfaceHolder.lockCanvas(null);synchronized (this.surfaceHolder) /同步 welcomeView.onDraw(c);/調(diào)用繪制方法 finally /用finally保證一定被執(zhí)行if (c != null) /更新屏幕顯示容this.surfaceHolder.unlockCanvasAndPost(c); try Thread.sleep(sleepSpan);

26、/睡眠指定毫秒數(shù) catch(Exception e)/捕獲異常 e.printStackTrace();/打印異常信息 分析其代碼,這里主要控制c值的變化,當其值為null時,結合WelcomeView 類里的onDraw()方法,繪制背景圖片,繪制完成后,c值不為null,解鎖屏幕,將畫布置空,c值又為null,釋放和更新屏幕顯示的容,從而實現(xiàn)刷幀作用。WelcomeViewGoThread類中run()方法代碼如下所示:publicvoid run() /重寫的run方法法while (flag) /循環(huán) welcomeView.drawIndex+;/自加if(welcomeView.

27、drawIndex>welcomeView.bitmapsID.length-1) welcomeView.drawIndex = welcomeView.bitmapsID.length-10; if(welcomeView.drawIndex%5 = 0) welcomeView.drawString = !welcomeView.drawString; try Thread.sleep(sleepSpan);/睡眠 catch(Exception e) e.printStackTrace();/打印異常信息 分析該類的run()方法,控制drawIndex的值,每次循環(huán)將歡迎界面的

28、drawIndex 加1,然后判斷是否到達數(shù)組的最后,當?shù)竭_最后時,將其減10,然后繼續(xù)進行循環(huán)。同時,判斷drawIndex是否為5,這樣每循環(huán)5次改變drawString的值,從而實現(xiàn)文字的閃動效果。3.1.4 HelpView類和AboutView類的實現(xiàn)游戲中關于游戲幫助和游戲說明,我們分別通過HelpView類和AboutView類的實現(xiàn)。HelpView類和AboutView類都是通過onDraw()方法來繪制界面。由于這兩個類在很大程度上是相似的,所以下面只分析HelpView類,代碼如下所示:public HelpView(KLSDActivity activity) supe

29、r(activity);this.activity = activity;/得到activity的引用surfaceHolder = this.getHolder();/獲得surfaceHoldergetHolder().addCallback(this);/添加Callback接口的實現(xiàn)helpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.help);publicvoid onDraw(Canvas canvas) /繪制方法canvas.drawColor(Color.WHITE);/背景色canvas.

30、drawBitmap(helpBitmap, 0, 0, null);/繪制圖片publicboolean onTouchEvent(MotionEvent event) /鍵盤監(jiān)聽方法if(event.getAction() = MotionEvent.ACTION_DOWN)/屏幕被按下double x = event.getX();double y = event.getY();/得到坐標if(x>270 && x<310 && y>440 && y<480)/點擊確定按鈕activity.myHandler.sen

31、dEmptyMessage(2);returnsuper.onTouchEvent(event);public HelpView(KLSDActivity activity) 為“幫助”界面的構造器,在構造器中先得到activity 以與surfaceHolder的引用,然后添加Callback 接口的實現(xiàn)并對圖片資源進行初始化。onDraw()為重寫的繪制方法,在該方法中,首先繪制白色背景,然后將幫助界面的背景圖片繪制到指定位置。onTouchEvent()為重寫的鍵盤監(jiān)聽方法,當玩家點擊屏幕時,會調(diào)用該方法來處理玩家的屏幕事件,在“幫助”界面中該方法實現(xiàn)比較簡單,只是判斷玩家點擊的是否為返

32、回按鈕即可。當玩家點擊返回按鈕時,需要向activity 發(fā)送Handler 消息通知控制器切換屏幕。3.2 游戲界面相關類的實現(xiàn)游戲界面實現(xiàn)游戲展示,計時界面展示,以與功能按鍵。流程圖如下圖所示:圖4.2游戲界面流程圖3.2.1 游戲界面GameView的實現(xiàn)首先理解下GameView的運行思路,GameView在初始化時候讀取相關圖片信息,包括背景圖片,數(shù)獨背景框圖片等等,在初始化同時,啟動GameViewDrawThread線程進行刷幀,TimeThread 線程來更新界面中的時間。當玩家點擊背景框空白位置,需要繪制數(shù)字鍵盤時,會啟動DrawKeyThread 線程繪制數(shù)字鍵盤。當玩家點

33、擊按鈕時候,相關方法會被調(diào)用。以上的過程都需要KLSDActivity的參與管理。GameView 同樣繼承自SurfaceView 類,其關鍵也是實現(xiàn)onDraw()方法。onDraw()方法分別繪制游戲界面背景圖片,數(shù)字背景框,選題提示等等按鈕,時間顯示區(qū)域等。DrawKey()方法實現(xiàn)了數(shù)字鍵盤的繪制,保證在點擊空白框時候有圓盤數(shù)字選框出現(xiàn)。通過surfaceCreated()和surfaceDestroyed()兩個方法負責相關線程的啟動和調(diào)用工作。3.2.2 時間線程TimeThread的實現(xiàn)TimeThread線程主要用來更新界面中的時間,作為數(shù)獨游戲玩家計時功能,代碼如下:pub

34、licclass TimeThread extends ThreadGameView gameView;/聲明GameView的引用boolean flag=true;/循環(huán)標志位public TimeThread(GameView gameView)/構造器this.gameView=gameView;/得到GameView的引用publicvoid run()/重寫的run方法while(flag)gameView.time+;/時間自加tryThread.sleep(1000);/睡眠一秒種catch(Exception e)/捕獲異常e.printStackTrace();/打印異常信

35、息TimeThread 類的實現(xiàn)比較簡單,只需每隔一秒鐘通過gameView.time自加更改一下GameView 中表示時間的屬性即可。public TimeThread(GameView gameView) 為時間線程的構造器,在構造器中先得到GameView的引用。然后重寫run()方法,通過時間的自加,實現(xiàn)一秒鐘功能。3.3 數(shù)獨算法類的實現(xiàn)數(shù)獨算法類主要實現(xiàn)數(shù)獨的生成以與填入數(shù)字的檢測功能,流程圖如下:圖4.3 WelcomeView類功能流程圖3.3.1數(shù)獨算法基本邏輯本節(jié)將對數(shù)獨算法類ShuDuSuanFa.java進行解釋,該類基本上是數(shù)學計算,通過一定的算法產(chǎn)生所需要的數(shù)獨數(shù)

36、組,通過特定的接口供其他類使用。該類的目的是創(chuàng)建一個二維數(shù)組來表示數(shù)獨矩陣。使矩陣的每行、每列、每塊都沒有重復的數(shù)字。算法的簡單思路是先隨機取出一個09 的數(shù)字,然后檢查其所在的行、列、塊是否都符合要求。當符合要求時繼續(xù)填充下一個,而當不符合要求時,再次隨機取出一個沒有取出過的數(shù)字,再判斷。當9 個數(shù)字都取出過后還沒有找到符合要求的數(shù)字時,進行回退處理,即將最后一個取出的符合要求的數(shù)字進行重新取值,直到所有數(shù)字全部填充完畢。在求解數(shù)獨時候,運用到回溯法,將所有的解(問題的解空間)按照一定結構排列,再進行搜索。一般解空間構造成為為樹狀結構,用深度優(yōu)先的策略搜索,一般有兩種方式:1.只需要一個解的

37、話,找到解即停止。2.需要求出所有解,則需做“樹的遍歷”找到所有解。回溯法的基本做法是搜索,或是一種組織得井井有條的,能避免不必要搜索的窮舉式搜索法。這種方法適用于解一些組合數(shù)相當大的問題。回溯法在問題的解空間樹中,按深度優(yōu)先策略,從根結點出發(fā)搜索解空間樹。算法搜索至解空間樹的任意一點時,先判斷該結點是否包含問題的解。如果肯定不包含,則跳過對該結點為根的子樹的搜索,逐層向其祖先結點回溯;否則,進入該子樹,繼續(xù)按深度優(yōu)先策略搜索。回溯法是一種搜索算法,其基本思路是:在一個問題中,根據(jù)題意給出的邊界條件劃定出所有可能解的圍(稱為可能解),根據(jù)題意確定出約束條件。利用程序順次在所有可能解中搜索時按照

38、深度搜索的方式進行。即在第一層選定一個滿足約束條件的解,然后以該可能解為出發(fā)點,搜索第二層的一個可能解(試探)。如果搜索到第二層的一個可能解,則繼續(xù)搜索第三層得一個可能解。依次類推,直到所有層得可能解都被找到,則得到了該問題的一個完整解。如果第二層所有的肯可能解都不滿足約束條件,則返回第一層,放棄原有的可能解,使用第一層的下一個可能解(回溯)。一次類推,尋找第二層的一個可能解?;厮莘ㄏ鄬τ谄渌F舉的特點在于,不必把問題的每一層的所有可能解都遍歷一遍,只要當前的可能解不滿足約束條件就拋棄該解,尋求下一個可能解,而不必求解其余的下層解。當當前層得所有可能解都不滿足約束條件,則回溯到上一層,拋棄上一

39、層的當前可能解。從以上分析中結合數(shù)獨問題的規(guī)則,得出數(shù)獨問題的約束條件為:每一格的數(shù)值圍僅限1-9每一格的數(shù)字在當前行不允許重復每一格的數(shù)字在當前列不允許重復每一格的數(shù)字在當前小宮格不允許重復由此,回溯法通過約束條件的篩選,在所有解中除掉不可能的解,從而獲得問題的一個或者全部解。3.3.2 檢測填充結果根據(jù)數(shù)獨游戲的規(guī)則,玩家填充81個宮格之后,要滿足所有行,所有列和所有小九宮格不能出現(xiàn)重復的數(shù)字,并以此為條件進行檢測。列檢測首先對各列進行檢測,提供了檢測列9個數(shù)字是否有重復數(shù)據(jù)的方法checkLine (),該方法以此遍歷列中的9個數(shù)字,當遍歷到某個數(shù)字時,檢測該數(shù)字后面的數(shù)字是否出現(xiàn)重復。

40、比如,當檢測到第3個數(shù)字是7時,則檢測第4-9個數(shù)字是否出現(xiàn)7,如果出現(xiàn)重復則停止檢測,只有既可以避免重復檢測,又可以避免遺漏。publicboolean checkLine(int col)/ 檢查列是否符合要求 for(int j = 0;j < 8;j+) if(njcol = 0)continue; for(int k =j + 1;k< 9;k+)if(njcol = nkcol)returnfalse; returntrue;行檢測類似于對列數(shù)據(jù)的檢測,還需要對每行進行檢測,因此程序提供了對行數(shù)據(jù)的檢測方法checkRow (),該方法代碼如下:publicboolea

41、n checkRow(int row)/檢查行是否符合要求for(int j = 0;j < 8;j+)if(nrowj = 0)continue; for(int k =j + 1;k < 9;k+)if(nrowj = nrowk)returnfalse; returntrue;小九宮格檢測除了對行和列的重復數(shù)據(jù)檢測之外,還需要對小九宮格的所有數(shù)字進行檢測,避免出現(xiàn)重復現(xiàn)象。檢測原理與行,列檢測一樣,但需要計算九宮格數(shù)字的位置。Row和Col指定了檢測九宮格的位置,數(shù)獨單元格中一共有3×3個九宮格,Row和Col的圍為0到2。用以下程序完成九宮格重復數(shù)字的檢測。pub

42、licboolean checkNine(int row,int col)/檢查3X3區(qū)域是否符合要求int j = row/3*3;/獲得左上角的坐標int k = col/3*3;for(int i = 0;i < 8;i+)/循環(huán)比較if(nj + i/3k + i % 3 = 0)continue;for(int m = i+ 1;m < 9;m+)if(nj + i/3k + i % 3 = nj + m/3k + m % 3)returnfalse; returntrue; 3.4 游戲的測試和運行3.4.1游戲測試概述當游戲軟件制作完成之后,為了驗證本游戲是否存在缺陷

43、、能否達到預期的設計標,我們還需要在預設環(huán)境(如:模擬環(huán)境或真實移動終端設備)中進行調(diào)試和運行,以發(fā)現(xiàn)游戲中可能存在的問題和不足、解決這些缺陷,從而完善軟件功能并進而提升產(chǎn)品質(zhì)量。作為軟件測試的重要組成部分,游戲測試具備軟件測試的一切共同特性,但由于游戲本身又具有一定的特殊性,因而游戲測試主要由兩個部分組成:(1)傳統(tǒng)的軟件測試由于測試是軟件開發(fā)過程中極為重要的組成部分,因而針對軟件本身的測試貫穿于軟件存在的整個生命周期。首先,程序員需要在程序設計開發(fā)過程中按階段對產(chǎn)生的模塊集中測試,以保證系統(tǒng)各模塊能實現(xiàn)各自的功能,在此階段軟件的測試一般主要集中在程序的細節(jié)部分。當軟件制作開發(fā)出來之后,為保

44、證軟件整體的完善性,還需要在軟件工程理論的指導下對整個系統(tǒng)進行測試,這階段的測試主要有黑盒測試和白盒測試。所謂黑盒測試就是把要測試的對象當作一個黑盒子,不需要知道里面是怎么處理的,只要對輸入和輸出數(shù)據(jù)進行測試,這種測試方案屬于高端測試,主要是在操作層面對游戲進行測試;而白盒測試正好相反,基于白盒測試的測試方案屬于低端測試,是對各種設計細節(jié)方面的測試,測試者必須對測試對象的部處理過程非常了解,對里面所有的分支和循環(huán)進行實驗從而達到測試的目的。在進行軟件測試的過程中,測試人員應根據(jù)需要把墨盒和白盒測試有效的結合,以達到發(fā)現(xiàn)軟件錯誤并進而完善軟件的目的。(2)對游戲性的測試由于游戲特別是在很大程度上

45、是對現(xiàn)實世界的一種模擬,因而它不但包含了人類社會的一部分特性,同時還涉與娛樂性、可玩性等獨有特點,所以針對游戲的測試還包括三個部分:游戲情節(jié)的測試:主要是針對體現(xiàn)游戲主線的故事情節(jié)和游戲世界中的任務系統(tǒng)等進行測試。游戲世界的平衡測試:平衡性主要體現(xiàn)在經(jīng)濟平衡、能力平衡(包含技能、屬性等等),測試的目的是為了能保證游戲世界的公平競爭。游戲文化的測試:比如整個游戲世界的風格,是中國文化主導,還是日風格等等,大到游戲整體,小到NPC 對話,比如一個書生,他的對話就必需斯文,不可以用江湖語言。目前在游戲開發(fā)過程中,對游戲性的測試主要有以下幾種實現(xiàn)途徑:一是通過部測試人員對以下的三個方面進行測試,由于他

46、們往往都是經(jīng)過精選而來的職業(yè)玩家,對游戲有很深的認識,因而也能較好完成游戲的測試目標;二是邀請一定數(shù)量的玩家或游戲媒體人員對外圍系統(tǒng)進行測試,其目的主要是測試游戲的可玩性和易用性,與一些外圍的Bug;三是通過大圍的測和公測,讓更多的玩家進行試玩。3.4.2測試環(huán)境本游戲的測試環(huán)境包括兩種,一種是基于 Android 虛擬設備AVD 的測試,在測試之前,首先要創(chuàng)建一個AVD。在測試游戲時選用的是基于Android 2.3的AVD。還有一種便是基于 Android 手機的測試,在測試之前,需要首先將游戲文件夾下的bin 目錄下的游戲的apk 文件通過數(shù)據(jù)線傳到Android 手機上,然后通過Android 手機上的第三方文件瀏覽器找到需要安裝的apk 文件,即可安裝。本人在基于 Android 手機的測試時,選用的手機為SONY WT19I,SONY WT19I的主要參數(shù)為:主屏尺寸:3.2 英寸;主屏色彩:彩屏,1600萬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論