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

正文內(nèi)容

畢業(yè)論文-基于android平臺(tái)的坦克大戰(zhàn)游戲設(shè)計(jì)(編輯修改稿)

2025-02-12 20:33 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ew的Canvas對(duì)象,再通過(guò)在Canvas上繪制內(nèi)容來(lái)修改SurfaceView中的數(shù)據(jù)。 lockCanvas()函數(shù)不僅是獲取Canvas,同時(shí)還對(duì)獲取的Canvas畫(huà)布進(jìn)行加鎖,這里對(duì)畫(huà)布進(jìn)行同步加鎖的機(jī)制主要是為了防止SurfaceView在繪制過(guò)程中被修改,摧毀等發(fā)生的狀態(tài)改變;與lockCanvas()函數(shù)對(duì)應(yīng)的還有一個(gè)unlockCanvasAndPost( Canvas canvas)函數(shù)用于解鎖畫(huà)布提交。 主角 主角的坦克的動(dòng)作主要有左右移動(dòng)當(dāng)點(diǎn)擊虛擬按鈕時(shí),子彈的發(fā)射,炮筒的180度旋轉(zhuǎn)。 虛擬按鈕的功能實(shí)現(xiàn)主要是在GameVirtualButton類(lèi)中完成和實(shí)現(xiàn)的。首先是按鈕圖片的設(shè)置,把它放置到相應(yīng)的位置,目的是為了使用起來(lái)方便而且看起來(lái)也美觀。虛擬按鈕功能的實(shí)現(xiàn)主要是按鈕是否被按下,并且判斷按下的按鈕是向左移動(dòng)的按鈕還是向右移動(dòng)的按鈕。繪制按鈕函數(shù)drawSelf(Canvas canvas,Paint paint),繪制向左的按鈕有兩種狀態(tài),沒(méi)有點(diǎn)擊時(shí)和被按下時(shí),(onLeftBitmap,x,y,paint),(offLeftBitmap,x,y,paint)兩種狀態(tài)函數(shù)。繪制向右的按鈕的兩種狀態(tài)的方法繪制做按鈕的方法一樣。判斷按鈕上面是否有觸控事件的方法的函數(shù)有isActionOnLeftBtn()(左按鈕),isActionOnRightBtn()(右按鈕),isActionOnBtnArea()(觸控區(qū)域)。左按鈕被按下和抬起的方法switchLeftBtnOn(),switchLeftBtnOff()。右按鈕被按下和抬起的方法switchRightBtnOn()和switchRightBtnOff()。虛擬按鈕被設(shè)置了兩個(gè)速度一個(gè)是慢速度一個(gè)是快速度,當(dāng)屏幕的寬減去坦克底座的長(zhǎng)度大于等于坦克底座的橫坐標(biāo)時(shí),坦克會(huì)以慢的速度移動(dòng),反之則會(huì)以快的速度移動(dòng)。這些都是在DaPao類(lèi)中的drawSelf()函數(shù)中實(shí)現(xiàn)的。還要設(shè)置炮筒的旋轉(zhuǎn)矩陣,這樣便于炮筒的旋轉(zhuǎn)。(paotongBitmap,mz,paint).并且繪制坦克底座canvas,drawBitmap(paotaiBitmap,paotaiX,paotaiY,paint).子彈的發(fā)射是是通過(guò)函數(shù)sentBullet()方法來(lái)實(shí)現(xiàn)的。首先子彈是是一個(gè)小圖片,要圖片的定義和引用,并且還要知道子彈的半徑,炮筒的高度和炮筒的管寬,這樣是為了能夠逼真的顯示炮彈從炮筒里面打出去。首先是坦克位置的初始化,就是坦克底座的位置的初始化。炮筒的180度旋轉(zhuǎn)主要是通過(guò)角度改變來(lái)調(diào)整的。角度的計(jì)算是通過(guò)函數(shù)calcuateAngle(float pressX,float pressY)來(lái)計(jì)算的。但是要判斷點(diǎn)擊點(diǎn)在炮筒的哪一邊。當(dāng)點(diǎn)擊點(diǎn)在炮筒的正上方時(shí),result=(float)();當(dāng)點(diǎn)擊點(diǎn)在炮筒的右邊時(shí),result=(float)(((centerYprseeY)/(pressXcenterX)));當(dāng)點(diǎn)擊點(diǎn)在炮筒的左邊時(shí),result=(float)((((pressXcenterX)/(centerYpressY)))+)。最后返回result來(lái)實(shí)現(xiàn)角度的改變,從而實(shí)現(xiàn)了炮筒的180度的旋轉(zhuǎn)。 子彈 類(lèi)Bullet和類(lèi)Explosin,這兩個(gè)類(lèi)主要實(shí)現(xiàn)了子彈運(yùn)動(dòng),子彈的爆炸,子彈的的消失。這里主要涉及到了一個(gè)算法碰撞。就是子彈與坦克之間的關(guān)系,如果一個(gè)子彈(或者球形)的像素在另外一個(gè)坦克之中,或者在坦克的上面都可以認(rèn)為這兩個(gè)物體發(fā)生了碰撞。碰撞后敵方的坦克就會(huì)消失,顯然爆炸的子彈也會(huì)消失。首先是繪制子彈的方法drawSelf(),并且引用圖片。還使用了子彈的前進(jìn)方法go(),子彈的前進(jìn)方向主要有水平方向和豎直方向。水平方向是通過(guò)水平方向的分速度和時(shí)間相乘得出路徑,但是認(rèn)定水平方向勻速直線運(yùn)動(dòng)。豎直方向是通豎直方向的分速度經(jīng)過(guò)的路徑和自由落體運(yùn)動(dòng)時(shí)所經(jīng)過(guò)的路徑之和,但是認(rèn)定豎直方向做自由落體運(yùn)動(dòng)。在運(yùn)動(dòng)的過(guò)程中判斷是否與Target碰撞即與敵方單位碰撞,如果擊中目標(biāo)目標(biāo)就會(huì)爆炸,()。如果子彈沒(méi)有擊中目標(biāo),就會(huì)判斷子彈是否在屏幕內(nèi),如果不在屏幕內(nèi)子彈就會(huì)消失。判斷是通過(guò)x的坐標(biāo)是否大于屏幕的寬或者是y的坐標(biāo)值是否大于屏幕的高。子彈的消失是通過(guò)函數(shù)disapear(),來(lái)實(shí)現(xiàn)的 。 子彈的爆炸動(dòng)畫(huà)實(shí)現(xiàn),首先定義一個(gè)數(shù)組來(lái)存儲(chǔ)爆炸圖片的過(guò)程bitmaps,并且為爆炸動(dòng)畫(huà)幀設(shè)置索引anmiIndex=0。當(dāng)子彈碰到敵方單位是就會(huì)播放不炸效果圖,如果沒(méi)有播放完畢,就會(huì)爆炸動(dòng)畫(huà)幀就會(huì)自動(dòng)加一,繼續(xù)播放下一幀直到播放完畢為止,播放完畢后,就會(huì)從列表中刪除此爆炸。實(shí)現(xiàn)的方法drawSelf(Canvas canvas,Paint paint)。(Bitmaps[anmiIndex],x,y,paint),然后進(jìn)行動(dòng)畫(huà)的播放。 音樂(lè)和音效 音樂(lè)包括音樂(lè)的開(kāi)關(guān)還有音效的開(kāi)關(guān),音效的開(kāi)關(guān)主要是子彈碰撞到敵方坦克時(shí)爆炸的效果聲音,。首先是音樂(lè)音效按鈕的設(shè)置,定義出關(guān)于按鈕的量和關(guān)于文字的量然后再設(shè)置文字與按鈕之間的間距等,還要對(duì)一些圖片進(jìn)行初始化和引用定義等。(onTextBitmap,texX,textY,paint)來(lái)實(shí)現(xiàn)的,(onTextBitmap,btnX,btnY,paint)來(lái)實(shí)現(xiàn)的,這個(gè)主要是對(duì)開(kāi)按鈕的實(shí)現(xiàn),關(guān)按鈕的實(shí)現(xiàn)和開(kāi)一樣的方法繪制。觸控事件的判斷通過(guò)函數(shù)isActionOnButtonOff()(判斷左按鈕是否有觸控時(shí)間的方法),isActionOnButtonOff()(判斷右按鈕是否有觸控事件的方法)。按鈕是有兩張圖片來(lái)回切換完成的,但是當(dāng)你點(diǎn)擊圖片的左半部分時(shí)是打開(kāi)圖片按鈕,當(dāng)點(diǎn)擊右半部分時(shí)就會(huì)切換到關(guān)按鈕圖片,通過(guò)判斷點(diǎn)擊的是按鈕的哪一邊來(lái)判斷,來(lái)觸發(fā)相應(yīng)的事件,最終完成相應(yīng)的功能。這個(gè)功能的完成主要還有一點(diǎn)就是圖片的引用,安置。把兩個(gè)圖片拼接到一個(gè)圖片上但是又不是一張圖片,這樣玩家使用起來(lái)才能比較真實(shí),比較的生動(dòng)形象。按鈕被按下時(shí),還用到的函數(shù)switchOn()和switchOff()的返回值。音效功能的實(shí)現(xiàn)是通過(guò)類(lèi)SoundControlSurfaceView來(lái)實(shí)現(xiàn)的,該類(lèi)繼承SurfaceView類(lèi)。首先是引用activity類(lèi)并且線程引用,文字的圖片,主菜單上虛擬按鈕對(duì)象引用,背景圖片等。設(shè)置焦點(diǎn)requestFocus()并且設(shè)置回調(diào)接口getHolder().addCallback(this).onDraw(Canvas canvas)函數(shù)主要實(shí)現(xiàn)背景的繪制和虛擬按鈕的繪制。設(shè)置觸屏監(jiān)聽(tīng)函數(shù)onTouchEvent(MotionEvent event),主要是為了獲取點(diǎn)擊觸屏?xí)r相應(yīng)的坐標(biāo)。并且根據(jù)坐標(biāo)來(lái)判斷點(diǎn)擊在哪一個(gè)按鈕上面,實(shí)在按鈕的哪一部分,就會(huì)調(diào)用相應(yīng)的函數(shù)去實(shí)現(xiàn)相應(yīng)的功能。 onTouchEvent()()函數(shù)并傳回布爾類(lèi)型。()中的super會(huì)有可能并沒(méi)有做任何事,并且回傳false回來(lái)。一旦回傳false回來(lái),后面的event動(dòng)作可能就會(huì)收不到了,所以為了確保后面的event能順利收到,應(yīng)該讓觸屏監(jiān)聽(tīng)函數(shù)的返回值永遠(yuǎn)為true。 敵方坦克 敵方坦克主要的動(dòng)作就是在屏幕上隨機(jī)的出現(xiàn),如果被子彈打中就會(huì)爆炸,如果沒(méi)有被子彈打中,就會(huì)消失慢慢的走出屏幕,并且消失。這些功能的實(shí)現(xiàn)主要是通過(guò)類(lèi)Target類(lèi)和Path類(lèi)。首先定義一些需要引用的圖片,初始化一些需要用到的數(shù)據(jù)。然后是小坦克的隨機(jī)出現(xiàn),小坦克從出現(xiàn)在在屏幕到從屏幕消失。實(shí)現(xiàn)這一功能的函數(shù)drawSelf(),go(),caculateCurrentXYSpan()和explode(). 函數(shù)drawSelf()主要是調(diào)用go()函數(shù),go()函數(shù)又調(diào)用了函數(shù)caculateCurrentXYSpan()來(lái)計(jì)算移動(dòng)目標(biāo)的當(dāng)前步進(jìn)并且判斷目標(biāo)是否出了屏幕,如果出了屏幕,就會(huì)調(diào)用函數(shù)disappear()來(lái)處理目標(biāo)物。而disappear()函數(shù)主要是把出屏的目標(biāo)物消失。caculateCurrentXYSpan()函數(shù)通過(guò)調(diào)用類(lèi)Path,來(lái)計(jì)算出目標(biāo)物的移動(dòng)軌跡。類(lèi)Path主要是三維數(shù)組,每一個(gè)設(shè)置四個(gè)目的地,如果到達(dá)第一個(gè)目的地,繼續(xù)去往下一個(gè)目的地。如果在運(yùn)動(dòng)的過(guò)程中被子彈打中就會(huì)使用到函數(shù)explode(),該函數(shù)主要實(shí)現(xiàn)了如果被擊中就播放目標(biāo)爆炸的聲音,并且從列表中刪除目標(biāo)同時(shí)列表中添加新的爆炸對(duì)象和得分加一分。(2,0)實(shí)現(xiàn)的,(this)實(shí)現(xiàn)的,(new Explosion(gameView,explodeBitmaps,x,y))實(shí)現(xiàn)的,(1)實(shí)現(xiàn)的。 最高分?jǐn)?shù) 這個(gè)主要實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的查詢(xún),數(shù)據(jù)的修改,頁(yè)面的顯示,顯示是用圖片來(lái)顯示分?jǐn)?shù)和時(shí)間的顯示。但是這些都不是我們親自去查的,都在游戲的積分榜中直接顯示的。這里主要是實(shí)現(xiàn)了數(shù)據(jù)的查詢(xún)并且進(jìn)行比較,最高的五個(gè)分?jǐn)?shù)在積分榜首頁(yè)中顯示。并且玩家每次的分?jǐn)?shù)都和所有的分?jǐn)?shù)進(jìn)行比較,如果大于最高分分,則游戲結(jié)束時(shí)會(huì)顯示恭喜您破紀(jì)錄了。如果分?jǐn)?shù)在這五個(gè)分?jǐn)?shù)之中,比最大值要小,則會(huì)在結(jié)束界面中顯示請(qǐng)?jiān)俳釉賲?,但是比最小的要大,則那個(gè)最小的就會(huì)被淘汰,并且要和剩下的分?jǐn)?shù)進(jìn)行比較,然后找到自己所處的位置。這些功能的實(shí)現(xiàn)主要是通過(guò)類(lèi)Score類(lèi)和HighScoreSurfaceView類(lèi),DateUtil類(lèi)中來(lái)實(shí)現(xiàn)的,主要是通過(guò)以下幾個(gè)函數(shù)來(lái)分步完成的繪制函數(shù)onDraw(Canvas canvas),畫(huà)日期圖片的函數(shù)drawDateBitmap(String numberStr,float endX,float endY,Canvas canvas,Paint paint),觸屏函數(shù)實(shí)現(xiàn)方法onTouchEvent(MotionEvent event),創(chuàng)建函數(shù)surfaceCreated(SurfaceHolder holder),圖片初始化的函數(shù)initBitmap(),還有一些線程的創(chuàng)建,線程的啟動(dòng),現(xiàn)成的停止,運(yùn)行run()函數(shù)。 功能的實(shí)現(xiàn)首先是對(duì)一些圖片的初始化,變量的定義,一些內(nèi)部函數(shù)接口的定義等。其次是設(shè)置焦點(diǎn)并設(shè)置可觸控焦點(diǎn)和回調(diào)函數(shù)。繪制函數(shù)主要實(shí)現(xiàn)了繪制背景,繪制文字,繪制得分和時(shí)間,在繪制得分和時(shí)間時(shí),要計(jì)算出得分的位置和時(shí)間的位置,同時(shí)把字符串也繪制出來(lái),顯示在界面上面便于觀看和比較。畫(huà)日期圖片的函數(shù)主要有一個(gè)時(shí)間與時(shí)間的間隔號(hào),使用if…else…函數(shù)判斷哪一個(gè)位置應(yīng)該插入符號(hào)。觸屏監(jiān)聽(tīng)函數(shù)主要實(shí)現(xiàn)的功能是判斷是向前翻頁(yè)還是向后翻頁(yè),如果向前翻頁(yè),并且翻到了首頁(yè),頁(yè)面就會(huì)停止在首頁(yè)不會(huì)在動(dòng)。如果向后翻頁(yè),翻到最后一頁(yè),就會(huì)停止。并且獲取數(shù)據(jù)庫(kù)的數(shù)據(jù),并且顯示在該頁(yè)面上。 游戲結(jié)束 這主要實(shí)現(xiàn)了游戲結(jié)束時(shí),根據(jù)得到的分?jǐn)?shù)不同會(huì)看到不同的結(jié)束界面。當(dāng)破紀(jì)錄時(shí),會(huì)顯示恭喜你破紀(jì)錄了。當(dāng)沒(méi)有破紀(jì)錄時(shí),會(huì)顯示圖片請(qǐng)?jiān)俳釉賲?。這個(gè)功能的實(shí)現(xiàn)主要是由WinSurfaceView類(lèi)和FailSurfaceView類(lèi)來(lái)實(shí)現(xiàn)的。 類(lèi)WinSurfaceView主要的功能就是實(shí)現(xiàn)了游戲結(jié)束并且是破紀(jì)錄的情況下直接加載相應(yīng)的界面,還實(shí)現(xiàn)了此界面顯示5秒后會(huì)自動(dòng)轉(zhuǎn)到主頁(yè)面。首先是初始化圖片和變量,并且獲得圖片的尺寸。然后當(dāng)游戲結(jié)束時(shí),就會(huì)直接加載背景圖片,并且在圖片的相應(yīng)位置顯示恭喜你破紀(jì)錄了字樣。 類(lèi)FailSurfaceView和WinSurfaceView類(lèi)的功能基本上一樣,也是游戲結(jié)束時(shí)顯示的相應(yīng)的界面。 其他一些相關(guān)的線程和類(lèi) 這里就是為了游戲的可玩性做的一些填充性的設(shè)置和功能。主要有背景的設(shè)置,倒計(jì)時(shí)的設(shè)置還有一些效果的設(shè)置例如力度bar的設(shè)置。 Background類(lèi)主要實(shí)現(xiàn)的功能是設(shè)置背景圖片,并且背景圖片設(shè)置為滾動(dòng)的也就是動(dòng)態(tài)過(guò)程。 Timer類(lèi)和DateUtil類(lèi)主要實(shí)現(xiàn)了獲取當(dāng)前系統(tǒng)的時(shí)間,便于分?jǐn)?shù)的存儲(chǔ)知道是什么時(shí)候得的分?jǐn)?shù),還有設(shè)置的是一分鐘內(nèi)打的坦克數(shù)量,這里有一個(gè)時(shí)間倒計(jì)時(shí)器,通過(guò)時(shí)間控制游戲的結(jié)束。 線程GenerateTargetThread類(lèi)主要實(shí)現(xiàn)了隨機(jī)出現(xiàn)坦克的種類(lèi),KeyThread類(lèi)主要實(shí)現(xiàn)的功能是通過(guò)判斷鍵被按下的時(shí)間的長(zhǎng)短,選擇相應(yīng)的速度。 StrengthBar類(lèi)主要實(shí)現(xiàn)根據(jù)力度,會(huì)看到力度條在動(dòng)態(tài)的動(dòng)。Constant類(lèi)主要的功能是定義一些程序中用到的常量,這樣定義的好處是能夠很容易的找到要使用的變量便于調(diào)用。 重要算法的實(shí)現(xiàn) 敵方坦克出現(xiàn)消失路徑算法 敵方坦克都是從屏幕的(橫屏)右側(cè)出現(xiàn),按組出現(xiàn)的即一組看做一個(gè)單位,出現(xiàn)后從走不同的路徑消失在屏幕的不同位置實(shí)現(xiàn)這個(gè)算法主要有兩個(gè)步驟:首先要把路徑的幾個(gè)重要的點(diǎn)的坐標(biāo)寫(xiě)出來(lái),例如 {480,0,40}, {200,300,20}, {0,0,1}, {INFINITY,INFINITY,1}這是三維數(shù)組的一個(gè)元素,這三個(gè)元素代表橫坐標(biāo),縱坐標(biāo),和到下一步坐標(biāo)的時(shí)間,INFINITY代表無(wú)窮遠(yuǎn)處。其次是敵方坦克移動(dòng)路徑的實(shí)現(xiàn)算法,主要代碼如下所示: public void drawSelf(Canvas canvas,Paint paint) { go()。 (bitmap, x, y,paint)。 } public void go() { caculateCurrentXYSpan()。 x+=xspan。 y+=yspan。 if(!()) { ()。 } } public void caculateCurrentXYSpan() { if(x==path[destination][0]amp。amp。y==path[destination][1]) { begin=(begin+1)%。 destination=(destination+1)
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1