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

正文內(nèi)容

基于android的手機(jī)應(yīng)用開(kāi)發(fā)--連連看游戲的開(kāi)發(fā)與實(shí)現(xiàn)(參考版)

2024-10-28 18:41本頁(yè)面
  

【正文】 需要特別說(shuō)明的是,由于本論文傾向于 UI 方面的介紹,對(duì)于每一種算法的具體實(shí)現(xiàn)方法,這里不作詳細(xì)說(shuō)明。 判斷兩個(gè)棋子是否能直連比較簡(jiǎn)單,分為橫連和豎連兩種情況。在確認(rèn)能夠相連后,把起始 點(diǎn)和折點(diǎn)放到 path 變量中去。這里同樣用到了link 方法, link 方法同前面算法里所說(shuō)的一樣,這里分了 3 種情況。 die 是判斷布局無(wú)解的方法,這里用了遍歷算法,但稍做了點(diǎn)優(yōu)化,減少了一個(gè)循環(huán)次數(shù)。循環(huán)變量都是從 1到定義的長(zhǎng)度減 1,不對(duì)邊界處理。 generateMap()是生成初始化布局的方法,其中要調(diào)用 shuffle 方法 。 在這里注 冊(cè)了 GameView 的OnItemClickListener 監(jiān)聽(tīng),記錄開(kāi)始時(shí)間,并每隔 100ms 啟動(dòng)一次前面定義的TimerTask。 Pause 和 resume 是對(duì)應(yīng)的,不過(guò) pause 方法很簡(jiǎn)單,只需要把 timer 停掉。如果你想對(duì)游戲數(shù)據(jù)持久化,除了 activity 中的游戲狀態(tài)還需要保存控制其中的 map、 help 以及 remainTime 變量。 } 可以看到在 startGame 方法中,先調(diào)用了 generateMap()來(lái)生成游戲布局,將幫助次數(shù)和剩余時(shí)間變量進(jìn)行初始化,之后調(diào)用了 resume 方法。//幫助次數(shù)為 100 remainTime =totalTime。 public void startGame(Main m){ generateMap()。 這里定義了游戲總時(shí)間為 200s,在 TimerTask 中,計(jì)算出游戲剩余時(shí)間,并向 redrawHandler 發(fā)送消息。TimerTask 是對(duì)于游戲 的倒計(jì)時(shí)和幫助次數(shù)的更新。否則需要判斷游戲是否還能往下進(jìn)行,來(lái)決定是否需要調(diào)整布局。在 handleMessage 方法中對(duì)這兩種消息分別處理。 定義了 RefreshHandler 和它的一個(gè)實(shí)例 redrawHandler。由于 Timer 會(huì)另起一個(gè)線(xiàn)程,而刷新界面需要在 UI 線(xiàn)程中執(zhí)行,所以程序用到了 Handler。 對(duì)界面的刷新有兩部分。 private ListPointpath=new ArrayListPoint()。 這是保存程序的布局的數(shù)組。 這個(gè)變量上面提到的自定義的視圖,用它來(lái)呈現(xiàn)游戲界面。 這個(gè)是對(duì)程序 activity 的一個(gè)引用,后面用得到。 這里將行數(shù)、列數(shù)圖片大小定義為常量,列數(shù)設(shè)成 10,行數(shù)設(shè)成 12;其中行數(shù)和列數(shù)包括邊界,也就是說(shuō)實(shí)際上棋盤(pán)大小為 8*10。 ( 3)游戲控制器是本案例最為復(fù)雜的部分,在這里實(shí)現(xiàn)了連連看游戲的核心算法以及一些其他控制邏輯,可以說(shuō)這個(gè)類(lèi)是整個(gè)程序的核心。如果 map 數(shù)組對(duì)應(yīng)的元素為 0,即空位,認(rèn)為該位置不可點(diǎn),所以不用通知監(jiān)聽(tīng)者,否則告訴監(jiān)聽(tīng)者 map 數(shù)組這個(gè)位置發(fā)生了單擊事件。 這里介紹了視圖類(lèi)的 onTouchEvent方法,我們只對(duì)其中的 ACTION—DOWN事件感興趣,其他事件可以忽略。這是通過(guò)下面的 onTouchEvent 方法實(shí)現(xiàn)的。OnItemClickListener 是個(gè)接口, interface OnItemClickListener{ public void onClick(Point position)。這次北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 26 刷新有個(gè)延時(shí),還有動(dòng)畫(huà)效果,由控制器來(lái)控制,視圖中不予考慮。通過(guò) onDraw 方法知道,這次刷新 map 數(shù)組對(duì)應(yīng)的位置已經(jīng)置 0,消除效果將在下次刷新視圖時(shí)發(fā)生。 在這個(gè)視圖中提供了 drawLine 方法,傳入一個(gè) path 數(shù)組并刷新視圖。我們提供的 index2screen 方法轉(zhuǎn)換出來(lái)的是對(duì)應(yīng)位置的圖片的左上角坐標(biāo),需要取中間的坐標(biāo)。 map 數(shù)組中以 0 表示空位,不用畫(huà),其他的數(shù)字減去 1 就是圖片在 icons 數(shù)組中的索引。 首先,在被選中的圖片位置畫(huà)一個(gè)與圖片大小一樣的黃色矩形,這樣被選中的圖片背景顏色變了,給人高亮的感覺(jué)。 } private Point index2screen(int x,int y){ return new Point(x*iconWidthoffsetX,y*iconHeightoffsetY)。以下兩個(gè)函數(shù)將屏幕坐標(biāo)與圖片在布局中的坐標(biāo)相互轉(zhuǎn)換。如果按正常布局,最左側(cè)圖片與視圖的左側(cè)距離應(yīng)該是一個(gè)圖片的寬度,也就是邊界的寬度。 rightleft 為視圖的寬度(一般為 320 個(gè)像素), 為橫向共有過(guò)少個(gè)圖片,乘以圖片的寬度為圖片在橫向占的總像素?cái)?shù)。 offsetY=iconHeight(bottomtop(map[0].length2)*iconHeight)/2。這兩個(gè)變量的值是在 onLayout 方法中計(jì)算的: Layout 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 25 protected void onLayout(boolean changed,int left,int top,int right,int bottom){ (changed,left,top,right,bottom)。 lcons 數(shù)組為圖表資源,在 activity 中加載,開(kāi)始游戲后傳過(guò)來(lái)。每個(gè)圖片的寬度和高度信息由控制器來(lái)設(shè)置,這里只提供 set 方法。 這個(gè)類(lèi)中的成員變量包括:圖片坐標(biāo)、圖片寬度、連線(xiàn)的折點(diǎn)、圖片點(diǎn)擊事件的監(jiān)聽(tīng)者、游戲布局?jǐn)?shù)據(jù)、圖片在橫向上的偏移值、圖片在縱向上的偏移值和圖片資源。 ( 2) GameView 類(lèi)是一個(gè)自定義的視圖,根據(jù)控制器提供的 布局?jǐn)?shù)據(jù)來(lái)顯示圖片,并提供圖片選中高亮、連線(xiàn)和消除的功能。 ( 1)程序只有一個(gè) activity,通過(guò)設(shè)置其內(nèi)容視圖來(lái)切換菜單和游戲界面。 代碼的實(shí)現(xiàn)與分析 為了讓程序模塊一目了然,下面畫(huà)出程序模塊的概要設(shè)計(jì)圖: Src va 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 24 圖 2— 12 連連 看游戲程序模塊 系統(tǒng)可分為三個(gè)模塊: 1) activity(程序 UI); 2)自定義視圖(顯示游戲的圖片布局); 3)游戲控制器(控制游戲邏輯)。 如圖所示: 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 23 圖 2— 11 連連 看獲勝后的界面 同樣道理,因?yàn)樵偻嬉淮芜@個(gè)按鈕在代碼中是 (再玩一遍 )。 } 用戶(hù)在規(guī)定的時(shí)間內(nèi)連完所有的圖片,則將 STATE_WIN 賦給變量 state,系統(tǒng)得知此玩家已經(jīng)成功完成游戲,程序回到菜單,并提示用戶(hù)過(guò)關(guān),可以選擇再玩一遍 或退出。 (恭喜你過(guò)關(guān) )。所以當(dāng)我們點(diǎn)擊重試時(shí)游戲又重新加載一次圖標(biāo)資源,重新進(jìn)入了初始化布局界面。 } 用戶(hù)在規(guī)定的時(shí)間內(nèi)沒(méi)有完成游戲,此時(shí)剩余時(shí)間 remainTime=0,則把STATE_LOSE賦給 state,系統(tǒng)得知要顯示游戲失敗的界面,程序回到菜單,提示游戲失敗,并可以選擇開(kāi)始新游戲或退出,同時(shí)播放 music2這一段比較憂(yōu)傷的背景音樂(lè)。 (請(qǐng)重新來(lái)過(guò)! )。 當(dāng)點(diǎn)擊手機(jī)左鍵時(shí)(即暫停鍵),調(diào)用游戲控制器里的 pause()方法,前面提到過(guò)的 5中狀態(tài)變量,此時(shí)把 STATE_PAUSE賦給 state,系統(tǒng)得知要顯示暫停時(shí)的界面。 loadMenu()。 ()。用戶(hù)按下 DPAD的左鍵,游戲暫停并返回菜單,菜單除了開(kāi)始新游戲和退出外,增加了繼續(xù)游戲的選項(xiàng)。在游戲控制器中定義了直連 linkD方法,一折連和二折連中也要調(diào)用直連方法,具體算法不作詳細(xì)介紹,消去時(shí)的生成界面如圖所示: 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 20 圖 2— 8 連連 看在游戲中點(diǎn)擊兩個(gè)相同圖標(biāo)后的界面 如果游戲中布局無(wú)解,則對(duì)剩余圖片重新布局。 在不同的游戲界面下要播放不同的音樂(lè),把這些音樂(lè)存放在 SD卡上。 如果用戶(hù)過(guò)關(guān)或者游戲時(shí)間到,游戲控制器需要設(shè)置游戲狀態(tài),在這里提供了 setState方 法,并根據(jù)狀態(tài)加載菜單 [1 0 ]。 首先判斷游戲的狀態(tài),如果不是正在游戲,不需要處理按鍵事件。下面來(lái)看一下生成的初始布局: 圖 2— 6 連連 看在游戲中的界面 用戶(hù)通過(guò)觸摸方式單擊圖片后,圖片背景變成黃色與其他圖片相區(qū)分 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 19 圖 2— 7 連連 看在游戲中點(diǎn)擊圖標(biāo)后的界面 上圖為單擊中國(guó)國(guó)旗時(shí)的游戲界面,可以明顯地看到背景顏色已經(jīng)變?yōu)辄S色。所以初始布局的方法 generateMap()中要先調(diào)用 die()來(lái)判斷布局是否有解,如果無(wú)解的話(huà)再調(diào)用 shuffle進(jìn)行重新布局,然后再判斷,直到布局有解為止。 } } 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 18 通過(guò)一個(gè) for循環(huán)對(duì)圖標(biāo)資源進(jìn)行加載,但是在我們開(kāi)始玩游戲的時(shí)候,又需要考慮到這個(gè)初始布局是否一定有解,如果沒(méi)有解怎么辦呢,那就只能說(shuō)這個(gè)布局失敗了,那就是這個(gè)程序 的 bug,先定義一個(gè)布爾型的 die()方法來(lái)判斷布局有沒(méi)有解,具體是如何判斷的屬于算法領(lǐng)域,這里不做詳細(xì)介紹。i。加載游戲圖標(biāo)資源的方法如下: private void loadlcons(){ Resources r=getResources()。然后為新建游戲和退出按鈕設(shè)置事件監(jiān)聽(tīng)。因此定義了 loadMenu 方法,并在 onStart 方法中調(diào)用: 首先,通過(guò) setContentView 方法將 activity 的視圖設(shè)置為 。在 Android 系統(tǒng)中,一般 程序進(jìn)入一次后進(jìn)程是不會(huì)退出的,除非用戶(hù)重啟系統(tǒng)或系統(tǒng)內(nèi)存資源不足并且比我們的程序優(yōu)先級(jí)別較低。程序啟動(dòng)后,檢測(cè)到其為 null 時(shí),說(shuō)明是程序第一次啟動(dòng),新建一個(gè)對(duì)象,并加載圖標(biāo)資源。 public static Bitmap[]icons=new Bitmap[iconsCount]。 定義游戲存儲(chǔ)圖標(biāo)的變量一共有十種圖片 public static final int iconsCount=10。 state 變量被初始化為 STATE_MENU,這是程序最初始的菜單。 通過(guò)設(shè)置和訪(fǎng)問(wèn) activity 的 state 變量,可以知道程序處在什么狀態(tài)。 public static final int STATE_LOSE=3。 public static final int STATE_GAME=1。北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 17 中定義了我們程序中唯一的一個(gè) activity 類(lèi)。 這里說(shuō)明一下 Layout中比較常出現(xiàn)的 FILL_PARENT和 WRAP_CONTENT,F(xiàn)ILL_PARENT 意味著 View 想和父容器一樣大,也就是最小的填充( padding)。開(kāi)始游戲按鈕在不同情景文字不同,但功能一樣,都是開(kāi)始一個(gè)新的游戲 [9]。 3 個(gè)按鈕 分別為繼續(xù)游戲、開(kāi)始游戲和退出。接下來(lái)依次設(shè)置每個(gè)按鈕上顯示的文字,如 ―開(kāi)始游戲 ‖等,在設(shè)置每個(gè)按鈕的長(zhǎng)和寬,為了美觀(guān),每個(gè)按鈕的長(zhǎng)和寬需要設(shè)置成一樣的。 RelativeLayout 負(fù)責(zé)想對(duì)布局。也就是說(shuō)先加入進(jìn)去的 View會(huì)顯示在頂端,后續(xù)加入的 View會(huì)顯示在底端。視頻播放的截圖如下所示: 北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 15 圖 2— 3 連連看視頻播放 開(kāi)頭 界面 圖 2— 4 連連看視頻播放 結(jié)尾 界面 這段視頻播放結(jié)束后直接進(jìn)入第一個(gè)菜單,在這里可以選擇開(kāi)始新游戲或退出。 VideoView 類(lèi)實(shí)際上繼承自SurfaceView 類(lèi),且實(shí)現(xiàn)了 接口,所以也可以寫(xiě)一個(gè)用來(lái)播放視頻文件的類(lèi),同樣可以使用 SurfaceView 類(lèi)來(lái)顯示視頻。 接下來(lái)介紹一下如何實(shí)現(xiàn)視頻播放, Android 內(nèi)置的 VideoView 類(lèi)可以快速制作一個(gè)系統(tǒng)播放器, VideoView 主要用來(lái)顯示一個(gè)視頻文件,首先在布 局文件中創(chuàng)建 VideoView 布局,并且創(chuàng)建幾個(gè)按鈕( Button)來(lái)實(shí)現(xiàn)對(duì)視頻的操作,當(dāng)我們點(diǎn)擊 ―裝載 ‖按鈕時(shí),將指定視頻文件路徑,如下代碼所示:(/sdcard/)。 連連看游戲 UI 部分介紹 這個(gè)連連看小游戲?qū)崿F(xiàn)了連連看的連線(xiàn)消除功能、游戲倒計(jì)時(shí)、幫助和暫停功能。為提高效率,可以把同類(lèi)棋子的位置歸 類(lèi)記錄。 布局無(wú)解的判斷 在初始化布局和每次消除棋子后,應(yīng)該判斷布局是否還能連。我們用 ―+‖號(hào)表示棋子延伸的部分: 0 0 0 0 0 0 + 1 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 + + + 1 + + 0 0 0 0 0 0 可以看到水平延伸的公共部分為最左面的兩個(gè)空位,通過(guò)這兩個(gè)折點(diǎn)可以把北京郵電大學(xué)本科畢業(yè)設(shè)計(jì)(論文) 14 兩個(gè)棋子連起來(lái)。 二折型:連線(xiàn)有兩個(gè)折點(diǎn),比如下面的棋子 1: 0 0 0 0
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1