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

正文內(nèi)容

基于android的手機應(yīng)用開發(fā)--連連看游戲的開發(fā)與實現(xiàn)-資料下載頁

2024-10-24 18:41本頁面

【導(dǎo)讀】表情,或皺眉或微笑。手機已經(jīng)成為人們生活的一部分,人們也漸漸習(xí)慣于將手。機作為新的娛樂工具?,F(xiàn)在3G手機時代又即將開啟。領(lǐng)域掀起了軒然大波。Android憑借其開放性和靈活性漸漸趕超原有系統(tǒng)平臺,為一個有趣并富有潛力的領(lǐng)域。上做簡單的移動智能應(yīng)用開發(fā)。平臺采用Java語言在eclipse上實現(xiàn)并測試。簡要的說明,然后介紹Android平臺上開發(fā)的小游戲“連連看”的過程及方法;現(xiàn)對視頻的錄制,并將錄好的視頻存儲在手機的SD卡上這樣一種功能。二部分可以被借鑒,進(jìn)一步用于DVC編解碼的實現(xiàn)。也列舉出了在調(diào)試程序時。遇到的一些問題和解決方法。將這兩個程序放到真機上測試也收到了良好的效。第一章開發(fā)背景介紹-----------------------------------------------2. 移動互聯(lián)網(wǎng)進(jìn)展------------------------------------------2. Android開源性能展望------------------------------------9. 第二章連連看游戲開發(fā)過程介紹------------------------------------10

  

【正文】 段比較憂傷的背景音樂。如圖所示: 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 22 圖 2— 10 連連 看失敗后的界面 因為 重試這個按鈕在代碼中是 (重試 )。所以當(dāng)我們點擊重試時游戲又重新加載一次圖標(biāo)資源,重新進(jìn)入了初始化布局界面。 activity中的另一段代碼如下: if(state==STATE_WIN){ playmusic(1)。 (恭喜你過關(guān) )。 (再玩一遍 )。 } 用戶在規(guī)定的時間內(nèi)連完所有的圖片,則將 STATE_WIN 賦給變量 state,系統(tǒng)得知此玩家已經(jīng)成功完成游戲,程序回到菜單,并提示用戶過關(guān),可以選擇再玩一遍 或退出。同時播放 music1 這一段比較歡快的背景音樂。 如圖所示: 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 23 圖 2— 11 連連 看獲勝后的界面 同樣道理,因為再玩一次這個按鈕在代碼中是 (再玩一遍 )。所以當(dāng)我們點擊再玩一遍時,游戲又重新加載一次圖標(biāo)資源,重新進(jìn)入了初始化布局界面。 代碼的實現(xiàn)與分析 為了讓程序模塊一目了然,下面畫出程序模塊的概要設(shè)計圖: Src va 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 24 圖 2— 12 連連 看游戲程序模塊 系統(tǒng)可分為三個模塊: 1) activity(程序 UI); 2)自定義視圖(顯示游戲的圖片布局); 3)游戲控制器(控制游戲邏輯)。把游戲的視圖和邏輯控制部分區(qū)分開來,這樣寫起來可能覺得比較麻煩,但好處也是顯而易見的:首先這樣程序結(jié)構(gòu)比較清晰;以后擴展維護(hù)起來也比較方便,比如,要更改或美化游戲的界面,只需修改視圖部分;需要修改游戲規(guī)則,只需要修改控制器部分,只要保證這兩部分的耦合邏輯不變即可。 ( 1)程序只有一個 activity,通過設(shè)置其內(nèi)容視圖來切換菜單和游戲界面。第三部分已經(jīng)進(jìn)行了比較詳細(xì)的介紹。 ( 2) GameView 類是一個自定義的視圖,根據(jù)控制器提供的 布局?jǐn)?shù)據(jù)來顯示圖片,并提供圖片選中高亮、連線和消除的功能。在這里,不需要考慮游戲邏輯,只需要考慮需要哪些數(shù)據(jù),暴露些什么接口。 這個類中的成員變量包括:圖片坐標(biāo)、圖片寬度、連線的折點、圖片點擊事件的監(jiān)聽者、游戲布局?jǐn)?shù)據(jù)、圖片在橫向上的偏移值、圖片在縱向上的偏移值和圖片資源。 每次可以有多個圖片被選中(其實最多應(yīng)該有兩個,邏輯部分在我們的控制器中實現(xiàn),這里不需要管),所以被選中的圖片坐標(biāo)用一個 list 來存儲。每個圖片的寬度和高度信息由控制器來設(shè)置,這里只提供 set 方法。 Path 數(shù)組變量為連線的折點,有控制其計 算好了傳過來,在視圖中畫出連線。 lcons 數(shù)組為圖表資源,在 activity 中加載,開始游戲后傳過來。 Map 數(shù)組是游戲的布局?jǐn)?shù)組,在前面的算法介紹中提到過,是帶邊界的,而邊界如果在界面中與其他位置統(tǒng)一處理會浪費很多屏幕空間,因此通過 offsetX、 offsetY 變量來調(diào)整。這兩個變量的值是在 onLayout 方法中計算的: Layout 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 25 protected void onLayout(boolean changed,int left,int top,int right,int bottom){ (changed,left,top,right,bottom)。 if(changed){//offsetX、 offsetY具體的計算方法 offsetX=iconWidth(rightleft()*iconWidth)/2。 offsetY=iconHeight(bottomtop(map[0].length2)*iconHeight)/2。 } } 這里說明一個橫向偏移值的計算,縱向同理。 rightleft 為視圖的寬度(一般為 320 個像素), 為橫向共有過少個圖片,乘以圖片的寬度為圖片在橫向占的總像素數(shù)。視圖的寬度減去圖片在橫向占的總像素數(shù)為橫向空白的像素數(shù),因為要橫向居中,這個數(shù)值除以 2 為最左側(cè)圖片的左側(cè)離視圖左側(cè)的距離。如果按正常布局,最左側(cè)圖片與視圖的左側(cè)距離應(yīng)該是一個圖片的寬度,也就是邊界的寬度。因為邊界不需要這么寬,需要將圖片橫坐標(biāo)向左移的距離為兩者之差。以下兩個函數(shù)將屏幕坐標(biāo)與圖片在布局中的坐標(biāo)相互轉(zhuǎn)換。 private Point screen2index(int x,int y){ return new Point((x+offsetX)/iconWidth,(y+offsetY)/iconHeight)。 } private Point index2screen(int x,int y){ return new Point(x*iconWidthoffsetX,y*iconHeightoffsetY)。 } 下面看一下 GameView 的核心部分,是 onDraw 方法的實現(xiàn)。 首先,在被選中的圖片位置畫一個與圖片大小一樣的黃色矩形,這樣被選中的圖片背景顏色變了,給人高亮的感覺。然后開始 繪制圖片。 map 數(shù)組中以 0 表示空位,不用畫,其他的數(shù)字減去 1 就是圖片在 icons 數(shù)組中的索引。如果 path數(shù)組長度大于等于 2,表示需要畫連線, path 數(shù)組中的點坐標(biāo)為 map 數(shù)組的坐標(biāo),需要轉(zhuǎn)換為屏幕坐標(biāo)。我們提供的 index2screen 方法轉(zhuǎn)換出來的是對應(yīng)位置的圖片的左上角坐標(biāo),需要取中間的坐標(biāo)。畫完連線后,將 map 數(shù)組中需要消除的兩個位置置 0,消空 selected 表,并將 path 設(shè)為 null,這樣下次刷新的時候就可以把對應(yīng)的兩個圖片消除并且將連線擦去。 在這個視圖中提供了 drawLine 方法,傳入一個 path 數(shù)組并刷新視圖。當(dāng)游戲控制器調(diào)用這個方法后,視圖刷新將連線畫上。通過 onDraw 方法知道,這次刷新 map 數(shù)組對應(yīng)的位置已經(jīng)置 0,消除效果將在下次刷新視圖時發(fā)生。后面這次刷新有個延時,以達(dá)到動畫效果,這由控制器來控制,視圖中不予考慮。這次北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 26 刷新有個延時,還有動畫效果,由控制器來控制,視圖中不予考慮。 前面的變量還有一個 OnItemClickListener 類型的 mOnClickListener 。OnItemClickListener 是個接口, interface OnItemClickListener{ public void onClick(Point position)。 } 這個事件監(jiān)聽用來通知監(jiān)聽者用戶單擊了哪個圖片,即 map 數(shù)組對應(yīng)的什么位置。這是通過下面的 onTouchEvent 方法實現(xiàn)的。視圖類的 onTouchEvent 方法里面的 ACTION_DOWN 事件。 這里介紹了視圖類的 onTouchEvent方法,我們只對其中的 ACTION—DOWN事件感興趣,其他事件可以忽略。通過事件,可以得知用戶在屏幕上單擊的點在視圖中的坐標(biāo),通過前面提到的 screen2index 方法轉(zhuǎn)成了對應(yīng) map 數(shù)組的元素。如果 map 數(shù)組對應(yīng)的元素為 0,即空位,認(rèn)為該位置不可點,所以不用通知監(jiān)聽者,否則告訴監(jiān)聽者 map 數(shù)組這個位置發(fā)生了單擊事件。這個監(jiān)聽者是在控制器中實現(xiàn)的,后面將會看到。 ( 3)游戲控制器是本案例最為復(fù)雜的部分,在這里實現(xiàn)了連連看游戲的核心算法以及一些其他控制邏輯,可以說這個類是整個程序的核心。它的成員變量包括:列數(shù)、行數(shù)和圖片大小。 這里將行數(shù)、列數(shù)圖片大小定義為常量,列數(shù)設(shè)成 10,行數(shù)設(shè)成 12;其中行數(shù)和列數(shù)包括邊界,也就是說實際上棋盤大小為 8*10。圖片大小設(shè)置成 45 private Main app。 這個是對程序 activity 的一個引用,后面用得到。 private GameView gameView。 這個變量上面提到的自定義的視圖,用它來呈現(xiàn)游戲界面。 private int[][]map。 這是保存程序的布局的數(shù)組。前面視圖中的 map 數(shù)組只是對這個數(shù)組的一個引用,我們在控制器為它分配空間,生成初始化布局。 private ListPointpath=new ArrayListPoint()。 這個變量在視圖中提到過,是保存連線的起始點及折點。 對界面的刷新有兩部分。一個 是為了實現(xiàn)連線消除動畫,對 GameView 延時刷新;另一部分是更新游戲剩余時間,這部分需要有一個 Timer。由于 Timer 會另起一個線程,而刷新界面需要在 UI 線程中執(zhí)行,所以程序用到了 Handler。這兩部分刷新我們通過給一個定義好的 Handler 發(fā)不同的消息實現(xiàn)。 定義了 RefreshHandler 和它的一個實例 redrawHandler。其中 sleep 方法實現(xiàn)北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 27 了延時刷新功能。在 handleMessage 方法中對這兩種消息分別處理。游戲視圖延時刷新后,需要判斷是否已經(jīng)完全消除,即 map 數(shù)組元素全為 0,如果 是這樣,則通過將 activity 狀態(tài)置為 STATE_WIN 回到菜單。否則需要判斷游戲是否還能往下進(jìn)行,來決定是否需要調(diào)整布局。 對于游戲的倒計時和幫助次數(shù)的更新,這里通過了一個 TimerTask 來實現(xiàn)。TimerTask 是對于游戲 的倒計時和幫助次數(shù)的更新。還需要更新剩余時間,剩余時間的計算方 法remainTime=totalTime((()startTime)/1000);剩余時間的計算方法, 計時方法是毫秒計 時法,得除以 1000 才是秒計時。 這里定義了游戲總時間為 200s,在 TimerTask 中,計算出游戲剩余時間,并向 redrawHandler 發(fā)送消息。 在游戲控制器中提供了 startGame 方法,用來開始一個新的游戲。 public void startGame(Main m){ generateMap()。 help =100。//幫助次數(shù)為 100 remainTime =totalTime。 resume(m)。 } 可以看到在 startGame 方法中,先調(diào)用了 generateMap()來生成游戲布局,將幫助次數(shù)和剩余時間變量進(jìn)行初始化,之后調(diào)用了 resume 方法。其實開始一個新游戲和恢復(fù)游戲的區(qū)別就在于前者對游戲數(shù)據(jù)進(jìn)行初始化,而后者這些數(shù)據(jù)已經(jīng)有了值。如果你想對游戲數(shù)據(jù)持久化,除了 activity 中的游戲狀態(tài)還需要保存控制其中的 map、 help 以及 remainTime 變量。 Resume 是繼續(xù)一個游戲的方法,游戲暫停時計時器停止計時,在 resume 方法中,實例化并初始化了 GameView類。 Pause 和 resume 是對應(yīng)的,不過 pause 方法很簡單,只需要把 timer 停掉。在 resume 方法中,實例化并初始化了 GameView 類,并將這個視圖放到在 .xml文件中定 義的 LinerLayout 點的位 置上。 在這里注 冊了 GameView 的OnItemClickListener 監(jiān)聽,記錄開始時間,并每隔 100ms 啟動一次前面定義的TimerTask。 itemClickListener 方法中需要調(diào)用 link 方法,其中 link 方法是連連看的核心算法,判斷兩個棋子是否能連,如果能連,將連線起始點和折點放到 path 變量中。 generateMap()是生成初始化布局的方法,其中要調(diào)用 shuffle 方法 。 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 28 這個算法選將棋子按順序排好,再隨即交換來大亂布局。循環(huán)變量都是從 1到定義的長度減 1,不對邊界處理。其中 shuffle 方法, RefreshHandler 定義中也要調(diào)用,在布局無解的情況也需要調(diào)用。 die 是判斷布局無解的方法,這里用了遍歷算法,但稍做了點優(yōu)化,減少了一個循環(huán)次數(shù)。我們的期盼不是很大,這樣遍歷起來也比較快。這里同樣用到了link 方法, link 方法同前面算法里所說的一樣,這里分了 3 種情況。不過其實有最后一種情況就夠了,前面兩種情況可以看作最后一種情況的特例。在確認(rèn)能夠相連后,把起始 點和折點放到 path 變量中去。其中用到了 linkD 方法,這個方法判斷兩個棋子是否能直接相連。 判斷兩個棋子是否能直連比較簡單,分為橫連和豎連兩種情況。在 link 函數(shù)中還用到了 expandH 和 expandV 兩個方法,這兩個方法分別對應(yīng)前面算法中提到的水平掃描延伸和垂直延伸,結(jié)果放到定義的 ArryList 中。 需要特別說明的是,由于本論文傾向于 UI 方面的介紹,對于每一種算法的具體實現(xiàn)方法,這里不作詳細(xì)說明。 北京郵電大學(xué)本科畢業(yè)設(shè)計(論文) 29 第 三 章 獲取視 頻文件的程序設(shè)計 Android 多媒體開發(fā)背景介紹 Android 的 核心代碼在去年 3 月底有了一次比較重大的改動,尤其是多媒體方面的改動比較
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1