版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
大學(xué)課程設(shè)計(jì)飛機(jī)大戰(zhàn)湖北大學(xué)本科課程設(shè)計(jì)題目Java課程設(shè)計(jì)——飛機(jī)大戰(zhàn)姓名學(xué)號(hào)專業(yè)年級(jí)指導(dǎo)教師職稱12月18日----目錄----項(xiàng)目介紹--------------------------------1概要設(shè)計(jì)2.1資源需求------------------------------1 2.2游戲流程------------------------------1類設(shè)計(jì)3.1游戲界面類----------------------------23.2飛行物類------------------------------23.3敵機(jī)類--------------------------------23.4蜜蜂類--------------------------------33.5玩家飛機(jī)類-----------------------------33.6子彈類--------------------------------4編碼分析4.1游戲界面類----------------------------44.2飛行物類------------------------------114.3敵機(jī)類--------------------------------124.4蜜蜂類--------------------------------134.5玩家飛機(jī)類-----------------------------134.6子彈類--------------------------------15游戲測(cè)試畫面-----------------------------16總結(jié)------------------------------------18一.項(xiàng)目介紹針對(duì)Java課程設(shè)計(jì),我做了一個(gè)小游戲——飛機(jī)大戰(zhàn),游戲代碼包含到本學(xué)期所學(xué)全部知識(shí)點(diǎn)。程序運(yùn)行后,進(jìn)入到開始畫面,鼠標(biāo)單擊開始游戲。敵機(jī)自上向下移動(dòng),隨機(jī)出現(xiàn),玩家機(jī)隨鼠標(biāo)移動(dòng)并發(fā)射子彈,消亡敵機(jī)能夠取得分?jǐn)?shù),隨機(jī)出現(xiàn)小蜜蜂,消亡后可取得獎(jiǎng)勵(lì)。二.概要設(shè)計(jì)2.1資源需求此游戲需要導(dǎo)入圖片:背景圖片,開始界面,玩家飛機(jī),敵機(jī),小蜜蜂,子彈,暫停界面,結(jié)束界面。顯示標(biāo)題界面2.2游戲流程顯示標(biāo)題界面單擊鼠標(biāo)游戲主界面游戲主界面暫停界面鼠標(biāo)移出暫停界面單擊鼠標(biāo)游戲結(jié)束玩家死亡游戲結(jié)束三.程序結(jié)構(gòu)游戲界面:ShootGameextendsJPanelstatic塊:導(dǎo)入圖片main():創(chuàng)建窗口重寫paint():畫圖action():鼠標(biāo)事件TimerTask重寫run():游戲運(yùn)行活動(dòng)飛行物類:abstractFlyingObject屬性:x,y坐標(biāo),image,圖片長(zhǎng)寬move():飛行物移動(dòng)outOfbound():飛行物出界shootBy():子彈擊中飛行物敵機(jī)類:AirplaneextendsFlyingObjectIntspeed:移動(dòng)速度重寫move()重寫outOfBound()getScore():擊中敵機(jī)后得分Airplane():初始化敵機(jī)蜜蜂類:BeeextendsFlyingObjectIntxSpeed,ySpeed:移動(dòng)速度 IntawardType:獎(jiǎng)勵(lì)類型(雙倍活力或加命)Bee():初始化蜜蜂重寫move()重寫outOfBound()getType():獲取獎(jiǎng)勵(lì)類型玩家飛機(jī)類:PlayerextendsFlyingObjectIntlife,doubleFire:生命,雙倍火力Player():初始化玩家重寫move():換圖片,形成飛機(jī)動(dòng)態(tài)效果重寫outOfBound()shoot():生成子彈moveTo():玩家機(jī)移動(dòng)isHit():玩家碰撞到飛行物setDoubleFire():設(shè)置雙倍火力addDoubleFire():獎(jiǎng)勵(lì)雙倍火力addLife():獎(jiǎng)勵(lì)生命deleteLife():減命getLife():獲取生命數(shù)子彈類:BulletextendsFlyingObjectIntspeed:移動(dòng)速度Bullet():初始化子彈重寫move()重寫outOfBound()四.編碼分析ShootGame類這類繼承JPanel類構(gòu)建游戲窗口并控制游戲運(yùn)行類組員變量:publicstaticfinalintWIDTH=400;//窗口寬publicstaticfinalintHEIGHT=600;//窗口高//圖片屬性publicstaticBufferedImageairplane;publicstaticBufferedImagebackground;publicstaticBufferedImagebee;publicstaticBufferedImagebullet;publicstaticBufferedImagegameover;publicstaticBufferedImageplayer0;publicstaticBufferedImageplayer1;publicstaticBufferedImagepause;publicstaticBufferedImagestart;publicstaticfinalintDOUBLE_FIRE=0;//雙倍火力屬性為0publicstaticfinalintLIFE=1;//獎(jiǎng)勵(lì)生命屬性為1publicPlayerplayer=newPlayer();//創(chuàng)建玩家對(duì)象privateBullet[]bullets={};//創(chuàng)建子彈對(duì)象(當(dāng)前為空)privateFlyingObject[]flyings={};//創(chuàng)建飛行物對(duì)象(當(dāng)前為空)publicstaticfinalintSTART=0;//狀態(tài):開始為0publicstaticfinalintRUNNING=1;//狀態(tài):運(yùn)行為1publicstaticfinalintPAUSE=2;//狀態(tài):暫停為2publicstaticfinalintGAME_OVER=3;//狀態(tài):游戲結(jié)束為3privateintstate=0;//當(dāng)前狀態(tài)1.static塊靜態(tài)塊,在類加載時(shí)導(dǎo)入游戲所需圖片static{try{airplane=ImageIO.read(ShootGame.class.getResource("airplane.png"));background=ImageIO.read(ShootGame.class.getResource("background.png"));bee=ImageIO.read(ShootGame.class.getResource("bee.png"));bullet=ImageIO.read(ShootGame.class.getResource("bullet.png"));gameover=ImageIO.read(ShootGame.class.getResource("gameover.png"));pause=ImageIO.read(ShootGame.class.getResource("pause.png"));start=ImageIO.read(ShootGame.class.getResource("start.png"));player0=ImageIO.read(ShootGame.class.getResource("player0.png"));player1=ImageIO.read(ShootGame.class.getResource("player1.png"));}catch(Exceptione){e.printStackTrace();}}main()在main方法中創(chuàng)建窗口publicstaticvoidmain(String[]args){JFrameframe=newJFrame("ShootGame");ShootGamegame=newShootGame();frame.add(game);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setLocation(400,100);frame.setAlwaysOnTop(true);frame.setVisible(true);frame.setSize(WIDTH,HEIGHT);game.action();}paint()//畫圖(g是畫筆)publicvoidpaint(Graphicsg){g.drawImage(background,0,0,null);paintPlayer(g);//畫玩家飛機(jī)paintFlyings(g);//畫飛行物paintBullets(g);//畫子彈paintScore(g);//畫分?jǐn)?shù)paintState(g);//畫游戲狀態(tài)}//畫每一個(gè)子彈privatevoidpaintBullets(Graphicsg){for(inti=0;i<bullets.length;i++){Bulletb=bullets[i];g.drawImage(b.image,b.x,b.y,null);}}//畫飛行物(敵機(jī),蜜蜂)privatevoidpaintFlyings(Graphicsg){for(inti=0;i<flyings.length;i++){FlyingObjectflying=flyings[i];g.drawImage(flying.image,flying.x,flying.y,null);}}//畫玩家privatevoidpaintPlayer(Graphicsg){g.drawImage(player.image,player.x,player.y,null);}//畫分?jǐn)?shù)publicvoidpaintScore(Graphicsg){g.setColor(Color.RED);//設(shè)置畫筆顏色為紅g.setFont(newFont(Font.SANS_SERIF,Font.BOLD,20));//設(shè)置字體,加粗,字號(hào)g.drawString("Score:"+score,10,25);g.drawString("Life:"+player.getLife(),10,45);}//畫狀態(tài)publicvoidpaintState(Graphicsg){switch(state){caseSTART:g.drawImage(start,0,0,null);break;casePAUSE:g.drawImage(pause,0,0,null);break;caseGAME_OVER:g.drawImage(gameover,0,0,null);break;}}action() 此方法處理鼠標(biāo)響應(yīng)事件:玩家機(jī)隨鼠標(biāo)移動(dòng),點(diǎn)擊鼠標(biāo)則游戲開始,鼠標(biāo)移出則暫停游戲publicvoidaction(){ MouseAdapterl=newMouseAdapter(){//鼠標(biāo)移動(dòng)事件 publicvoidmouseMoved(MouseEvente){ if(state==RUNNING){ intx=e.getX(); inty=e.getY(); player.moveTo(x,y); } } //鼠標(biāo)點(diǎn)擊事件:假如當(dāng)前狀態(tài)為start則開始游戲,假如當(dāng)前狀態(tài)為游戲結(jié)束則初始化全部對(duì)象,游戲重新開始 publicvoidmouseClicked(MouseEvente){ switch(state){ caseSTART: state=RUNNING; break; caseGAME_OVER: flyings=newFlyingObject[0]; player=newPlayer(); bullets=newBullet[0]; score=0; state=START; } } //鼠標(biāo)移出,在當(dāng)前狀態(tài)為運(yùn)行情況下,改state為暫停 publicvoidmouseExited(MouseEvente){ if(state==RUNNING){ state=PAUSE; } } //鼠標(biāo)移入,在當(dāng)前狀態(tài)為暫停情況下,游戲繼續(xù)運(yùn)行 publicvoidmouseEntered(MouseEvente){ if(state==PAUSE){ state=RUNNING; } } }; this.addMouseListener(l); this.addMouseMotionListener(l);TimerTask.run()//游戲運(yùn)行 privateTimertimer; privateintinterval=10;//時(shí)間間隔,10毫秒intscore=0;//分?jǐn)?shù) timer=newTimer(); //每隔10毫秒運(yùn)行一次run方法 timer.schedule(newTimerTask(){ @Override publicvoidrun(){ if(state==RUNNING){ enterAction();//飛行物入場(chǎng)(敵機(jī)或蜜蜂) stepAction();//飛行物移動(dòng) shootAction();//射擊(子彈入場(chǎng)) bangAction();//碰撞 outOfBoundsAction();//刪除出界對(duì)象 checkGameOverAction();//檢驗(yàn)游戲結(jié)束 } repaint(); } },interval,interval); } //子彈擊中飛行物 publicvoidbangAction(){ for(inti=0;i<bullets.length;i++){ if(bang(bullets[i])){ Bulletb=bullets[i]; bullets[i]=bullets[bullets.length-1]; bullets[bullets.length-1]=b; bullets=Arrays.copyOf(bullets,bullets.length-1); } } } //判斷每一個(gè)子彈和飛行物是否碰撞 publicbooleanbang(Bulletb){ intindex=-1;//被擊中飛行物下標(biāo) for(inti=0;i<flyings.length;i++){ FlyingObjectobj=flyings[i]; if(obj.shootBy(b)){ index=i; break; } } if(index!=-1){ FlyingObjectobj=flyings[index];//判斷被擊中飛行物是什么類型,是敵機(jī)則得分,是蜜蜂則取得獎(jiǎng)勵(lì) if(objinstanceofAirplane){ Airplanea=(Airplane)obj; score+=a.getScore(); } if(objinstanceofBee){ Beebee=(Bee)obj; inttype=bee.getType(); switch(type){ caseDOUBLE_FIRE: player.addDoubleFile();break; caseLIFE: player.addLife();break; } } flyings[index]=flyings[flyings.length-1]; flyings[flyings.length-1]=obj;//將擊中飛行物放到最終,并刪去 flyings=Arrays.copyOf(flyings,flyings.length-1); returntrue; }else{ returnfalse; } }//刪除出界飛行物 publicvoidoutOfBoundsAction(){ FlyingObject[]flyingAlive=newFlyingObject[flyings.length]; intindex=0;//新數(shù)組下標(biāo)//將未出界飛行物放入新數(shù)組 for(inti=0;i<flyings.length;i++){ if(!flyings[i].outOfBound()){ flyingAlive[index]=flyings[i]; index++; } } flyings=Arrays.copyOf(flyingAlive,index);//縮小數(shù)組,將出界飛機(jī)刪除 index=0; Bullet[]bulletAlive=newBullet[bullets.length];//將未出界子彈放入新數(shù)組 for(inti=0;i<bullets.length;i++){ if(!bullets[i].outOfBound()){ bulletAlive[index]=bullets[i]; index++; } } bullets=Arrays.copyOf(bulletAlive,index);//縮小數(shù)組,將出界子彈刪除 }//檢驗(yàn)游戲是否結(jié)束 publicvoidcheckGameOverAction(){ if(isGameOver()){ state=GAME_OVER; }//判斷游戲結(jié)束 publicbooleanisGameOver(){ for(inti=0;i<flyings.length;i++){ intindex=-1;//被撞飛行物下標(biāo) if(player.isHit(flyings[i])){ player.deleteLife(); player.setDoubleFire(0); index=i; } if(index!=-1){//將被撞飛行物從數(shù)組中刪除 FlyingObjectobj=flyings[index]; flyings[index]=flyings[flyings.length-1]; flyings[flyings.length-1]=obj; flyings=Arrays.copyOf(flyings,flyings.length-1); } } returnplayer.getLife()<=0; } intshootIndex=0;//射擊頻率//玩家發(fā)射子彈(生成子彈) publicvoidshootAction(){ shootIndex++;//300毫秒新建一組子彈 if(shootIndex%30==0){ Bullet[]bs=player.shoot();//將新建子彈加入到子彈數(shù)組中 bullets=Arrays.copyOf(bullets,bs.length+bullets.length); System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length); } }//子彈,玩家,飛行物走步 publicvoidstepAction(){ for(inti=0;i<flyings.length;i++){ flyings[i].move(); } for(inti=0;i<bullets.length;i++){ bullets[i].move(); } player.move(); } intflyEnteredIndex=0;//飛行物入場(chǎng)計(jì)數(shù)//飛行物入場(chǎng)(新建對(duì)象) publicvoidenterAction(){ flyEnteredIndex++;//400毫秒新建一個(gè)飛行物(敵機(jī)或蜜蜂) if(flyEnteredIndex%40==0){ FlyingObjectobj=nextOne(); flyings=Arrays.copyOf(flyings,flyings.length+1);//擴(kuò)容 flyings[flyings.length-1]=obj; } } //工廠方法:生成對(duì)象 publicstaticFlyingObjectnextOne(){ Randomrand=newRandom(); inttype=rand.nextInt(20); //生成蜜蜂概率為5% if(type==0){ returnnewBee(); }else{ returnnewAirplane(); } }FlyingObject類組員變量:protectedintx;//x坐標(biāo)protectedinty;//y坐標(biāo)protectedintwidth;//圖片寬protectedintheight;//圖片長(zhǎng)protectedBufferedImageimage;//圖片publicabstractvoidmove();//抽象方法:飛行物移動(dòng)publicabstractbooleanoutOfBound();//抽象方法:判斷是否出界//飛行物是否被子彈擊中publicbooleanshootBy(Bulletb){ intx=b.x; inty=b.y; returnx>this.x&&x<this.x+width&&y>this.y&&y<this.y+height;}Airplane類組員變量:privateintspeed=2;//敵機(jī)移動(dòng)速度 publicAirplane(){ x=(int)(Math.random()*ShootGame.WIDTH);//隨機(jī)生成敵機(jī)x坐標(biāo) y=-height; image=ShootGame.airplane; width=image.getWidth(); height=image.getHeight(); } //敵機(jī)移動(dòng)方法(每次向下移動(dòng)一個(gè)單位) publicvoidmove(){ //TODOAuto-generatedmethodstub y+=speed; } //一個(gè)敵機(jī)分?jǐn)?shù)為5 publicintgetScore(){ return5; } //判斷敵機(jī)是否出界 publicbooleanoutOfBound(){ returnthis.y>ShootGame.HEIGHT; }Bee類組員變量:privateintxSpeed=1;//蜜蜂在x軸方向移動(dòng)速度privateintySpeed=2;//蜜蜂在y軸方向移動(dòng)速度privateintawardType;//獎(jiǎng)勵(lì)類型 publicBee(){ image=ShootGame.bee; x=(int)(Math.random()*ShootGame.WIDTH); y=-height; width=image.getWidth(); height=image.getHeight(); awardType=(int)(Math.random()*2);//0或1 } //取得獎(jiǎng)勵(lì)類型 publicintgetType(){ returnawardType; } //蜜蜂移動(dòng)方法 publicvoidmove(){ y+=ySpeed; x+=xSpeed; if(x>ShootGame.WIDTH-width){ xSpeed=-1; }elseif(x<0){ xSpeed=1; } } //判斷蜜蜂是否出界 publicbooleanoutOfBound(){ returnthis.y>ShootGame.HEIGHT; }Player類組員變量: privateBufferedImage[]images;//圖片數(shù)組 privateintindex;//換圖片計(jì)數(shù) privateintlife;//玩家生命 privateintdoubleFile;//雙倍火力 publicPlayer(){ x=150; y=300; image=ShootGame.player0; width=image.getWidth(); height=image.getHeight(); images=newBufferedImage[]{ShootGame.player0,ShootGame.player1}; life=3; doubleFile=0; index=0; } //生成子彈 publicBullet[]shoot(){ if(doubleFile>0){ Bullet[]bs=newBullet[2]; bs[0]=newBullet(this.x+this.width/4,this.y-20); bs[1]=newBullet(this.x+3*this.width/4,this.y-20); returnbs; }else{ Bullet[]bs=newBullet[1]; bs[0]=newBullet(this.x+width/2,this.y); returnbs; } }//將玩家機(jī)移動(dòng)到鼠標(biāo)位置 publicvoidmoveTo(intx,inty){ this.x=x-this.width/2; this.y=y-this.height/2; } //獎(jiǎng)勵(lì)雙倍活力 publicvoidaddDoubleFile(){ doubleFile+=40; }//設(shè)置雙倍火力值 publicvoidsetDoubleFire(inta){ doubleFile=a; }//取得生命數(shù)值 publicintgetLife(){ returnlife; }//減命 publicvoiddeleteLife(){ life--; }//獎(jiǎng)勵(lì)生命 publicvoidaddLife(){ life++; }//重寫move方法實(shí)現(xiàn)玩家飛機(jī)動(dòng)態(tài)效果 publicvoidmove(){ index++; switch((index/10)%2){ case0:image=images[0];break; case1:image=images[1];break; } }//重寫outOfBound(),玩家飛機(jī)永不出界 publicbooleanoutOfBound(){ returnfalse; }//玩家碰撞到飛行物 publicbooleanisHit(FlyingObjectf){ if(this.x>=f.x&&this.x>=f.x
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)版股權(quán)質(zhì)押權(quán)責(zé)明確協(xié)議樣本一
- 科技驅(qū)動(dòng)未來
- 元宵節(jié)數(shù)字營(yíng)銷解讀
- 2025年度拆除工程噪音污染控制合同4篇
- 2025年度廠房設(shè)備租賃與綠色制造合同范本4篇
- 《中科院化學(xué)課件:不對(duì)稱催化反應(yīng)及其在藥物合成中的應(yīng)用》
- 二零二五年度膩?zhàn)硬牧吓l(fā)與零售合同3篇
- 2025年度廠區(qū)裝卸工勞動(dòng)保障政策宣傳合同4篇
- 2025年度綠色環(huán)保型老舊廠房拆除及重建一體化工程合同4篇
- 2025年度高端醫(yī)療器械研發(fā)與生產(chǎn)合同4篇
- 平面向量及其應(yīng)用試題及答案
- 2024高考復(fù)習(xí)必背英語(yǔ)詞匯3500單詞
- 消防控制室值班服務(wù)人員培訓(xùn)方案
- 《貴州旅游介紹》課件2
- 2024年中職單招(護(hù)理)專業(yè)綜合知識(shí)考試題庫(kù)(含答案)
- 無(wú)人機(jī)應(yīng)用平臺(tái)實(shí)施方案
- 挪用公款還款協(xié)議書范本
- 事業(yè)單位工作人員年度考核登記表(醫(yī)生個(gè)人總結(jié))
- 盾構(gòu)隧道施工數(shù)字化與智能化系統(tǒng)集成
- 【企業(yè)盈利能力探析文獻(xiàn)綜述2400字】
- 2019年醫(yī)養(yǎng)結(jié)合項(xiàng)目商業(yè)計(jì)劃書
評(píng)論
0/150
提交評(píng)論