<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    用 Java 開發(fā)一個打飛機小游戲(附完整源碼)

    共 2096字,需瀏覽 5分鐘

     ·

    2021-10-08 23:33

    程序員的成長之路
    互聯(lián)網/程序員/技術/資料共享?
    關注


    閱讀本文大概需要 8 分鐘。

    來自:https://blog.csdn.net/wclxyn/article/details/110159708

    上圖
    圖片
    圖片
    寫在前面
    技術源于分享,所以今天抽空把自己之前用java做過的小游戲整理貼出來給大家參考學習。
    java確實不適合寫桌面應用,這里只是通過這個游戲讓大家理解oop面向對象編程的過程,純屬娛樂。代碼寫的很簡單,也很容易理解,并且注釋寫的很清楚了,還有問題,自己私下去補課學習。
    完整代碼
    敵飛機

    import?java.util.Random;


    ?敵飛機:?是飛行物,也是敵人

    public?class?Airplane?extends?FlyingObject?implements?Enemy?{
    ????private?int?speed?=?3;??//移動步驟

    ????/**?初始化數(shù)據(jù)?*/
    ????public?Airplane(){
    ????????this.image?=?ShootGame.airplane;
    ????????width?=?image.getWidth();
    ????????height?=?image.getHeight();
    ????????y?=?-height;??????????
    ????????Random?rand?=?new?Random();
    ????????x?=?rand.nextInt(ShootGame.WIDTH?-?width);
    ????}

    ????/**?獲取分數(shù)?*/
    ????@Override
    ????public?int?getScore()?{??
    ????????return?5;
    ????}

    ????/**?//越界處理?*/
    ????@Override
    ????public?????boolean?outOfBounds()?{???
    ????????return?y>ShootGame.HEIGHT;
    ????}

    ????/**?移動?*/
    ????@Override
    ????public?void?step()?{???
    ????????y?+=?speed;
    ????}
    }

    分數(shù)獎勵

    /**?
    ?*?獎勵?
    ?*/??
    public?interface?Award?{??
    ????int?DOUBLE_FIRE?=?0;??//雙倍火力??
    ????int?LIFE?=?1;???//1條命??
    ????/**?獲得獎勵類型(上面的0或1)?*/??
    ????int?getType();??
    }

    蜜蜂

    import?java.util.Random;??

    /**?蜜蜂?*/??
    public?class?Bee?extends?FlyingObject?implements?Award{??
    ????private?int?xSpeed?=?1;???//x坐標移動速度??
    ????private?int?ySpeed?=?2;???//y坐標移動速度??
    ????private?int?awardType;????//獎勵類型??

    ????/**?初始化數(shù)據(jù)?*/??
    ????public?Bee(){??
    ????????this.image?=?ShootGame.bee;??
    ????????width?=?image.getWidth();??
    ????????height?=?image.getHeight();??
    ????????y?=?-height;??
    ????????Random?rand?=?new?Random();??
    ????????x?=?rand.nextInt(ShootGame.WIDTH?-?width);??
    ????????awardType?=?rand.nextInt(2);???//初始化時給獎勵??
    ????}??

    ????/**?獲得獎勵類型?*/??
    ????public?int?getType(){??
    ????????return?awardType;??
    ????}??

    ????/**?越界處理?*/??
    ????@Override??
    ????public?boolean?outOfBounds()?{??
    ????????return?y>ShootGame.HEIGHT;??
    ????}??

    ????/**?移動,可斜著飛?*/??
    ????@Override??
    ????public?void?step()?{????????
    ????????x?+=?xSpeed;??
    ????????y?+=?ySpeed;??
    ????????if(x?>?ShootGame.WIDTH-width){????
    ????????????xSpeed?=?-1;??
    ????????}??
    ????????if(x?????????????xSpeed?=?1;??
    ????????}??
    ????}??
    }

    子彈類:是飛行物體

    /**?
    ?*?子彈類:是飛行物?
    ?*/??
    public?class?Bullet?extends?FlyingObject?{??
    ????private?int?speed?=?3;??//移動的速度??

    ????/**?初始化數(shù)據(jù)?*/??
    ????public?Bullet(int?x,int?y){??
    ????????this.x?=?x;??
    ????????this.y?=?y;??
    ????????this.image?=?ShootGame.bullet;??
    ????}??

    ????/**?移動?*/??
    ????@Override??
    ????public?void?step(){?????
    ????????y-=speed;??
    ????}??

    ????/**?越界處理?*/??
    ????@Override??
    ????public?boolean?outOfBounds()?{??
    ????????return?y<-height;??
    ????}??

    }

    敵人的分數(shù)

    /**?
    ?*?敵人,可以有分數(shù)?
    ?*/??
    public?interface?Enemy?{??
    ????/**?敵人的分數(shù)??*/??
    ????int?getScore();??
    }

    飛行物(敵機,蜜蜂,子彈,英雄機)

    import?java.awt.image.BufferedImage;??

    /**?
    ?*?飛行物(敵機,蜜蜂,子彈,英雄機)?
    ?*/??
    public?abstract?class?FlyingObject?{??
    ????protected?int?x;????//x坐標??
    ????protected?int?y;????//y坐標??
    ????protected?int?width;????//寬??
    ????protected?int?height;???//高??
    ????protected?BufferedImage?image;???//圖片??

    ????public?int?getX()?{??
    ????????return?x;??
    ????}??

    ????public?void?setX(int?x)?{??
    ????????this.x?=?x;??
    ????}??

    ????public?int?getY()?{??
    ????????return?y;??
    ????}??

    ????public?void?setY(int?y)?{??
    ????????this.y?=?y;??
    ????}??

    ????public?int?getWidth()?{??
    ????????return?width;??
    ????}??

    ????public?void?setWidth(int?width)?{??
    ????????this.width?=?width;??
    ????}??

    ????public?int?getHeight()?{??
    ????????return?height;??
    ????}??

    ????public?void?setHeight(int?height)?{??
    ????????this.height?=?height;??
    ????}??

    ????public?BufferedImage?getImage()?{??
    ????????return?image;??
    ????}??

    ????public?void?setImage(BufferedImage?image)?{??
    ????????this.image?=?image;??
    ????}??

    ????/**?
    ?????*?檢查是否出界?
    ?????*?@return?true?出界與否?
    ?????*/??
    ????public?abstract?boolean?outOfBounds();??

    ????/**?
    ?????*?飛行物移動一步?
    ?????*/??
    ????public?abstract?void?step();??

    ????/**?
    ?????*?檢查當前飛行物體是否被子彈(x,y)擊(shoot)中?
    ?????*?@param?Bullet?子彈對象?
    ?????*?@return?true表示被擊中了?
    ?????*/??
    ????public?boolean?shootBy(Bullet?bullet){??
    ????????int?x?=?bullet.x;??//子彈橫坐標??
    ????????int?y?=?bullet.y;??//子彈縱坐標??
    ????????return?this.x????}??

    }

    英雄機

    import?java.awt.image.BufferedImage;??

    /**?
    ?*?英雄機:是飛行物??
    ?*/??
    public?class?Hero?extends?FlyingObject{??

    ????private?BufferedImage[]?images?=?{};??//英雄機圖片??
    ????private?int?index?=?0;????????????????//英雄機圖片切換索引??

    ????private?int?doubleFire;???//雙倍火力??
    ????private?int?life;???//命??

    ????/**?初始化數(shù)據(jù)?*/??
    ????public?Hero(){??
    ????????life?=?3;???//初始3條命??
    ????????doubleFire?=?0;???//初始火力為0??
    ????????images?=?new?BufferedImage[]{ShootGame.hero0,?ShootGame.hero1};?//英雄機圖片數(shù)組??
    ????????image?=?ShootGame.hero0;???//初始為hero0圖片??
    ????????width?=?image.getWidth();??
    ????????height?=?image.getHeight();??
    ????????x?=?150;??
    ????????y?=?400;??
    ????}??

    ????/**?獲取雙倍火力?*/??
    ????public?int?isDoubleFire()?{??
    ????????return?doubleFire;??
    ????}??

    ????/**?設置雙倍火力?*/??
    ????public?void?setDoubleFire(int?doubleFire)?{??
    ????????this.doubleFire?=?doubleFire;??
    ????}??

    ????/**?增加火力?*/??
    ????public?void?addDoubleFire(){??
    ????????doubleFire?=?40;??
    ????}??

    ????/**?增命?*/??
    ????public?void?addLife(){??//增命??
    ????????life++;??
    ????}??

    ????/**?減命?*/??
    ????public?void?subtractLife(){???//減命??
    ????????life--;??
    ????}??

    ????/**?獲取命?*/??
    ????public?int?getLife(){??
    ????????return?life;??
    ????}??

    ????/**?當前物體移動了一下,相對距離,x,y鼠標位置??*/??
    ????public?void?moveTo(int?x,int?y){?????
    ????????this.x?=?x?-?width/2;??
    ????????this.y?=?y?-?height/2;??
    ????}??

    ????/**?越界處理?*/??
    ????@Override??
    ????public?boolean?outOfBounds()?{??
    ????????return?false;????
    ????}??

    ????/**?發(fā)射子彈?*/??
    ????public?Bullet[]?shoot(){?????
    ????????int?xStep?=?width/4;??????//4半??
    ????????int?yStep?=?20;??//步??
    ????????if(doubleFire>0){??//雙倍火力??
    ????????????Bullet[]?bullets?=?new?Bullet[2];??
    ????????????bullets[0]?=?new?Bullet(x+xStep,y-yStep);??//y-yStep(子彈距飛機的位置)??
    ????????????bullets[1]?=?new?Bullet(x+3*xStep,y-yStep);??
    ????????????return?bullets;??
    ????????}else{??????//單倍火力??
    ????????????Bullet[]?bullets?=?new?Bullet[1];??
    ????????????bullets[0]?=?new?Bullet(x+2*xStep,y-yStep);????
    ????????????return?bullets;??
    ????????}??
    ????}??

    ????/**?移動?*/??
    ????@Override??
    ????public?void?step()?{??
    ????????if(images.length>0){??
    ????????????image?=?images[index++/10%images.length];??//切換圖片hero0,hero1??
    ????????}??
    ????}??

    ????/**?碰撞算法?*/??
    ????public?boolean?hit(FlyingObject?other){??

    ????????int?x1?=?other.x?-?this.width/2;?????????????????//x坐標最小距離??
    ????????int?x2?=?other.x?+?this.width/2?+?other.width;???//x坐標最大距離??
    ????????int?y1?=?other.y?-?this.height/2;????????????????//y坐標最小距離??
    ????????int?y2?=?other.y?+?this.height/2?+?other.height;?//y坐標最大距離??

    ????????int?herox?=?this.x?+?this.width/2;???????????????//英雄機x坐標中心點距離??
    ????????int?heroy?=?this.y?+?this.height/2;??????????????//英雄機y坐標中心點距離??

    ????????return?herox>x1?&&?heroxy1?&&?heroy????}??

    }

    游戲啟動主類

    import?java.awt.Font;??
    import?java.awt.Color;??
    import?java.awt.Graphics;??
    import?java.awt.event.MouseAdapter;??
    import?java.awt.event.MouseEvent;??
    import?java.util.Arrays;??
    import?java.util.Random;??
    import?java.util.Timer;??
    import?java.util.TimerTask;??
    import?java.awt.image.BufferedImage;??

    import?javax.imageio.ImageIO;??
    import?javax.swing.ImageIcon;??
    import?javax.swing.JFrame;??
    import?javax.swing.JPanel;??
    /**
    ?*?
    ?*/
    public?class?ShootGame?extends?JPanel?{??
    ????public?static?final?int?WIDTH?=?400;?//?面板寬??
    ????public?static?final?int?HEIGHT?=?654;?//?面板高??
    ????/**?游戲的當前狀態(tài):?START?RUNNING?PAUSE?GAME_OVER?*/??
    ????private?int?state;??
    ????private?static?final?int?START?=?0;??
    ????private?static?final?int?RUNNING?=?1;??
    ????private?static?final?int?PAUSE?=?2;??
    ????private?static?final?int?GAME_OVER?=?3;??

    ????private?int?score?=?0;?//?得分??
    ????private?Timer?timer;?//?定時器??
    ????private?int?intervel?=?1000?/?100;?//?時間間隔(毫秒)??

    ????public?static?BufferedImage?background;??
    ????public?static?BufferedImage?start;??
    ????public?static?BufferedImage?airplane;??
    ????public?static?BufferedImage?bee;??
    ????public?static?BufferedImage?bullet;??
    ????public?static?BufferedImage?hero0;??
    ????public?static?BufferedImage?hero1;??
    ????public?static?BufferedImage?pause;??
    ????public?static?BufferedImage?gameover;??

    ????private?FlyingObject[]?flyings?=?{};?//?敵機數(shù)組??
    ????private?Bullet[]?bullets?=?{};?//?子彈數(shù)組??
    ????private?Hero?hero?=?new?Hero();?//?英雄機??

    ????static?{?//?靜態(tài)代碼塊,初始化圖片資源??
    ????????try?{??
    ????????????background?=?ImageIO.read(ShootGame.class??
    ????????????????????.getResource("background.png"));??
    ????????????start?=?ImageIO.read(ShootGame.class.getResource("start.png"));??
    ????????????airplane?=?ImageIO??
    ????????????????????.read(ShootGame.class.getResource("airplane.png"));??
    ????????????bee?=?ImageIO.read(ShootGame.class.getResource("bee.png"));??
    ????????????bullet?=?ImageIO.read(ShootGame.class.getResource("bullet.png"));??
    ????????????hero0?=?ImageIO.read(ShootGame.class.getResource("hero0.png"));??
    ????????????hero1?=?ImageIO.read(ShootGame.class.getResource("hero1.png"));??
    ????????????pause?=?ImageIO.read(ShootGame.class.getResource("pause.png"));??
    ????????????gameover?=?ImageIO??
    ????????????????????.read(ShootGame.class.getResource("gameover.png"));??
    ????????}?catch?(Exception?e)?{??
    ????????????e.printStackTrace();??
    ????????}??
    ????}??

    ????/**?畫?*/??
    ????@Override??
    ????public?void?paint(Graphics?g)?{??
    ????????g.drawImage(background,?0,?0,?null);?//?畫背景圖??
    ????????paintHero(g);?//?畫英雄機??
    ????????paintBullets(g);?//?畫子彈??
    ????????paintFlyingObjects(g);?//?畫飛行物??
    ????????paintScore(g);?//?畫分數(shù)??
    ????????paintState(g);?//?畫游戲狀態(tài)??
    ????}??

    ????/**?畫英雄機?*/??
    ????public?void?paintHero(Graphics?g)?{??
    ????????g.drawImage(hero.getImage(),?hero.getX(),?hero.getY(),?null);??
    ????}??

    ????/**?畫子彈?*/??
    ????public?void?paintBullets(Graphics?g)?{??
    ????????for?(int?i?=?0;?i?????????????Bullet?b?=?bullets[i];??
    ????????????g.drawImage(b.getImage(),?b.getX()?-?b.getWidth()?/?2,?b.getY(),??
    ????????????????????null);??
    ????????}??
    ????}??

    ????/**?畫飛行物?*/??
    ????public?void?paintFlyingObjects(Graphics?g)?{??
    ????????for?(int?i?=?0;?i?????????????FlyingObject?f?=?flyings[i];??
    ????????????g.drawImage(f.getImage(),?f.getX(),?f.getY(),?null);??
    ????????}??
    ????}??

    ????/**?畫分數(shù)?*/??
    ????public?void?paintScore(Graphics?g)?{??
    ????????int?x?=?10;?//?x坐標??
    ????????int?y?=?25;?//?y坐標??
    ????????Font?font?=?new?Font(Font.SANS_SERIF,?Font.BOLD,?22);?//?字體??
    ????????g.setColor(new?Color(0xFF0000));??
    ????????g.setFont(font);?//?設置字體??
    ????????g.drawString("SCORE:"?+?score,?x,?y);?//?畫分數(shù)??
    ????????y=y+20;?//?y坐標增20??
    ????????g.drawString("LIFE:"?+?hero.getLife(),?x,?y);?//?畫命??
    ????}??

    ????/**?畫游戲狀態(tài)?*/??
    ????public?void?paintState(Graphics?g)?{??
    ????????switch?(state)?{??
    ????????case?START:?//?啟動狀態(tài)??
    ????????????g.drawImage(start,?0,?0,?null);??
    ????????????break;??
    ????????case?PAUSE:?//?暫停狀態(tài)??
    ????????????g.drawImage(pause,?0,?0,?null);??
    ????????????break;??
    ????????case?GAME_OVER:?//?游戲終止狀態(tài)??
    ????????????g.drawImage(gameover,?0,?0,?null);??
    ????????????break;??
    ????????}??
    ????}??

    ????public?static?void?main(String[]?args)?{??
    ????????JFrame?frame?=?new?JFrame("Fly");??
    ????????ShootGame?game?=?new?ShootGame();?//?面板對象??
    ????????frame.add(game);?//?將面板添加到JFrame中??
    ????????frame.setSize(WIDTH,?HEIGHT);?//?設置大小??
    ????????frame.setAlwaysOnTop(true);?//?設置其總在最上??
    ????????frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?//?默認關閉操作??
    ????????frame.setIconImage(new?ImageIcon("images/icon.jpg").getImage());?//?設置窗體的圖標??
    ????????frame.setLocationRelativeTo(null);?//?設置窗體初始位置??
    ????????frame.setVisible(true);?//?盡快調用paint??

    ????????game.action();?//?啟動執(zhí)行??
    ????}??

    ????/**?啟動執(zhí)行代碼?*/??
    ????public?void?action()?{??
    ????????//?鼠標監(jiān)聽事件??
    ????????MouseAdapter?l?=?new?MouseAdapter()?{??
    ????????????@Override??
    ????????????public?void?mouseMoved(MouseEvent?e)?{?//?鼠標移動??
    ????????????????if?(state?==?RUNNING)?{?//?運行狀態(tài)下移動英雄機--隨鼠標位置??
    ????????????????????int?x?=?e.getX();??
    ????????????????????int?y?=?e.getY();??
    ????????????????????hero.moveTo(x,?y);??
    ????????????????}??
    ????????????}??

    ????????????@Override??
    ????????????public?void?mouseEntered(MouseEvent?e)?{?//?鼠標進入??
    ????????????????if?(state?==?PAUSE)?{?//?暫停狀態(tài)下運行??
    ????????????????????state?=?RUNNING;??
    ????????????????}??
    ????????????}??

    ????????????@Override??
    ????????????public?void?mouseExited(MouseEvent?e)?{?//?鼠標退出??
    ????????????????if?(state?==?RUNNING)?{?//?游戲未結束,則設置其為暫停??
    ????????????????????state?=?PAUSE;??
    ????????????????}??
    ????????????}??

    ????????????@Override??
    ????????????public?void?mouseClicked(MouseEvent?e)?{?//?鼠標點擊??
    ????????????????switch?(state)?{??
    ????????????????case?START:??
    ????????????????????state?=?RUNNING;?//?啟動狀態(tài)下運行??
    ????????????????????break;??
    ????????????????case?GAME_OVER:?//?游戲結束,清理現(xiàn)場??
    ????????????????????flyings?=?new?FlyingObject[0];?//?清空飛行物??
    ????????????????????bullets?=?new?Bullet[0];?//?清空子彈??
    ????????????????????hero?=?new?Hero();?//?重新創(chuàng)建英雄機??
    ????????????????????score?=?0;?//?清空成績??
    ????????????????????state?=?START;?//?狀態(tài)設置為啟動??
    ????????????????????break;??
    ????????????????}??
    ????????????}??
    ????????};??
    ????????this.addMouseListener(l);?//?處理鼠標點擊操作??
    ????????this.addMouseMotionListener(l);?//?處理鼠標滑動操作??

    ????????timer?=?new?Timer();?//?主流程控制??
    ????????timer.schedule(new?TimerTask()?{??
    ????????????@Override??
    ????????????public?void?run()?{??
    ????????????????if?(state?==?RUNNING)?{?//?運行狀態(tài)??
    ????????????????????enterAction();?//?飛行物入場??
    ????????????????????stepAction();?//?走一步??
    ????????????????????shootAction();?//?英雄機射擊??
    ????????????????????bangAction();?//?子彈打飛行物??
    ????????????????????outOfBoundsAction();?//?刪除越界飛行物及子彈??
    ????????????????????checkGameOverAction();?//?檢查游戲結束??
    ????????????????}??
    ????????????????repaint();?//?重繪,調用paint()方法??
    ????????????}??

    ????????},?intervel,?intervel);??
    ????}??

    ????int?flyEnteredIndex?=?0;?//?飛行物入場計數(shù)??

    ????/**?飛行物入場?*/??
    ????public?void?enterAction()?{??
    ????????flyEnteredIndex++;??
    ????????if?(flyEnteredIndex?%?40?==?0)?{?//?400毫秒生成一個飛行物--10*40??
    ????????????FlyingObject?obj?=?nextOne();?//?隨機生成一個飛行物??
    ????????????flyings?=?Arrays.copyOf(flyings,?flyings.length?+?1);??
    ????????????flyings[flyings.length?-?1]?=?obj;??
    ????????}??
    ????}??

    ????/**?走一步?*/??
    ????public?void?stepAction()?{??
    ????????for?(int?i?=?0;?i?????????????FlyingObject?f?=?flyings[i];??
    ????????????f.step();??
    ????????}??

    ????????for?(int?i?=?0;?i?????????????Bullet?b?=?bullets[i];??
    ????????????b.step();??
    ????????}??
    ????????hero.step();?//?英雄機走一步??
    ????}??

    ????/**?飛行物走一步?*/??
    ????public?void?flyingStepAction()?{??
    ????????for?(int?i?=?0;?i?????????????FlyingObject?f?=?flyings[i];??
    ????????????f.step();??
    ????????}??
    ????}??

    ????int?shootIndex?=?0;?//?射擊計數(shù)??

    ????/**?射擊?*/??
    ????public?void?shootAction()?{??
    ????????shootIndex++;??
    ????????if?(shootIndex?%?30?==?0)?{?//?300毫秒發(fā)一顆??
    ????????????Bullet[]?bs?=?hero.shoot();?//?英雄打出子彈??
    ????????????bullets?=?Arrays.copyOf(bullets,?bullets.length?+?bs.length);?//?擴容??
    ????????????System.arraycopy(bs,?0,?bullets,?bullets.length?-?bs.length,??
    ????????????????????bs.length);?//?追加數(shù)組??
    ????????}??
    ????}??

    ????/**?子彈與飛行物碰撞檢測?*/??
    ????public?void?bangAction()?{??
    ????????for?(int?i?=?0;?i?????????????Bullet?b?=?bullets[i];??
    ????????????bang(b);?//?子彈和飛行物之間的碰撞檢查??
    ????????}??
    ????}??

    ????/**?刪除越界飛行物及子彈?*/??
    ????public?void?outOfBoundsAction()?{??
    ????????int?index?=?0;?//?索引??
    ????????FlyingObject[]?flyingLives?=?new?FlyingObject[flyings.length];?//?活著的飛行物??
    ????????for?(int?i?=?0;?i?????????????FlyingObject?f?=?flyings[i];??
    ????????????if?(!f.outOfBounds())?{??
    ????????????????flyingLives[index++]?=?f;?//?不越界的留著??
    ????????????}??
    ????????}??
    ????????flyings?=?Arrays.copyOf(flyingLives,?index);?//?將不越界的飛行物都留著??

    ????????index?=?0;?//?索引重置為0??
    ????????Bullet[]?bulletLives?=?new?Bullet[bullets.length];??
    ????????for?(int?i?=?0;?i?????????????Bullet?b?=?bullets[i];??
    ????????????if?(!b.outOfBounds())?{??
    ????????????????bulletLives[index++]?=?b;??
    ????????????}??
    ????????}??
    ????????bullets?=?Arrays.copyOf(bulletLives,?index);?//?將不越界的子彈留著??
    ????}??

    ????/**?檢查游戲結束?*/??
    ????public?void?checkGameOverAction()?{??
    ????????if?(isGameOver()==true)?{??
    ????????????state?=?GAME_OVER;?//?改變狀態(tài)??
    ????????}??
    ????}??

    ????/**?檢查游戲是否結束?*/??
    ????public?boolean?isGameOver()?{??

    ????????for?(int?i?=?0;?i?????????????int?index?=?-1;??
    ????????????FlyingObject?obj?=?flyings[i];??
    ????????????if?(hero.hit(obj))?{?//?檢查英雄機與飛行物是否碰撞??
    ????????????????hero.subtractLife();?//?減命??
    ????????????????hero.setDoubleFire(0);?//?雙倍火力解除??
    ????????????????index?=?i;?//?記錄碰上的飛行物索引??
    ????????????}??
    ????????????if?(index?!=?-1)?{??
    ????????????????FlyingObject?t?=?flyings[index];??
    ????????????????flyings[index]?=?flyings[flyings.length?-?1];??
    ????????????????flyings[flyings.length?-?1]?=?t;?//?碰上的與最后一個飛行物交換??

    ????????????????flyings?=?Arrays.copyOf(flyings,?flyings.length?-?1);?//?刪除碰上的飛行物??
    ????????????}??
    ????????}??

    ????????return?hero.getLife()?<=?0;??
    ????}??

    ????/**?子彈和飛行物之間的碰撞檢查?*/??
    ????public?void?bang(Bullet?bullet)?{??
    ????????int?index?=?-1;?//?擊中的飛行物索引??
    ????????for?(int?i?=?0;?i?????????????FlyingObject?obj?=?flyings[i];??
    ????????????if?(obj.shootBy(bullet))?{?//?判斷是否擊中??
    ????????????????index?=?i;?//?記錄被擊中的飛行物的索引??
    ????????????????break;??
    ????????????}??
    ????????}??
    ????????if?(index?!=?-1)?{?//?有擊中的飛行物??
    ????????????FlyingObject?one?=?flyings[index];?//?記錄被擊中的飛行物??

    ????????????FlyingObject?temp?=?flyings[index];?//?被擊中的飛行物與最后一個飛行物交換??
    ????????????flyings[index]?=?flyings[flyings.length?-?1];??
    ????????????flyings[flyings.length?-?1]?=?temp;??

    ????????????flyings?=?Arrays.copyOf(flyings,?flyings.length?-?1);?//?刪除最后一個飛行物(即被擊中的)??

    ????????????//?檢查one的類型(敵人加分,獎勵獲取)??
    ????????????if?(one?instanceof?Enemy)?{?//?檢查類型,是敵人,則加分??
    ????????????????Enemy?e?=?(Enemy)?one;?//?強制類型轉換??
    ????????????????score?+=?e.getScore();?//?加分??
    ????????????}?else?{?//?若為獎勵,設置獎勵??
    ????????????????Award?a?=?(Award)?one;??
    ????????????????int?type?=?a.getType();?//?獲取獎勵類型??
    ????????????????switch?(type)?{??
    ????????????????case?Award.DOUBLE_FIRE:??
    ????????????????????hero.addDoubleFire();?//?設置雙倍火力??
    ????????????????????break;??
    ????????????????case?Award.LIFE:??
    ????????????????????hero.addLife();?//?設置加命??
    ????????????????????break;??
    ????????????????}??
    ????????????}??
    ????????}??
    ????}??

    ????/**?
    ?????*?隨機生成飛行物?
    ?????*??
    ?????*?@return?飛行物對象?
    ?????*/??
    ????public?static?FlyingObject?nextOne()?{??
    ????????Random?random?=?new?Random();??
    ????????int?type?=?random.nextInt(20);?//?[0,20)??
    ????????if?(type?????????????return?new?Bee();??
    ????????}?else?{??
    ????????????return?new?Airplane();??
    ????????}??
    ????}??
    }

    推薦閱讀:

    室友深夜打游戲,我悄悄給他斷了網···

    關閉線程池 shutdown 和 shutdownNow 的區(qū)別

    互聯(lián)網初中高級大廠面試題(9個G)

    內容包含Java基礎、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊列、高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper、數(shù)據(jù)結構、限流熔斷降級......等技術棧!

    ?戳閱讀原文領取!? ? ? ? ? ? ? ??? ??? ? ? ? ? ? ? ? ? ?朕已閱?

    瀏覽 77
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    超碰在线国产 | 柏欣彤Av色福利一二区 | 伊人综合电影网 | 国产AV直播 | 日本精品一区二区三区视频 |