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

正文內(nèi)容

基于android的手機(jī)應(yīng)用開(kāi)發(fā)連連看游戲的開(kāi)發(fā)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文-資料下載頁(yè)

2025-06-26 13:21本頁(yè)面
  

【正文】 中,實(shí)例化并初始化了GameView類(lèi)。Pause和resume是對(duì)應(yīng)的,不過(guò)pause方法很簡(jiǎn)單,只需要把timer停掉。在resume方法中,實(shí)例化并初始化了GameView類(lèi)。在這里注冊(cè)了GameView的OnItemClickListener監(jiān)聽(tīng),記錄開(kāi)始時(shí)間,并每隔100ms啟動(dòng)一次前面定義的TimerTask。itemClickListener方法中需要調(diào)用link方法,其中l(wèi)ink方法是連連看的核心算法,判斷兩個(gè)棋子是否能連,如果能連,將連線起始點(diǎn)和折點(diǎn)放到path變量中。generateMap()是生成初始化布局的方法,其中要調(diào)用shuffle方法。這個(gè)算法選將棋子按順序排好,再隨即交換來(lái)大亂布局。循環(huán)變量都是從1到定義的長(zhǎng)度減1,不對(duì)邊界處理。其中shuffle方法,RefreshHandler定義中也要調(diào)用,在布局無(wú)解的情況也需要調(diào)用。die是判斷布局無(wú)解的方法,這里用了遍歷算法,但稍做了點(diǎn)優(yōu)化,減少了一個(gè)循環(huán)次數(shù)。我們的期盼不是很大,這樣遍歷起來(lái)也比較快。這里同樣用到了link方法, link方法同前面算法里所說(shuō)的一樣,這里分了3種情況。不過(guò)其實(shí)有最后一種情況就夠了,前面兩種情況可以看作最后一種情況的特例。在確認(rèn)能夠相連后,把起始點(diǎn)和折點(diǎn)放到path變量中去。其中用到了linkD方法,這個(gè)方法判斷兩個(gè)棋子是否能直接相連。判斷兩個(gè)棋子是否能直連比較簡(jiǎn)單,分為橫連和豎連兩種情況。在link函數(shù)中還用到了expandH和expandV兩個(gè)方法,這兩個(gè)方法分別對(duì)應(yīng)前面算法中提到的水平掃描延伸和垂直延伸,結(jié)果放到定義的ArryList中。需要特別說(shuō)明的是,由于本論文傾向于UI方面的介紹,對(duì)于每一種算法的具體實(shí)現(xiàn)方法,這里不作詳細(xì)說(shuō)明。第三章 獲取視頻文件的程序設(shè)計(jì) Android多媒體開(kāi)發(fā)背景介紹Android的核心代碼在去年3月底有了一次比較重大的改動(dòng),尤其是多媒體方面的改動(dòng)比較大,主要目的是為了更好地實(shí)現(xiàn)Camcoeder,以及進(jìn)一步實(shí)現(xiàn)Video Telephony。這些改動(dòng)也是軟硬件協(xié)調(diào)、結(jié)構(gòu)和性能這種的一個(gè)結(jié)果。Open Core是Android多媒體框架的核心,所有Android平臺(tái)的音頻、視頻的采集以及播放等操作都是通過(guò)它來(lái)實(shí)現(xiàn)。他也被稱(chēng)為PV(Packet Video),Packet Video是一家專(zhuān)門(mén)提供多媒體解決方案的公司。程序員可以通過(guò)Open Core方便快速地開(kāi)發(fā)出想要的多媒體應(yīng)用程序,例如:錄音、播放、回放、視頻會(huì)議、流媒體播放等等。Open Core是一個(gè)多媒體的框架,從宏觀上來(lái)看,它主要包含了兩大方面的內(nèi)容:(1)PVPlayer:提供媒體播放器的功能,完成各種音頻(Audio)、視頻(Video)流的回放(Playerback)功能。(2)PVAuthor:提供媒體流記錄的功能,完成各種音頻、視頻流以及靜態(tài)圖像的捕獲功能。PVPlayer和PVAuthor以SDK的形式提供給開(kāi)發(fā)者,可以在這個(gè)SDK智商構(gòu)建多種應(yīng)用程序和服務(wù)。在移動(dòng)終端中常常使用多媒體應(yīng)用程序,例如媒體播放器、照相機(jī)、錄像機(jī)、錄音機(jī)等等。事實(shí)上,Open Core中包含的內(nèi)容非常多:從播放的角度,PVPlayer輸出的(Source)是文件或者網(wǎng)絡(luò)媒體流,輸出(Sink)到音頻視頻的輸出設(shè)備,其基本功能包含了媒體流控制、文件解析、音頻視頻流的解碼(Decode)等方面的內(nèi)容。除了從文件中播放媒體文件之外,還包含了與網(wǎng)絡(luò)相關(guān)的RTSP流。在媒體流記錄的方面,PVAuthor輸入的是照相機(jī)、麥克風(fēng)等設(shè)備,輸出的是各種文件,包含了流的同步、音頻視頻流的編碼(Encode)以及文件的寫(xiě)入等功能。 MediaRecorder類(lèi)的介紹錄制音頻的程序要多次用到MediaRecorder類(lèi),故在這里做一下詳細(xì)介紹。MediaRecorder類(lèi)用來(lái)進(jìn)行媒體采樣,包括音頻和食品。Media作為狀態(tài)機(jī)運(yùn)行。需要設(shè)置不同的參數(shù),比如原設(shè)備和格式。設(shè)置后,可執(zhí)行任何時(shí)間長(zhǎng)度的錄制,指導(dǎo)用戶(hù)停止。MediaRecorder類(lèi)的工作流程如下:圖3—1 MediaRecorder類(lèi)的工作流程圖MediaRecorder在底層同樣是通過(guò)Open Core來(lái)實(shí)現(xiàn)的,但是要開(kāi)發(fā)應(yīng)用時(shí)需要使用Android為我們提供的Java接口。 設(shè)計(jì)思路概述要實(shí)現(xiàn)視頻錄制的功能,首先我們要研究一下怎么實(shí)現(xiàn)音頻的錄制。所以這個(gè)程序我也是分兩部分完成的,先實(shí)現(xiàn)了音頻的錄制,然后再實(shí)現(xiàn)視頻的錄制。現(xiàn)在幾乎每個(gè)手機(jī)都有錄音功能,其用途也很廣,比如我們需要記錄某些重要的內(nèi)容時(shí),手頭又沒(méi)有筆之類(lèi)的工具,這時(shí)我們就可以通過(guò)錄音功能就愛(ài)你過(guò)通話內(nèi)容錄制下來(lái)。而且我們通??梢詫⒆约旱匿浺粼O(shè)置為個(gè)性鈴聲等?,F(xiàn)在我們要實(shí)現(xiàn)錄音功能就得使用MediaRecorder類(lèi)。這里將實(shí)現(xiàn)一個(gè)擁有簡(jiǎn)易音頻錄制功能的程序。錄制一個(gè)Media音頻資源大致上可以分為7個(gè)步驟:1;像TITLE,TIMESTAMP,最重要的是MIME_TYPE。創(chuàng)建一個(gè)要放置的文件的路徑,Resolver在內(nèi)容數(shù)據(jù)庫(kù)中來(lái)創(chuàng)建一個(gè)入口,并且自動(dòng)地標(biāo)志一個(gè)取得這個(gè)文件的路徑。()方法來(lái)設(shè)置音頻資源;這將會(huì)很可。()方法設(shè)置輸出文件格式;()方法來(lái)設(shè)置音頻編碼;最后,prepare()和start()所錄制的音頻,stop()和release()在要結(jié)束的時(shí)候調(diào)用。在最新的Android ,通過(guò)MediaRecorder類(lèi)的相關(guān)方法可以錄制視頻保存成為MPEG、提供了setPreviewDisplay(Surface sv) 這個(gè)錄制預(yù)覽窗口,但需要注意的是執(zhí)行前需要prepare下,其中setVideoFrameRate(int rate)可以設(shè)置幀率 ,而setVideoSize(int width, int height)設(shè)置視頻的分辨率,最后setVideoSource(int video_source)是設(shè)置視頻源,目前只能為Camera。等到Android支持外接攝像頭時(shí)會(huì)有新的方式。 程序UI部分介紹我們先來(lái)看一下音頻錄制程序的UI界面,程序成功運(yùn)行后的生成界面如下:圖3—2 運(yùn)行后的界面當(dāng)點(diǎn)擊“開(kāi)始”按鈕后就建立MediaRecorder對(duì)象,并且設(shè)置聲音的來(lái)源(setAudioSource)、輸出文件的格式(setOutputFormat)、音頻文件的編碼(setAudioEncoder)、輸出文件的路徑(setOutputFile)等;然后準(zhǔn)備開(kāi)始錄音(prepare),開(kāi)始錄音(start)。當(dāng)點(diǎn)擊“停止”按鈕時(shí),停止錄音(stop),然后釋放MediaRecorder對(duì)象(release),完成錄音。錄好的音頻存放在SD卡中。可是我們要如何確定是否錄音成功呢,方法很簡(jiǎn)單只要看一下SD卡內(nèi)是否有最新出現(xiàn)的音頻文件即可,我們按照步驟先點(diǎn)擊“開(kāi)始”按鈕,過(guò)大約1分鐘時(shí)間點(diǎn)擊“停止”按鈕。調(diào)出SD卡界面,打開(kāi)SD卡文件夾,查看里面的內(nèi)容,如圖:圖3—3 運(yùn)行后SD卡界面可以清楚地看到圖片上紅色鉛筆圈上的部分就是新錄制的音頻文件,右側(cè)還有顯示文件類(lèi)型為amr,文件大小、文件生成日期和時(shí)間。由于模擬器上沒(méi)有sd卡,所以視頻錄制的部分并不能在模擬器上演示,只能在真機(jī)上進(jìn)行調(diào)試,測(cè)試結(jié)果也是成功的,如圖所示: 代碼的實(shí)現(xiàn)與分析這里僅做簡(jiǎn)要的介紹,詳細(xì)地代碼見(jiàn)附錄2。private Button StartButton。 private Button StopButton。設(shè)置了兩個(gè)按鈕,一個(gè)是“開(kāi)始”鍵,一個(gè)是“停止”鍵。if(().equals(A_MOUNTED))這個(gè)條件語(yǔ)句用來(lái)檢測(cè)是否存在SD卡,如果不存在,屏幕就會(huì)提示“沒(méi)有SD卡”,mRecAudioFile = (strTempFile,.amr, mRecAudioPath)。這條語(yǔ)句用來(lái)創(chuàng)建錄音文件。mMediaRecorder = new MediaRecorder()。實(shí)例化MediaRecorder;()。設(shè)置麥克風(fēng);()。設(shè)置輸出文件格式;()。設(shè)置音頻文件的編碼;(())。設(shè)置輸出文件的路徑。Android多媒體錄制中的錄像就是Audio+Video,所以還要加點(diǎn)東西,path=/sdcard/。 ()。 ()。 ()。 (176,144)。 (15)。 ()。 ()。 (path)。每行代碼的作用與錄制音頻的代碼相類(lèi)似,這里不作詳細(xì)說(shuō)明。第四章 遇到的問(wèn)題及解決方法本次畢業(yè)設(shè)計(jì)雖然最終畫(huà)上了一個(gè)圓滿(mǎn)的句號(hào),但過(guò)程卻充滿(mǎn)艱辛。接下來(lái)就介紹一下在進(jìn)行畢業(yè)設(shè)計(jì)時(shí)遇到的問(wèn)題,以及解決的方法。這次畢業(yè)設(shè)計(jì)遇到的第一個(gè)問(wèn)題是JDK安裝的問(wèn)題,在我安裝完JDK后,調(diào)出cmd輸入javac并沒(méi)有出現(xiàn)正確的提示,而是沒(méi)什么反應(yīng),于是我卸載后重新安裝,還是遇到同樣的問(wèn)題,更換版本后還是不行,萬(wàn)般無(wú)奈之下我看了一個(gè)有關(guān)JDK安裝的視頻教程,得知安裝之后還要設(shè)置一下環(huán)境變量,具體方法如下:1,配置環(huán)境變量...右鍵“我的電腦”“屬性”“高級(jí)”“環(huán)境變量”選擇“系統(tǒng)變量”里面的“path”,點(diǎn)“編輯” 。2,這時(shí),出現(xiàn)對(duì)話框,變量名是“path”,變量值就是要找到你的JDK所安裝的目錄下的bin文件夾的路徑,注意如果自己的“path”還有其他的值的話,要用“?!眮?lái)區(qū)分(英文分號(hào)),然后點(diǎn)“確定”,編輯完成 。3,還需要配置另一個(gè)環(huán)境變量,也是系統(tǒng)變量里面的,選擇“新建”,然后在變量名里面寫(xiě)入“classpath”,變量值里面寫(xiě)入你的JDK所安裝的目錄下的lib文件夾下的“”和“”,然后點(diǎn)確定,再確定,就完成了JDK的安裝和環(huán)境變量的配置了。JDK成功安裝之后,eclipse的安裝就基本上沒(méi)有遇到問(wèn)題,這樣整個(gè)游戲的開(kāi)發(fā)平臺(tái)就已經(jīng)成功搭建了。在設(shè)計(jì)第一個(gè)游戲界面時(shí),標(biāo)題是“連連看”,兩個(gè)按鈕分別是開(kāi)始游戲和退出。此代碼的Layout顯示如下:圖4—1 可以看到,僅僅是留出了空位,并沒(méi)有文字顯示,這是由于開(kāi)發(fā)平臺(tái)的特點(diǎn),不能顯示中文造成的,并不是程序出現(xiàn)問(wèn)題造成的。同樣道理播放視頻和正式的游戲界面也要先在Layout文件夾中各寫(xiě)一段代碼,這兩段代碼的Layout顯示分別為:圖4—2 圖4—3 并不能因?yàn)槭裁炊紱](méi)顯示,就認(rèn)為這段代碼不起作用,通俗地說(shuō)只是現(xiàn)在這里占個(gè)位,然后再向其中填充應(yīng)有的內(nèi)容。(new GameTimerTask(),0,100)。意思是每隔100ms程序就會(huì)刷新一下游戲的界面,之前設(shè)置的是500ms,這樣每隔500ms才刷新一次界面,那么當(dāng)處在游戲界面時(shí),如果點(diǎn)擊間隔時(shí)間小于500ms的時(shí)候游戲就會(huì)出現(xiàn)問(wèn)題,如下圖所示:圖4—3 在游戲界面時(shí)點(diǎn)擊過(guò)快的報(bào)錯(cuò)界面然后將間隔時(shí)間調(diào)成100ms后,出現(xiàn)這種錯(cuò)誤的幾率明顯降低。還遇見(jiàn)了一個(gè)比較隱蔽的錯(cuò)誤,public static final int iconsCount=10。本來(lái)將圖片種類(lèi)設(shè)置為10種,我想先將5個(gè)圖片放進(jìn)drawable文件夾中試驗(yàn)一下,這樣程序雖不會(huì)報(bào)錯(cuò),但是運(yùn)行結(jié)果卻有問(wèn)題,運(yùn)行時(shí),視頻播放結(jié)束后,就會(huì)直接報(bào)錯(cuò),有時(shí)會(huì)加載出一到兩個(gè)圖標(biāo)后報(bào)錯(cuò),如圖:圖4—4 家在圖標(biāo)的報(bào)錯(cuò)界面后來(lái)仔細(xì)地研究了一下出現(xiàn)問(wèn)題的原因,為什么有時(shí)候能夠出現(xiàn)一兩個(gè)圖標(biāo)呢,原因是程序?qū)τ螒蚪缑娴某跏蓟椒ㄊ菍?duì)10個(gè)圖標(biāo)隨機(jī)地進(jìn)行加載,而這10個(gè)圖標(biāo)編號(hào)為1到10來(lái)進(jìn)行區(qū)分,由于真實(shí)地只放進(jìn)去了5個(gè)圖標(biāo),所以當(dāng)加載到第6個(gè)到第10個(gè)的時(shí)候,由于并沒(méi)有圖標(biāo),所以會(huì)報(bào)錯(cuò),如果很幸運(yùn)前幾個(gè)加載的都是編號(hào)1到5的圖標(biāo),則能成功地加載進(jìn)去,但是由于一共是8*10個(gè)圖標(biāo),肯定有一個(gè)會(huì)是編號(hào)為6到10的,所以生成界面的時(shí)候基本上一定會(huì)出錯(cuò)。把出現(xiàn)問(wèn)題的原因搞清楚了,解決的方法就會(huì)很簡(jiǎn)單,只要如實(shí)地把10個(gè)真實(shí)的圖標(biāo)放在drawable文件夾中,或者把public static final int iconsCount=10。這段代碼中的10改寫(xiě)成5,問(wèn)題就解決了。還遇見(jiàn)了一個(gè)計(jì)算剩余時(shí)間的問(wèn)題,程序中計(jì)算剩余時(shí)間的代碼是這樣實(shí)現(xiàn)的:remainTime=totalTime((()startTime)/1000)。之前寫(xiě)的代碼后面并沒(méi)有除以1000,然后計(jì)算時(shí)間總是不對(duì),()出了問(wèn)題,()是毫秒顯示,于是在后面除以1000得到了正確的結(jié)果。在連連看游戲生成初始化布局這個(gè)過(guò)程上,我遇到了很多問(wèn)題,因?yàn)檫@個(gè)生成布局的算法要考慮的很周全,有許多細(xì)節(jié)問(wèn)題需要考慮進(jìn)去。大體而言有三個(gè)基本原則:(1)地圖中的每一個(gè)數(shù)字的個(gè)數(shù)都是偶數(shù),也即都是成對(duì)的出現(xiàn) 。(2)地圖的排列必須是隨機(jī)排列的。(3)地圖中的每一個(gè)數(shù)字的種類(lèi)不能大于已有的圖案的個(gè)數(shù)。有了這三個(gè)基本原則就能避免一部分錯(cuò)誤,但也不能完全避免,因?yàn)樯傻牟季挚赡軟](méi)有解,我們還要額外定義一個(gè)判斷布局是否有解的函數(shù)die,然后如果布局沒(méi)有解,就要重新布局,也是隨即地交換各個(gè)圖標(biāo)的位置,直到布局有解為止,所以又定義了一個(gè)shuffle函數(shù)來(lái)進(jìn)行重新布局,前面已經(jīng)做過(guò)了介紹,這樣一個(gè)正確的生成初始布局的算法才算完成,在這部分我也是反復(fù)修改了好多次才得以實(shí)現(xiàn)。,繼續(xù)游戲的按鈕要設(shè)置成在開(kāi)始時(shí)不可用,否則當(dāng)我們進(jìn)入游戲時(shí)看到的第一個(gè)界面就會(huì)是圖4—5 重新開(kāi)始的時(shí)候跳出暫停時(shí)界面這顯然是錯(cuò)誤的,和我們的目的不一致,解決方法也很簡(jiǎn)單,只要將“繼續(xù)游戲”按鈕這部分的代碼改為:Button android:layout_height=wrap_contentandroid:layout_width=100dipandroid:id=@+id/resumeandroid:text=繼續(xù)游戲android:layout_ma
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1