freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android系統(tǒng)的掃雷游戲程序的開發(fā)(編輯修改稿)

2024-12-13 22:11 本頁面
 

【文章內(nèi)容簡介】 _cells[m][n] = 9。 updatasurround( m1 , n1)。 //左上 updatasurround( m1 , n)。 //上 updatasurround( m1 , n+1)。 //右上 updatasurround( m, n1)。 //左 updatasurround( m, n+1)。 //右 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 9 頁 共 34 頁 updatasurround( m+1 , n1)。 //左下 updatasurround( m+1 , n )。 //下 updatasurround( m+1 , n+1 )。 //右下 i++。} if(i m_mines){ (布雷錯(cuò)誤 )。 break。} }} 上面就是整個(gè)布雷函數(shù)的代碼了,最先聲明一個(gè)變量然后再利用隨機(jī)函數(shù)去填充變量, 下面再聲明 一個(gè)計(jì)數(shù)變量和 一個(gè)二維數(shù)組,接下來是一個(gè)循環(huán),當(dāng)雷還沒有生 成結(jié)束 就不斷循環(huán),利用前面的隨機(jī)函數(shù)產(chǎn)生的變量去獲得二維數(shù)組的行列值,這樣就能確定出一個(gè)二維數(shù)組中的其中一個(gè)變量,然后就是確定變量在數(shù)組中的位置,在確認(rèn)好位置后, 就判斷該點(diǎn)是不是已經(jīng)有雷了,即是不是數(shù)字 9,如果不是 就將改點(diǎn) 設(shè)置為雷,同時(shí)計(jì)數(shù)變量加 1,然后周圍一圈的點(diǎn)都更新一下,非雷的數(shù)值都加 1,雷點(diǎn)數(shù)值不變。具體流程如圖 31 所示。 最后為了防止出錯(cuò),再補(bǔ)充一段錯(cuò)誤處理代碼。 隨 即 函 數(shù) 產(chǎn) 生 x, y值本 格 值 為 1, 周 圍非 1的 格 子 都 加 1是 否 全 部 雷 都布 完布 雷 結(jié) 束程 序 開 始 圖 31 布雷流程 最后當(dāng)計(jì)數(shù) 變量 等于設(shè)置的雷數(shù)時(shí)則布雷結(jié)束,成功生 成 雷區(qū)。 然后將布好的雷區(qū)與圖形界面的一個(gè)個(gè)方格相對(duì)應(yīng)就完成游戲的初始化,如圖 32。 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 10 頁 共 34 頁 圖 32 布雷結(jié)束的界面 屏幕參數(shù)的獲得 為了 界面的美觀考慮游戲 界面 要 可以按照不同手機(jī) 屏幕 要求布局 , 所以屏幕參數(shù)就是必須的 ,并且屏幕參數(shù)的獲取對(duì)于后面的掃雷模塊的編寫也是有幫助的,這里主要獲取屏幕參數(shù)用到了 GetX 和 GetY 兩個(gè)函數(shù),這兩個(gè)函數(shù)可以直接獲取到屏幕的長和寬,再用獲取雷區(qū)的長和寬 Playfield pf = ().get_m_playfield()。 m_width = ()。 m_height = ()。 m_mines = ()。 從創(chuàng)建好的 雷區(qū)獲得雷區(qū)的長寬,再調(diào)用系統(tǒng)的 函數(shù) getWidth 和 getHeight 函數(shù)獲得屏幕的長和寬,進(jìn)行除運(yùn)算從而計(jì)算出每一格 長和寬各是多少,這樣按照換算出的長和寬 , 再進(jìn)行畫圖就可以了。不同設(shè)備都可以按照屏幕大小繪制畫面了 。 隨機(jī) 數(shù)的 實(shí)現(xiàn) 隨機(jī)函數(shù)基本都是 偽隨機(jī)數(shù),并不是真正意義上的隨機(jī)函數(shù),大部分利用了形同時(shí)間或者數(shù)學(xué)公式來作為產(chǎn)生隨機(jī)數(shù)的方法。而 Android 是基于 Java 的所以隨機(jī)函數(shù)則是線性同余法 。 線性同余法產(chǎn)生的偽隨機(jī)數(shù)具有隨機(jī)性好、周期長 ,易于計(jì)算機(jī)實(shí)現(xiàn)和速度快等特點(diǎn)而被廣泛采用。但用線性同余法產(chǎn)生的隨機(jī)數(shù)因受到數(shù)學(xué)規(guī)律的影 響而具有周期性和相關(guān)性。 Java 語言通過 類產(chǎn)生一個(gè)隨機(jī)數(shù)發(fā)生器。它有兩種形式的構(gòu)造函畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 11 頁 共 34 頁 數(shù),分別是 Random()和 Random(long seed)。隨機(jī)數(shù)發(fā)生器即 Random 對(duì)象產(chǎn)生以后,可以通過對(duì)象調(diào)用不同的函數(shù): nextInt()、 nextLong()、 nextFloat()、 nextDouble()等來獲得不同類型的隨機(jī)數(shù)。 Java 方法產(chǎn)生的是偽隨機(jī)數(shù)。因?yàn)?2 個(gè) Random對(duì)象如使用相同的種子(比如都是100),并且以相同的順序調(diào)用相同的函數(shù),那么它們的返回值完全相 同。運(yùn)行后總是產(chǎn)生下面同樣的隨機(jī)數(shù)序列結(jié)果 。 因此,在實(shí)際應(yīng)用中我們要用 Random()來產(chǎn)生隨機(jī)數(shù)發(fā)生器, Random()使用當(dāng)前時(shí)間即 ()作為發(fā)生器的種子,由于每次調(diào)用時(shí)的時(shí)間不同,所以產(chǎn)生的隨機(jī)數(shù)序列也不同。 可總結(jié)的一條經(jīng)驗(yàn)是:調(diào)試時(shí)是用 Random(long seed),可以預(yù)測和控制程序結(jié)果,一旦調(diào)試完成,再換為 Random()。 圖形界面的 繪制 圖形界面的繪制,這個(gè)要 覆寫系統(tǒng)的函數(shù), 已達(dá)到所畫的圖是自己要用的圖 的目的,將用到的圖片改 好名稱格式,復(fù)制到工程目錄下的素材文件夾中,在雷區(qū)文件里面創(chuàng)建變量,將你的圖片賦值給變量,就可以調(diào)用相應(yīng)的圖片繪制圖形界面了,繪制界面 代碼如下 : protected void onDraw(Canvas canvas){ display_width = getWidth()/m_width。 display_height = getHeight()/m_height。 for(int i = 0。 i m_height。 i++) for(int j = 0。 j m_width。 j++){ ( m_imgCell[i][j].m_picture, null, new RectF(j*display_width, i*display_height, (j+1)*display_width, (i+1)*display_height), null)。 }} 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 12 頁 共 34 頁 獲取屏幕的長和寬,與雷區(qū)的長和寬進(jìn)行除法運(yùn)算換算出繪制圖片的長和寬。按照計(jì)算好的長和 寬一張一張的在界面上繪制好圖片 ,將默認(rèn)圖片替換為設(shè)置的圖片變量,按照一行一行的順序?qū)⒔缑娈嬐?,這里用到 2 個(gè) for 循環(huán),需要注意的是不要把長和寬弄反, 也就是哪個(gè)是里層循環(huán),哪個(gè)是外層循環(huán),不然 程序會(huì)出 現(xiàn)越界的 錯(cuò) 誤 。 難度 選擇模塊的設(shè)計(jì) 主要的 框架的設(shè)計(jì)完成了,但是為了使 游戲的內(nèi)容繼續(xù)豐富起來,這個(gè)時(shí)候就 可以考慮給游戲加入不同的難度, 如圖 34所示。 主要的思想就是增加雷區(qū) 長和寬和雷的個(gè)數(shù),這個(gè)就需要修改最先在 生 成 雷區(qū)的 文件內(nèi)把設(shè)置好的 常數(shù)值 改為可以修改的變量,然后 添加相應(yīng) 函數(shù),只要調(diào)用到相應(yīng)的函數(shù), 函數(shù)就會(huì)做賦值操作給產(chǎn)生雷區(qū)的幾個(gè)變量從新賦值,再調(diào)用 restart_game 函數(shù) 將雷區(qū)重新布局,并且重新繪制圖形界面 ,流程如圖 33所示。 修改變量的 函數(shù) 的 代碼: public void gaoji(){ m_width = 20 。 m_height = 24。 m_mines = 99。 } 設(shè)置寬度為 20,高度為 24,雷的數(shù)量為 99 個(gè)。 將這些值賦值給最初生成雷區(qū)的函數(shù),在將雷區(qū)函數(shù)運(yùn)行一遍,這樣新的雷區(qū)就生成了,在將界面用心的雷區(qū)參數(shù)生成,就完成了,游戲難度的改變 。注意的一點(diǎn)是,由于屏幕 很小,所以建議值的設(shè)置不要太大,以免產(chǎn)生錯(cuò)誤。 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 13 頁 共 34 頁 選 擇 等 級(jí)替 換 變 量 值重 新 布 置 雷 區(qū)繪 制 雷 區(qū) 圖 33 改變難度 可以看出其實(shí)難度設(shè)置還是比較簡單的,這里 只需要對(duì)函數(shù)里的幾個(gè)變量進(jìn)行重新賦值就可以解決問題接下來就是畫面的重新的繪制 ().()。 ().()。 View view = new MyView()。 (view)。 先用 getinstance 獲得新的雷區(qū),再利用 setcontentview 函數(shù)重新繪制 view 上的界面,這里生成的 view 替換了舊的 view。 圖 34 等級(jí)界面 首先是重新獲得雷區(qū),接下來再對(duì)來去重新布雷,產(chǎn)生新的 view,最后把新 界面繪制 到 Activity 上就可以了。 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 14 頁 共 34 頁 這邊 有 一個(gè)難點(diǎn)就是函數(shù)的調(diào)用,因?yàn)?Android 是以 java 為基礎(chǔ)的所以涉及到了函數(shù)能否被其他函數(shù)調(diào)用 ,因?yàn)?java 的類是有權(quán)限設(shè)置的,根 據(jù)設(shè)置的設(shè)置就能決定其他類能不能調(diào)用。 public 其他包 都可用, protected 子類 可用, packageprivate 和 private 當(dāng)前包 可用。 自定義模塊 的 設(shè)計(jì) 自定義游戲是用戶交互功能之一,可以讓用戶自由設(shè)置喜歡的難度來進(jìn)行游戲,從而提高用戶體驗(yàn),是游戲更加有親和力。這一環(huán)節(jié)的雷區(qū)的重置可以延續(xù)上面提到 ,這邊唯一的不同是修改的變量值是要從用戶那邊收集的,而不是游戲中自己設(shè)置好了,寫在程序內(nèi)部 的數(shù)值 。基本的思想就是彈出一個(gè)界面讓用戶輸入數(shù)據(jù),系統(tǒng)接收其中的數(shù)據(jù)并賦值給生成雷區(qū)的變量。 數(shù)據(jù)的接 收 系統(tǒng)生成一個(gè)界面,界面上有幾個(gè)輸入框來接收用戶輸入的關(guān)于雷區(qū)的數(shù)據(jù),包含長和寬,還有雷的個(gè)數(shù)。 ed_w = (EditText) findViewById()。 ed_h = (EditText) findViewById()。 ed_m = (EditText) findViewById()。 聲明 3 個(gè)變量,將界面上的輸入框賦值給變量,方便調(diào)用。 ((width))。 ((height))。 ((mines))。 將輸入框的 輸入的字符串變量 強(qiáng)制轉(zhuǎn)換成雷區(qū)變量類型相同的變量 保存下來。 具體界面如圖 35 所示。 首先是頁面的按鈕設(shè)置,設(shè)置按鈕的名字方便系統(tǒng)能夠找到相應(yīng)的輸入文本框, 然后是給文本框輸入的 字符串變量 強(qiáng)制轉(zhuǎn)換保存,這樣在文本框輸入了內(nèi)容就被保存成了雷區(qū) int 變量 。 這個(gè)就是數(shù)據(jù)的接收了,主要就是給變 量 強(qiáng)制 轉(zhuǎn)換 和文本框的重新命名,因?yàn)槲谋究蜉斎氲淖兞款愋褪呛臀覀冃枰念愋筒煌?。 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 15 頁 共 34 頁 圖 35 自定義游戲界面 數(shù)據(jù)的傳輸 雷區(qū)的長和寬還有雷的個(gè)數(shù)接收到了之后要賦值給生成雷區(qū)的函數(shù),這里就是數(shù)據(jù)的傳輸了。 接收 到變量要進(jìn)行使用這個(gè)時(shí)候只要直接去調(diào)用接收 到的 數(shù)據(jù)就好了,然后將變量的值在傳遞給布雷函數(shù),新的雷區(qū)就可以生成了 。 if (() == ){ try{ width = new Integer(().toString())。 height = new Integer(().toString())。 mines = new Integer(().toString())。 }catch(Exception e){} 將從屏幕接收到的值賦值給前面設(shè)置的雷區(qū)的幾個(gè)變量,已達(dá)到數(shù)據(jù)的傳輸和接收。 (width, height,mines)。 ().()。 View view = new MyView()。 (view)。 畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 16 頁 共 34 頁 用新的變量值調(diào)用生成雷區(qū)的函數(shù) ,為了傳輸數(shù)據(jù)的方便直接重新編寫了一個(gè)生成雷區(qū)的函數(shù) ,生成新的雷區(qū),根據(jù)雷區(qū)繪制界面,最后替換舊的 view。 輸 入 數(shù) 值替 換 變 量 值重 新 布 置 雷 區(qū)繪 制 雷 區(qū) 圖 36 自定義游戲 用傳輸過來的數(shù)值產(chǎn)生新的雷區(qū),以達(dá)到產(chǎn)生自定義游戲 ,重復(fù)上面的操作,將雷區(qū)刷新。 具體流程如圖 36 所示。 給函數(shù)增加參數(shù)是解決數(shù)據(jù)傳輸?shù)囊环N便捷的方法,Android 系統(tǒng)還有其他的方法傳輸數(shù)據(jù)。 1. 實(shí)體類 (1) Intent, 他就像一個(gè)快遞員,而且是個(gè)無所不能的快遞員,什么都能送,只要你能把信息加到他上面去 。 (2) Context, 他就是獲取當(dāng)前的環(huán)境狀態(tài), 比如說想知道現(xiàn)在用戶使用的什么語言,處于什么狀態(tài),航班、靜音。用戶有沒有接打電話等等,就像獲取系統(tǒng)時(shí)間一樣。 (3) BroadcastReceiver, 是專門用來接收廣播的類 。 2. 方法類 (1) PendingIntent, 這個(gè)方法就是直接傳遞 Intent。 (2) ,還是廣播。 掃雷 模塊的設(shè)計(jì) 掃雷操作主要涉及到一個(gè)遞歸調(diào)用函數(shù)的編寫和屏幕響應(yīng),如何編寫一個(gè)精簡的遞歸函數(shù)才是這一章的關(guān)鍵 。 遞歸算法是把問題轉(zhuǎn)化為規(guī)??s小了的同類問題的子問題。然后遞歸調(diào)用函數(shù) (或畢業(yè)設(shè)計(jì)說明書 (論文 ) 第 17 頁 共 34 頁 過程 )來表示問題的解。 遞歸算法是 在函數(shù)或子過程的內(nèi)部,直接或者間接地調(diào)用自己的算法。 遞歸調(diào)用的原理 遞歸算法是一種直接或者間接地調(diào)用自身的算法。在計(jì)算機(jī)編寫程序中,遞歸算法對(duì)解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。 : (1) 遞
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1