畢業(yè)設(shè)計(jì)軟件游戲_第1頁(yè)
畢業(yè)設(shè)計(jì)軟件游戲_第2頁(yè)
畢業(yè)設(shè)計(jì)軟件游戲_第3頁(yè)
畢業(yè)設(shè)計(jì)軟件游戲_第4頁(yè)
畢業(yè)設(shè)計(jì)軟件游戲_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

石家莊科技信息職業(yè)學(xué)院畢業(yè)論文題目:基于Android平臺(tái)游戲設(shè)計(jì)——太空保衛(wèi)戰(zhàn)學(xué)號(hào):090124016姓名:宋少偉專業(yè)班級(jí):游戲開發(fā)指導(dǎo)教師:劉永偉完成日期:12月16日太空保衛(wèi)戰(zhàn)摘要:Android是谷歌企業(yè)為首OHA研發(fā)一個(gè)開源智能手機(jī)平臺(tái)。伴隨互聯(lián)網(wǎng)和物聯(lián)網(wǎng)廣泛應(yīng)用,得到了學(xué)術(shù)界和產(chǎn)業(yè)界支持,越來越多創(chuàng)意應(yīng)用到Android應(yīng)用程序中,席卷了整個(gè)手機(jī)產(chǎn)業(yè)。最近伴隨手機(jī)快速發(fā)展,各種各樣手機(jī)游戲?qū)映霾桓F,使得我們能有更多娛樂項(xiàng)目,而射擊類游戲是節(jié)奏比較快,要求玩家經(jīng)過快速反應(yīng)與游戲進(jìn)行交互,從而考驗(yàn)玩家靈敏度以及放松玩家大腦,是玩家身心休閑娛樂太空保衛(wèi)戰(zhàn)便是運(yùn)行在Android上一個(gè)滾屏動(dòng)作類游戲,其中融入了很多動(dòng)作類游戲特有技術(shù),且畫面流暢、聲音震撼。關(guān)鍵詞:Android應(yīng)用程序J2MEPlane類EnemyPlane類Bullet類TooemptyanddefendwarAbstract:Androidis谷歌companyheadedbyOHAresearchanddevelopmentofanopensourceplatformofintelligentmobilephone.WiththeadventoftheInternetandnetworkingapplications,obtainedtheacademicandindustrysupport,moreandmorecreativeapplicationtotheAndroidapplication,sweptthewholeofmobilephoneindustry.Recentlywiththerapiddevelopmentofmobilephone,allkindsofmobilephonegameemergeinanendlessstream,sothatwecanhavemoreentertainmentprojects,whileshootinggameisrelativelyfastpace,forgameplayerthroughrapidresponseandgamestointeract,soastotestthesensitivityofgameplayerandrelaxedgameplayerbrain,mentalandphysicalrecreationisgameplayerSpacewarisrunintheAndroidonascrollingactiongames,whichincorporatesmanyactiongamesuniquetechnology,andsmoothpicture,soundrock.Keywords:AndroidapplicationJ2MEclassPlaneclassEnemyPlaneclassBullet目錄一、引言……………3(一)課題背景……………………3(二)本課題研究意義…………3(三)本課題研究方法………3二、課題相關(guān)基礎(chǔ)…………………4(一)游戲情節(jié)…………………4(二)功效介紹……………………4(三)目標(biāo)平臺(tái)……………………7三、設(shè)計(jì)方案………8(一)游戲架構(gòu)…………………8(二)游戲框架介紹圖…………9(三)游戲界面基本框架及介紹…………………10(四)游戲總流程圖………………11(五)游戲?qū)嶓w相關(guān)類實(shí)現(xiàn)……111、飛機(jī)Plane類實(shí)現(xiàn)…………11.2、敵機(jī)EnemyPlane類實(shí)現(xiàn)……193、子彈Bullet類實(shí)現(xiàn)…………24四、結(jié)論……………27參考文件……………28正文一、引言(一)課題背景Android是谷歌企業(yè)為首OHA研發(fā)一個(gè)開源智能手機(jī)平臺(tái)。伴隨互聯(lián)網(wǎng)和物聯(lián)網(wǎng)廣泛應(yīng)用,得到了學(xué)術(shù)界和產(chǎn)業(yè)界支持,越來越多創(chuàng)意應(yīng)用到Android應(yīng)用程序中,席卷了整個(gè)手機(jī)產(chǎn)業(yè)。伴隨Android游戲普及,Android應(yīng)用需求勢(shì)必會(huì)越來越大。而且Android相對(duì)于其余手機(jī)操作系統(tǒng)具備開放、平等、無(wú)界限、方便以及硬件豐富性等特征。這將是一個(gè)潛力巨大市場(chǎng)會(huì)吸引無(wú)數(shù)軟件開發(fā)商和開發(fā)者投身其中。太空保衛(wèi)戰(zhàn)便是運(yùn)行在Android上一個(gè)滾屏動(dòng)作類游戲,其中融入了很多動(dòng)作類游戲特有技術(shù),且畫面流暢、聲音震撼。(二)本課題研究意義最近伴隨手機(jī)快速發(fā)展,各種各樣手機(jī)游戲?qū)映霾桓F,使得我們能有更多娛樂項(xiàng)目,而射擊類游戲是節(jié)奏比較快,要求玩家經(jīng)過快速反應(yīng)與游戲進(jìn)行交互,從而考驗(yàn)玩家靈敏度以及放松玩家大腦,是玩家身心休閑娛樂。當(dāng)今市面上流行手機(jī)游戲類型繁多,不一樣類型游戲自然有其獨(dú)特設(shè)計(jì)方式以及獨(dú)到吸引玩家地方,射擊類游戲(ShootingGame)是一個(gè)比較古老游戲類型手機(jī)游戲中射擊游戲也很流行,現(xiàn)在市面上射擊類游戲最多是飛行射擊游戲。太空保衛(wèi)戰(zhàn)就是屬于飛行射擊類游戲,是滾屏動(dòng)作類游戲一個(gè)。而滾屏動(dòng)作類游戲是最傳統(tǒng)游戲類型之一,早期動(dòng)作游戲畫面通常比較簡(jiǎn)單,沒有復(fù)雜游戲特效,主要是經(jīng)過熟練操作技巧來進(jìn)行游戲,通常是為了通關(guān)。而現(xiàn)在動(dòng)作類游戲則融入了很多新元素,很多經(jīng)典關(guān)卡以及很多畫面特效,使其逐步成為全部游戲類型里面款式最多,發(fā)展最快一個(gè)。(三)本課題研究方法相對(duì)于其余相同類型游戲進(jìn)行,提取其精華技術(shù),而且融入較多新元素。利用平臺(tái)Android2.1、Eclipse開發(fā)軟件,使用Java進(jìn)行語(yǔ)言開發(fā),而且采取2D展現(xiàn)技術(shù),是玩家玩得愈加刺激震撼。而且游戲添加上成績(jī)排行功效,并將玩家最好成績(jī)保留下來,會(huì)大大提升游戲可玩性。二、課題相關(guān)基礎(chǔ)(一)游戲情節(jié):本游戲是一款滾屏動(dòng)作游戲,沒有過多情景設(shè)計(jì)。所以主要工作是主戰(zhàn)飛機(jī)生命設(shè)計(jì)(血值或生命值)、道具設(shè)計(jì)(換槍道具及補(bǔ)血道具)、關(guān)卡設(shè)計(jì)等。此游戲還融入了很多動(dòng)作類游戲特有技術(shù),使得畫面流暢、聲音震撼。游戲操作簡(jiǎn)單,易于上手,且火爆游戲場(chǎng)面,快速、激烈、擔(dān)心游戲節(jié)奏會(huì)使玩家產(chǎn)生濃厚興趣。(二)功效介紹太空保衛(wèi)戰(zhàn)游戲主要包含歡迎界面、幫助界面以及游戲界面。下面對(duì)該游戲部分界面及運(yùn)行效果進(jìn)行簡(jiǎn)單介紹:1、運(yùn)行該游戲,經(jīng)過Ctrl+F12組合鍵將模擬器調(diào)成橫屏,進(jìn)入加載界面。圖1游戲加載界面2、之后將進(jìn)入歡迎動(dòng)畫界面。圖2游戲歡迎動(dòng)畫1圖3游戲歡迎動(dòng)畫2圖3游戲歡迎界面33、歡迎動(dòng)畫播放完成將進(jìn)入選擇界面,菜單界面包含“開始游戲”、“幫助”、“關(guān)閉聲音”及“退出”按鈕。圖4選擇界面4、單擊“幫助”按鈕將進(jìn)入“幫助”界面。圖5幫助界面5、單擊’開始游戲“按鈕將進(jìn)入游戲界面,在游戲界面中,玩家可經(jīng)過上下左右鍵控制飛機(jī)移動(dòng),然后A鍵發(fā)射子彈打擊敵人。圖6游戲界面8、假如玩家飛機(jī)堅(jiān)持足夠時(shí)間沒有爆炸話,將看到關(guān)底。7、當(dāng)順利過關(guān)時(shí),會(huì)出現(xiàn)恭喜過關(guān)界面;當(dāng)游戲失敗時(shí),則會(huì)出現(xiàn)失敗界面。圖7游戲失敗界面(三)目標(biāo)平臺(tái):目標(biāo)平臺(tái)為Android2.1。開發(fā)語(yǔ)言:Java開發(fā)軟件:Eclipse三、設(shè)計(jì)方案(一)游戲架構(gòu)該項(xiàng)目中類分成了4部分進(jìn)行介紹1共有類Activitv實(shí)現(xiàn)類PlaneActivity:該類是經(jīng)過擴(kuò)展基類Activity實(shí)現(xiàn),是整個(gè)游戲程序入口。鍵盤監(jiān)聽線程KeyThread:該類為手機(jī)鍵盤監(jiān)聽線程,沒隔一段時(shí)間讀取一次鍵盤狀態(tài)值,并依照當(dāng)前鍵盤狀態(tài)做出對(duì)應(yīng)操作。常量類ConstantUtil:將游戲中用到全部常量全部封裝到該類中,便于管理與維護(hù)。2輔助界面相關(guān)類歡迎界面WelcomeView:該類為游戲歡迎界面實(shí)現(xiàn)類,主要負(fù)責(zé)歡迎界面繪制工作。歡迎界面動(dòng)畫實(shí)現(xiàn)類WelcomeViewThread:該類是為WelcomeView服務(wù)線程類,主要負(fù)責(zé)歡迎界面中動(dòng)畫生成。幫助界面HelpView:該類非常簡(jiǎn)單,主要負(fù)責(zé)繪制幫助界面相關(guān)圖片。加載界面ProcessView:為了使游戲愈加人性化,給玩家愈加好體驗(yàn),在長(zhǎng)時(shí)間加載一些資源時(shí),需要給出加載界面以提醒玩家后臺(tái)加載進(jìn)度。勝利界面WinView:該類為玩家順利谷關(guān)后恭喜過關(guān)界面。失敗界面FailView:該類為主戰(zhàn)飛機(jī)死亡后顯示失敗界面,在該界面中玩家能夠選著重新游戲或退住游戲。3游戲界面相關(guān)類游戲主界面類GameView:該類為游戲菜單界面實(shí)現(xiàn)類,負(fù)責(zé)界面繪制工作。背景滾動(dòng)線程類GameViewBackGroundThread:該類主要負(fù)責(zé)背景滾動(dòng)、敵機(jī)以及各種道具出現(xiàn)。地圖信息類Maps:該類包含著地圖相關(guān)信息,比如敵機(jī)全部移動(dòng)路線、各個(gè)關(guān)卡中補(bǔ)血道具、換槍道具等。物體移動(dòng)線程類MoveThread:該線程負(fù)責(zé)除了我方主站飛機(jī)外全部可移動(dòng)物移動(dòng)4情景相關(guān)類主戰(zhàn)飛機(jī)Plane:該類為主戰(zhàn)飛機(jī)封裝類,可有玩家控制其芳香以及移動(dòng)狀態(tài)。敵機(jī)EnenyPlane:該類為敵機(jī)封裝類。子彈類Bullet:子彈封裝類,游戲中全部子彈都為該類對(duì)象。爆炸效果類Explode:該類為爆炸效果渲染類,負(fù)責(zé)在指定位置繪制爆炸效果。爆炸換幀線程ExplodeThread:該類是為爆炸效果服務(wù)。當(dāng)爆炸存在時(shí),定時(shí)為每個(gè)爆炸效果換幀。補(bǔ)血道具類life:該類是補(bǔ)血道具類,當(dāng)主戰(zhàn)飛機(jī)與該類對(duì)象碰撞時(shí),會(huì)為主站飛機(jī)增加一格血。換槍道具類ChangeBullet:該類為換槍道具類,當(dāng)主戰(zhàn)飛機(jī)與該類對(duì)象碰撞時(shí),會(huì)增加主戰(zhàn)飛機(jī)所攜帶武器。(二)游戲框架介紹圖圖1太空保衛(wèi)戰(zhàn)游戲類框架圖1、開啟游戲,在PlaneActivity中會(huì)先進(jìn)入家在界面ProcessView,然后后臺(tái)加載歡迎界面WelcomeView,當(dāng)加載完成后將屏幕切換到歡迎界面,并開啟WelcomeViewThread線程生成歡迎界面動(dòng)畫效果。2、當(dāng)歡迎動(dòng)畫播放完成后屏幕會(huì)停留在選擇狀態(tài)等候玩家操作。3、當(dāng)玩家點(diǎn)擊“幫助”按鈕時(shí),將初始化幫助界面HelpView并將其顯示出來。4、當(dāng)玩家單擊“開始游戲”按鈕時(shí),屏幕將顯示加載界面。后臺(tái)將初始化游戲界面GameView,在地圖信息類Maps中初始化此關(guān)卡中全部敵機(jī)、變槍道具、補(bǔ)血道具等。5、初始化游戲界面同時(shí)開啟GameViewBackGroundThread線程,以滾動(dòng)游戲界面背景圖片。6、當(dāng)玩家發(fā)射炮彈或敵機(jī)發(fā)射炮彈時(shí)會(huì)創(chuàng)建炮彈類Bullet對(duì)象,并將其添加到已知容器中。7、當(dāng)游戲過程中假如需要顯示爆炸效果,會(huì)創(chuàng)建爆炸效果類Explode以及ExplodeThread類來渲染爆炸效果。8、游戲中全部類中使用常量全部封裝到常量類ConstantUtil類中。(三)游戲界面基本框架及介紹圖2游戲界面基本框架1、GameView在初始化時(shí)會(huì)從Maps讀取當(dāng)前關(guān)卡地圖信息,包含敵機(jī)、補(bǔ)血道具、換槍道具等。2、在界面初始化同時(shí),還需要開啟MoveThread線程、GameViewBackGroundThread線程、KeyThread線程及ExplodeThread線程。3、GameView會(huì)在適當(dāng)時(shí)候從Plane類讀取主戰(zhàn)飛機(jī)信息進(jìn)行繪制。4、當(dāng)主戰(zhàn)飛機(jī)發(fā)射子彈時(shí),會(huì)創(chuàng)建Buller對(duì)象并添加到指定容器中,此時(shí)MoveThread一樣需要定時(shí)改變子彈對(duì)象位置。5、在以上過程中,全部需要PlaneActivity管理與ConstantUtil參加。(四)游戲總流程圖(五)游戲?qū)嶓w相關(guān)類實(shí)現(xiàn)1、飛機(jī)Plane類實(shí)現(xiàn),其代碼以下:packagewyf.ytl;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.os.Message;publicclassPlane{ privateintx;//飛機(jī)坐標(biāo) privateinty; intlife;//生命 privateintdir;//飛機(jī)方向,0靜止,1上,2右上,3右,4右下,5下,6左下,7左,8左上 privateinttype;//飛機(jī)類型 Bitmapbitmap1;//當(dāng)前向下飛機(jī)圖片 Bitmapbitmap2;//當(dāng)前向上飛機(jī)圖片 Bitmapbitmap3;//當(dāng)前飛機(jī)圖片 GameViewgameView;//GameView引用 privateintspan=10;//飛機(jī)走一步像素 intbulletType=1; publicPlane(intx,inty,inttype,intdir,intlife,GameViewgameView){ this.gameView=gameView; this.x=x; this.y=y; this.type=type; this.dir=dir; this.life=life; initBitmap(); } publicvoidinitBitmap(){ if(type==1){//當(dāng)類型為1時(shí) bitmap1=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane1); bitmap2=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane2); bitmap3=BitmapFactory.decodeResource(gameView.getResources(),R.drawable.plane3); } } publicvoiddraw(Canvascanvas){ if(dir==ConstantUtil.DIR_UP){//向上 canvas.drawBitmap(bitmap2,x,y,newPaint()); } elseif(dir==ConstantUtil.DIR_DOWN){//向下 canvas.drawBitmap(bitmap1,x,y,newPaint()); } else{//其余情況使用圖片 canvas.drawBitmap(bitmap3,x,y,newPaint()); } } publicvoidfire(){//打子彈方法 if(bulletType==1){ Bulletb=newBullet(this.x+75,this.y+8,1,ConstantUtil.DIR_RIGHT,gameView); gameView.goodBollets.add(b); } elseif(bulletType==2){ Bulletb=newBullet(this.x+75,this.y+4,3,ConstantUtil.DIR_RIGHT,gameView); gameView.goodBollets.add(b); } else{ Bulletb=newBullet(this.x+75,this.y+4,3,ConstantUtil.DIR_RIGHT,gameView); gameView.goodBollets.add(b); Bulletb2=newBullet(this.x+55,this.y-4,4,ConstantUtil.DIR_RIGHT_UP,gameView); gameView.goodBollets.add(b2); Bulletb3=newBullet(this.x+55,this.y+12,5,ConstantUtil.DIR_RIGHT_DOWN,gameView); gameView.goodBollets.add(b3); } if(gameView.activity.isSound){ gameView.playSound(1,0);//播放音樂 } } publicbooleancontain(Bulletb){ if(isContain(b.x,b.y,b.bitmap.getWidth(),b.bitmap.getHeight())){//檢測(cè)成功 this.life--;//自己生命減1 if(this.life<0){//當(dāng)生命小于0時(shí) gameView.status=2; if(gameView.mMediaPlayer.isPlaying()){ gameView.mMediaPlayer.stop(); } if(gameView.activity.isSound){ gameView.playSound(3,0); } Messagemsg1=gameView.activity.myHandler.obtainMessage(1); gameView.activity.myHandler.sendMessage(msg1);//向主activity發(fā)送Handler消息 } returntrue; } returnfalse; } publicbooleancontain(ChangeBulletcb){ if(isContain(cb.x,cb.y,cb.bitmap.getWidth(),cb.bitmap.getHeight())){//檢測(cè)成功 this.bulletType+=1; returntrue; } returnfalse; } publicbooleancontain(EnemyPlaneep){ if(isContain(ep.x,ep.y,ep.bitmap.getWidth(),ep.bitmap.getHeight())){//檢測(cè)成功 this.life--;//自己生命減1 if(this.life<0){//當(dāng)生命小于0時(shí) gameView.status=2; if(gameView.mMediaPlayer.isPlaying()){ gameView.mMediaPlayer.stop(); } if(gameView.activity.isSound){ gameView.playSound(3,0); } gameView.activity.myHandler.sendEmptyMessage(1);//向主activity發(fā)送Handler消息 } returntrue; } returnfalse; } publicbooleancontain(Lifel){//檢測(cè)玩家飛機(jī)是否撞血塊 if(isContain(l.x,l.y,l.bitmap.getWidth(),l.bitmap.getHeight())){//檢測(cè)成功 if(this.life<ConstantUtil.life){ this.life++;//生命加一 } returntrue; } returnfalse; } privatebooleanisContain(intotherX,intotherY,intotherWidth,intotherHeight){//判斷兩個(gè)矩形是否碰撞 intxd=0;//大x intyd=0;//大大y intxx=0;//小x intyx=0;//小y intwidth=0; intheight=0; booleanxFlag=true;//玩家飛機(jī)x是否在前 booleanyFlag=true;//玩家飛機(jī)y是否在前 if(this.x>=otherX){ xd=this.x; xx=otherX; xFlag=false; }else{ xd=otherX; xx=this.x; xFlag=true; } if(this.y>=otherY){ yd=this.y; yx=otherY; yFlag=false; }else{ yd=otherY; yx=this.y; yFlag=true; } if(xFlag==true){ width=this.bitmap1.getWidth(); }else{ width=otherWidth; } if(yFlag==true){ height=this.bitmap1.getHeight(); }else{ height=otherHeight; } if(xd>=xx&&xd<=xx+width-1&& yd>=yx&&yd<=yx+height-1){//首先判斷兩個(gè)矩形有否重合 doubleDwidth=width-xd+xx;//重合區(qū)域?qū)挾? doubleDheight=height-yd+yx;//重合區(qū)域高度 if(Dwidth*Dheight/(otherWidth*otherHeight)>=0.20){//重合面積超20%則判定為碰撞 returntrue; } } returnfalse; } publicvoidsetDir(intdir){ this.dir=dir; } publicintgetSpan(){ returnspan; } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; if(this.y<0){ this.y=0; } if(this.y>ConstantUtil.screenHeight){ this.y=ConstantUtil.screenHeight; } }}2、敵機(jī)EnemyPlane類實(shí)現(xiàn),其代碼以下:packagewyf.ytl;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.os.Message;publicclassEnemyPlane{ intx=ConstantUtil.screenWidth;//飛機(jī)坐標(biāo) inty; booleanstatus;//飛機(jī)狀態(tài) longtouchPoint;//觸發(fā)點(diǎn) inttype;//飛機(jī)類型 intlife;//生命 intspanX=10;//飛機(jī)移動(dòng)X像素 intspanY=5;//飛機(jī)移動(dòng)X像素 Bitmapbitmap; intstart;//當(dāng)前出發(fā)點(diǎn) inttarget;//當(dāng)前目標(biāo)點(diǎn) intstep;//當(dāng)前處于當(dāng)前路徑片段中第幾步 int[][]path; publicEnemyPlane(intstart,inttarget,intstep,int[][]path,booleanstatus,longtouchPoint,inttype,intlife){ this.start=start; this.target=target; this.step=step; this.path=path; this.status=status; this.touchPoint=touchPoint; this.type=type; this.life=life; this.x=path[0][start]; this.y=path[1][start]; } publicvoiddraw(Canvascanvas){ canvas.drawBitmap(bitmap,x,y,newPaint()); } publicvoidmove(){ if(step==path[2][start]){//一段路徑走完,到下一段路徑開始 step=0; start=(start+1)%(path[0].length); target=(target+1)%(path[0].length); this.x=path[0][start]; this.y=path[1][start]; }else{//一段路徑?jīng)]有走完,繼續(xù)走 intxSpan=(path[0][target]-path[0][start])/path[2][start]; intySpan=(path[1][target]-path[1][start])/path[2][start]; this.x=this.x+xSpan; this.y=this.y+ySpan; step++; } } publicvoidfire(GameViewgameView){//打子彈方法 if(type==3&&Math.random()<ConstantUtil.BooletSpan2){ Bulletb1=newBullet(x,y,2,ConstantUtil.DIR_LEFT,gameView); Bulletb2=newBullet(x,y,2,ConstantUtil.DIR_LEFT_DOWN,gameView); Bulletb3=newBullet(x,y,2,ConstantUtil.DIR_LEFT_UP,gameView); gameView.badBollets.add(b1); gameView.badBollets.add(b2); gameView.badBollets.add(b3); }elseif(Math.random()<ConstantUtil.BooletSpan){ if(this.type==4){ Bulletb=newBullet(x,y,2,ConstantUtil.DIR_RIGHT,gameView); gameView.badBollets.add(b); }else{ Bulletb=newBullet(x,y,2,ConstantUtil.DIR_LEFT,gameView); gameView.badBollets.add(b); } } } privatebooleanisContain(intotherX,intotherY,intotherWidth,intotherHeight){//判斷兩個(gè)矩形是否碰撞 intxd=0;//大x intyd=0;//大大y intxx=0;//小x intyx=0;//小y intwidth=0; intheight=0; booleanxFlag=true;//玩家飛機(jī)x是否在前 booleanyFlag=true;//玩家飛機(jī)y是否在前 if(this.x>=otherX){ xd=this.x; xx=otherX; xFlag=false; }else{ xd=otherX; xx=this.x; xFlag=true; } if(this.y>=otherY){ yd=this.y; yx=otherY; yFlag=false; }else{ yd=otherY; yx=this.y; yFlag=true; } if(xFlag==true){ width=this.bitmap.getWidth(); }else{ width=otherWidth; } if(yFlag==true){ height=this.bitmap.getHeight(); }else{ height=otherHeight; } if(xd>=xx&&xd<=xx+width-1&& yd>=yx&&yd<=yx+height-1){//首先判斷兩個(gè)矩形有否重合 doubleDwidth=width-xd+xx;//重合區(qū)域?qū)挾? doubleDheight=height-yd+yx;//重合區(qū)域高度 if(Dwidth*Dheight/(otherWidth*otherHeight)>=0.20){//重合面積超20%則判定為碰撞 returntrue; } } returnfalse; } publicbooleancontain(Bulletb,GameViewgameView){//判斷子彈是否打中敵機(jī) if(isContain(b.x,b.y,b.bitmap.getWidth(),b.bitmap.getHeight())){ this.life--;//自己生命減1 if(this.life<=0){//當(dāng)生命小于0時(shí) if(gameView.activity.isSound){ gameView.playSound(2,0); } this.status=false;//使自己不可見 if(this.type==3){//是關(guān)口時(shí) gameView.status=3;//狀態(tài)換成勝利狀態(tài) if(gameView.mMediaPlayer.isPlaying()){ gameView.mMediaPlayer.stop();//將游戲背景音樂停頓 } Messagemsg1=gameView.activity.myHandler.obtainMessage(5); gameView.activity.myHandler.sendMessage(msg1);//向主activity發(fā)送Handler消息 } } returntrue; } returnfalse; } publicintgetX(){ returnx; } publicvoidsetX(intx){ this.x=x; } publicintgetY(){ returny; } publicvoidsetY(inty){ this.y=y; }}3、子彈Bullet類實(shí)現(xiàn),其代碼以下:packagewyf.ytl;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Paint;/****該類為子彈封裝類*統(tǒng)計(jì)了子彈本身相關(guān)參數(shù)*外界經(jīng)過調(diào)用move方法移動(dòng)子彈**/publicclassBullet{ intx;//子彈坐標(biāo) inty; intdir;//子彈方向,0靜止,1上,2右上,3右,4右下,5下,6左下,7左,8左上 inttype;//子彈類型 Bitmapbitmap;//當(dāng)前子彈圖片 GameViewgameView;//gameView引用 privateintmoveSpan=10;//移動(dòng)像素 publicBullet(intx,inty,inttype,intdir,GameViewgameView){ this.gameView=gameView; this.x=x; this.y=y; this.type=type; this.dir=dir; this.initBitmap(); } publicvoidinitBitmap(){ if(type==1){//當(dāng)類型為1時(shí) bitmap=BitmapFactory.decodeResource(gameView.getResources

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論