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

正文內(nèi)容

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

2024-10-24 18:41本頁面

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

  

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