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

正文內(nèi)容

基于android的手機(jī)應(yīng)用開發(fā)連連看游戲的開發(fā)與實現(xiàn)畢業(yè)設(shè)計論文(參考版)

2025-06-29 13:21本頁面
  

【正文】 ,繼續(xù)游戲的按鈕要設(shè)置成在開始時不可用,否則當(dāng)我們進(jìn)入游戲時看到的第一個界面就會是圖4—5 重新開始的時候跳出暫停時界面這顯然是錯誤的,和我們的目的不一致,解決方法也很簡單,只要將“繼續(xù)游戲”按鈕這部分的代碼改為:Button android:layout_height=wrap_contentandroid:layout_width=100dipandroid:id=+id/resumeandroid:text=繼續(xù)游戲android:layout_margi。(3)地圖中的每一個數(shù)字的種類不能大于已有的圖案的個數(shù)。大體而言有三個基本原則:(1)地圖中的每一個數(shù)字的個數(shù)都是偶數(shù),也即都是成對的出現(xiàn) 。之前寫的代碼后面并沒有除以1000,然后計算時間總是不對,()出了問題,()是毫秒顯示,于是在后面除以1000得到了正確的結(jié)果。這段代碼中的10改寫成5,問題就解決了。本來將圖片種類設(shè)置為10種,我想先將5個圖片放進(jìn)drawable文件夾中試驗一下,這樣程序雖不會報錯,但是運(yùn)行結(jié)果卻有問題,運(yùn)行時,視頻播放結(jié)束后,就會直接報錯,有時會加載出一到兩個圖標(biāo)后報錯,如圖:圖4—4 家在圖標(biāo)的報錯界面后來仔細(xì)地研究了一下出現(xiàn)問題的原因,為什么有時候能夠出現(xiàn)一兩個圖標(biāo)呢,原因是程序?qū)τ螒蚪缑娴某跏蓟椒ㄊ菍?0個圖標(biāo)隨機(jī)地進(jìn)行加載,而這10個圖標(biāo)編號為1到10來進(jìn)行區(qū)分,由于真實地只放進(jìn)去了5個圖標(biāo),所以當(dāng)加載到第6個到第10個的時候,由于并沒有圖標(biāo),所以會報錯,如果很幸運(yùn)前幾個加載的都是編號1到5的圖標(biāo),則能成功地加載進(jìn)去,但是由于一共是8*10個圖標(biāo),肯定有一個會是編號為6到10的,所以生成界面的時候基本上一定會出錯。意思是每隔100ms程序就會刷新一下游戲的界面,之前設(shè)置的是500ms,這樣每隔500ms才刷新一次界面,那么當(dāng)處在游戲界面時,如果點(diǎn)擊間隔時間小于500ms的時候游戲就會出現(xiàn)問題,如下圖所示:圖4—3 在游戲界面時點(diǎn)擊過快的報錯界面然后將間隔時間調(diào)成100ms后,出現(xiàn)這種錯誤的幾率明顯降低。同樣道理播放視頻和正式的游戲界面也要先在Layout文件夾中各寫一段代碼,這兩段代碼的Layout顯示分別為:圖4—2 圖4—3 并不能因為什么都沒顯示,就認(rèn)為這段代碼不起作用,通俗地說只是現(xiàn)在這里占個位,然后再向其中填充應(yīng)有的內(nèi)容。在設(shè)計第一個游戲界面時,標(biāo)題是“連連看”,兩個按鈕分別是開始游戲和退出。3,還需要配置另一個環(huán)境變量,也是系統(tǒng)變量里面的,選擇“新建”,然后在變量名里面寫入“classpath”,變量值里面寫入你的JDK所安裝的目錄下的lib文件夾下的“”和“”,然后點(diǎn)確定,再確定,就完成了JDK的安裝和環(huán)境變量的配置了。2,這時,出現(xiàn)對話框,變量名是“path”,變量值就是要找到你的JDK所安裝的目錄下的bin文件夾的路徑,注意如果自己的“path”還有其他的值的話,要用“。接下來就介紹一下在進(jìn)行畢業(yè)設(shè)計時遇到的問題,以及解決的方法。每行代碼的作用與錄制音頻的代碼相類似,這里不作詳細(xì)說明。 ()。 (15)。(176, ()。 /sdcard/。Android多媒體錄制中的錄像就是Audio+Video,所以還要加點(diǎn)東西,path設(shè)置音頻文件的編碼;(())。設(shè)置麥克風(fēng);()。mMediaRecorder = new MediaRecorder()。if(().equals(A_MOUNTED))這個條件語句用來檢測是否存在SD卡,如果不存在,屏幕就會提示“沒有SD卡”,mRecAudioFile = (strTempFile,.amr, mRecAudioPath)。 private Button StopButton。由于模擬器上沒有sd卡,所以視頻錄制的部分并不能在模擬器上演示,只能在真機(jī)上進(jìn)行調(diào)試,測試結(jié)果也是成功的,如圖所示: 代碼的實現(xiàn)與分析這里僅做簡要的介紹,詳細(xì)地代碼見附錄2。可是我們要如何確定是否錄音成功呢,方法很簡單只要看一下SD卡內(nèi)是否有最新出現(xiàn)的音頻文件即可,我們按照步驟先點(diǎn)擊“開始”按鈕,過大約1分鐘時間點(diǎn)擊“停止”按鈕。當(dāng)點(diǎn)擊“停止”按鈕時,停止錄音(stop),然后釋放MediaRecorder對象(release),完成錄音。等到Android支持外接攝像頭時會有新的方式。在最新的Android ,通過MediaRecorder類的相關(guān)方法可以錄制視頻保存成為MPEG()方法來設(shè)置音頻資源;這將會很可。錄制一個Media音頻資源大致上可以分為7個步驟:1;,像TITLE,TIMESTAMP,最重要的是MIME_TYPE。現(xiàn)在我們要實現(xiàn)錄音功能就得使用MediaRecorder類?,F(xiàn)在幾乎每個手機(jī)都有錄音功能,其用途也很廣,比如我們需要記錄某些重要的內(nèi)容時,手頭又沒有筆之類的工具,這時我們就可以通過錄音功能就愛你過通話內(nèi)容錄制下來。 設(shè)計思路概述要實現(xiàn)視頻錄制的功能,首先我們要研究一下怎么實現(xiàn)音頻的錄制。設(shè)置后,可執(zhí)行任何時間長度的錄制,指導(dǎo)用戶停止。Media作為狀態(tài)機(jī)運(yùn)行。 MediaRecorder類的介紹錄制音頻的程序要多次用到MediaRecorder類,故在這里做一下詳細(xì)介紹。除了從文件中播放媒體文件之外,還包含了與網(wǎng)絡(luò)相關(guān)的RTSP流。在移動終端中常常使用多媒體應(yīng)用程序,例如媒體播放器、照相機(jī)、錄像機(jī)、錄音機(jī)等等。(2)PVAuthor:提供媒體流記錄的功能,完成各種音頻、視頻流以及靜態(tài)圖像的捕獲功能。程序員可以通過Open Core方便快速地開發(fā)出想要的多媒體應(yīng)用程序,例如:錄音、播放、回放、視頻會議、流媒體播放等等。Open Core是Android多媒體框架的核心,所有Android平臺的音頻、視頻的采集以及播放等操作都是通過它來實現(xiàn)。第三章 獲取視頻文件的程序設(shè)計 Android多媒體開發(fā)背景介紹Android的核心代碼在去年3月底有了一次比較重大的改動,尤其是多媒體方面的改動比較大,主要目的是為了更好地實現(xiàn)Camcoeder,以及進(jìn)一步實現(xiàn)Video Telephony。在link函數(shù)中還用到了expandH和expandV兩個方法,這兩個方法分別對應(yīng)前面算法中提到的水平掃描延伸和垂直延伸,結(jié)果放到定義的ArryList中。其中用到了linkD方法,這個方法判斷兩個棋子是否能直接相連。不過其實有最后一種情況就夠了,前面兩種情況可以看作最后一種情況的特例。我們的期盼不是很大,這樣遍歷起來也比較快。其中shuffle方法,RefreshHandler定義中也要調(diào)用,在布局無解的情況也需要調(diào)用。這個算法選將棋子按順序排好,再隨即交換來大亂布局。itemClickListener方法中需要調(diào)用link方法,其中l(wèi)ink方法是連連看的核心算法,判斷兩個棋子是否能連,如果能連,將連線起始點(diǎn)和折點(diǎn)放到path變量中。在resume方法中,實例化并初始化了GameView類。Resume是繼續(xù)一個游戲的方法,游戲暫停時計時器停止計時,在resume方法中,實例化并初始化了GameView類。其實開始一個新游戲和恢復(fù)游戲的區(qū)別就在于前者對游戲數(shù)據(jù)進(jìn)行初始化,而后者這些數(shù)據(jù)已經(jīng)有了值。 resume(m)。 help =100。在游戲控制器中提供了startGame方法,用來開始一個新的游戲。還需要更新剩余時間,剩余時間的計算方法remainTime=totalTime((()startTime)/1000);剩余時間的計算方法,得除以1000才是秒計時。對于游戲的倒計時和幫助次數(shù)的更新,這里通過了一個TimerTask來實現(xiàn)。游戲視圖延時刷新后,需要判斷是否已經(jīng)完全消除,即map數(shù)組元素全為0,如果是這樣,則通過將activity狀態(tài)置為STATE_WIN回到菜單。其中sleep方法實現(xiàn)了延時刷新功能。這兩部分刷新我們通過給一個定義好的Handler發(fā)不同的消息實現(xiàn)。一個是為了實現(xiàn)連線消除動畫,對GameView延時刷新;另一部分是更新游戲剩余時間,這部分需要有一個Timer。這個變量在視圖中提到過,是保存連線的起始點(diǎn)及折點(diǎn)。前面視圖中的map數(shù)組只是對這個數(shù)組的一個引用,我們在控制器為它分配空間,生成初始化布局。private int[][]map。private GameView gameView。圖片大小設(shè)置成45private Main app。它的成員變量包括:列數(shù)、行數(shù)和圖片大小。這個監(jiān)聽者是在控制器中實現(xiàn)的,后面將會看到。通過事件,可以得知用戶在屏幕上單擊的點(diǎn)在視圖中的坐標(biāo),通過前面提到的screen2index方法轉(zhuǎn)成了對應(yīng)map數(shù)組的元素。視圖類的onTouchEvent方法里面的ACTION_DOWN事件。 }這個事件監(jiān)聽用來通知監(jiān)聽者用戶單擊了哪個圖片,即map數(shù)組對應(yīng)的什么位置。前面的變量還有一個OnItemClickListener類型的mOnClickListener。后面這次刷新有個延時,以達(dá)到動畫效果,這由控制器來控制,視圖中不予考慮。當(dāng)游戲控制器調(diào)用這個方法后,視圖刷新將連線畫上。畫完連線后,將map數(shù)組中需要消除的兩個位置置0,消空selected表,并將path設(shè)為null,這樣下次刷新的時候就可以把對應(yīng)的兩個圖片消除并且將連線擦去。如果path數(shù)組長度大于等于2,表示需要畫連線,path數(shù)組中的點(diǎn)坐標(biāo)為map數(shù)組的坐標(biāo),需要轉(zhuǎn)換為屏幕坐標(biāo)。然后開始繪制圖片。 }下面看一下GameView的核心部分,是onDraw方法的實現(xiàn)。private Point screen2index(int x,int y){ return new Point((x+offsetX)/iconWidth,(y+offsetY)/iconHeight)。因為邊界不需要這么寬,需要將圖片橫坐標(biāo)向左移的距離為兩者之差。視圖的寬度減去圖片在橫向占的總像素數(shù)為橫向空白的像素數(shù),因為要橫向居中,這個數(shù)值除以2為最左側(cè)圖片的左側(cè)離視圖左側(cè)的距離。 }}這里說明一個橫向偏移值的計算,縱向同理。 if(changed){//offsetX、offsetY具體的計算方法 offsetX=iconWidth(rightleft()*iconWidth)/2。Map數(shù)組是游戲的布局?jǐn)?shù)組,在前面的算法介紹中提到過,是帶邊界的,而邊界如果在界面中與其他位置統(tǒng)一處理會浪費(fèi)很多屏幕空間,因此通過offsetX、offsetY變量來調(diào)整。Path數(shù)組變量為連線的折點(diǎn),有控制其計算好了傳過來,在視圖中畫出連線。每次可以有多個圖片被選中(其實最多應(yīng)該有兩個,邏輯部分在我們的控制器中實現(xiàn),這里不需要管),所以被選中的圖片坐標(biāo)用一個list來存儲。在這里,不需要考慮游戲邏輯,只需要考慮需要哪些數(shù)據(jù),暴露些什么接口。第三部分已經(jīng)進(jìn)行了比較詳細(xì)的介紹。把游戲的視圖和邏輯控制部分區(qū)分開來,這樣寫起來可能覺得比較麻煩,但好處也是顯而易見的:首先這樣程序結(jié)構(gòu)比較清晰;以后擴(kuò)展維護(hù)起來也比較方便,比如,要更改或美化游戲的界面,只需修改視圖部分;需要修改游戲規(guī)則,只需要修改控制器部分,只要保證這兩部分的耦合邏輯不變即可。所以當(dāng)我們點(diǎn)擊再玩一遍時,游戲又重新加載一次圖標(biāo)資源,重新進(jìn)入了初始化布局界面。同時播放music1這一段比較歡快的背景音樂。 (再玩一遍)。activity中的另一段代碼如下:if(state==STATE_WIN){ playmusic(1)。如圖所示:圖2—10 連連看失敗后的界面(重試)。 (重試)。如圖所示:圖2—9 連連看暫停時的界面在activity中,有一段代碼如下,else if(state==STATE_LOSE){ playmusic(2)。 break。 state=STATE_PAUSE。具體的實現(xiàn)方法如下:case 。在游戲中,用戶按下DPAD的中鍵,為幫助功能,幫助用戶消除可以相連的兩個圖片,當(dāng)使用幫助達(dá)到規(guī)定次數(shù)后禁用該功能;本程序為了方便調(diào)試將幫助次數(shù)設(shè)為100次,時間設(shè)為200s。如果圖片與上次選中的圖片可以相連,則畫出連線然后擦去連線和兩個圖片,否則選中該圖片。如果用戶在游戲中按了home鍵退到Home界面或通過其他方式切換到其他activity,要暫停游戲。如果在游戲中用戶按了DPAD中鍵,則調(diào)用游戲控制器的autoErase方法來自動消除兩個能夠相連的圖片;如果用戶按了DPAD左鍵(即幫助鍵),則暫停游戲,返回到菜單。在這里我們還要響應(yīng)按鍵事件,就是當(dāng)玩家點(diǎn)擊其中的一個圖標(biāo)資源的時候,程序要有所反應(yīng)。此時還要播放music0這段音樂來作為游戲的背景音樂。還定義了一個shuffle方法,來對圖標(biāo)進(jìn)行隨機(jī)互換。i++) { icons[i]=((BitmapDrawable)(+i)) .getBitmap()。 for(int i=0。最后根據(jù)程序的狀態(tài) 來調(diào)整界面的顯示。如果程序是第一次啟動,則新建游戲控制器對象并加載圖表資源。在這5種狀態(tài)中,除了STATE_GAME,都有顯示菜單,只不過菜單內(nèi)容有所區(qū)別。將這些變量定義為靜態(tài)變量,只要程序進(jìn)程不退出,每次用戶進(jìn)入程序時都可重復(fù)使用這些變量資源,這樣程序的狀態(tài)可以記錄下來,圖標(biāo)資源也只需要加載一次。我們將游戲控制器對象初始化為null。并將下載到的10中圖片資源存放在drawable文件夾中。private static GameController gameController=null。private static int state=STATE_MENU。public
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1