1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Java 開發(fā)打飛機(jī)小游戲(附完整源碼)

        共 1996字,需瀏覽 4分鐘

         ·

        2020-12-06 01:26

        上圖

        寫在前面

        技術(shù)源于分享,所以今天抽空把自己之前用java做過的小游戲整理貼出來給大家參考學(xué)習(xí)。java確實(shí)不適合寫桌面應(yīng)用,這里只是通過這個(gè)游戲讓大家理解oop面向?qū)ο缶幊痰倪^程,純屬娛樂。代碼寫的很簡單,也很容易理解,并且注釋寫的很清楚了,還有問題,自己私下去補(bǔ)課學(xué)習(xí)。

        完整代碼

        敵飛機(jī)

        import?java.util.Random;


        ?敵飛機(jī):?是飛行物,也是敵人

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

        ????/**?初始化數(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);
        ????}

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

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

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

        分?jǐn)?shù)獎(jiǎng)勵(lì)

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

        蜜蜂

        import?java.util.Random;??

        /**?蜜蜂?*/??
        public?class?Bee?extends?FlyingObject?implements?Award{??
        ????private?int?xSpeed?=?1;???//x坐標(biāo)移動(dòng)速度??
        ????private?int?ySpeed?=?2;???//y坐標(biāo)移動(dòng)速度??
        ????private?int?awardType;????//獎(jiǎng)勵(lì)類型??

        ????/**?初始化數(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);???//初始化時(shí)給獎(jiǎng)勵(lì)??
        ????}??

        ????/**?獲得獎(jiǎng)勵(lì)類型?*/??
        ????public?int?getType(){??
        ????????return?awardType;??
        ????}??

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

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

        子彈類:是飛行物體

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

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

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

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

        }

        敵人的分?jǐn)?shù)

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

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

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

        /**?
        ?*?飛行物(敵機(jī),蜜蜂,子彈,英雄機(jī))?
        ?*/
        ??
        public?abstract?class?FlyingObject?{??
        ????protected?int?x;????//x坐標(biāo)??
        ????protected?int?y;????//y坐標(biāo)??
        ????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();??

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

        ????/**?
        ?????*?檢查當(dāng)前飛行物體是否被子彈(x,y)擊(shoot)中?
        ?????*?@param?Bullet?子彈對(duì)象?
        ?????*?@return?true表示被擊中了?
        ?????*/
        ??
        ????public?boolean?shootBy(Bullet?bullet){??
        ????????int?x?=?bullet.x;??//子彈橫坐標(biāo)??
        ????????int?y?=?bullet.y;??//子彈縱坐標(biāo)??
        ????????return?this.xthis.x+width?&&?this.ythis.y+height;??
        ????}??

        }

        英雄機(jī)

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

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

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

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

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

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

        ????/**?設(shè)置雙倍火力?*/??
        ????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;??
        ????}??

        ????/**?當(dāng)前物體移動(dòng)了一下,相對(duì)距離,x,y鼠標(biāo)位置??*/??
        ????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(子彈距飛機(jī)的位置)??
        ????????????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;??
        ????????}??
        ????}??

        ????/**?移動(dòng)?*/??
        ????@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坐標(biāo)最小距離??
        ????????int?x2?=?other.x?+?this.width/2?+?other.width;???//x坐標(biāo)最大距離??
        ????????int?y1?=?other.y?-?this.height/2;????????????????//y坐標(biāo)最小距離??
        ????????int?y2?=?other.y?+?this.height/2?+?other.height;?//y坐標(biāo)最大距離??

        ????????int?herox?=?this.x?+?this.width/2;???????????????//英雄機(jī)x坐標(biāo)中心點(diǎn)距離??
        ????????int?heroy?=?this.y?+?this.height/2;??????????????//英雄機(jī)y坐標(biāo)中心點(diǎn)距離??

        ????????return?herox>x1?&&?heroxy1?&&?heroy//區(qū)間范圍內(nèi)為撞上了??
        ????}??

        }

        游戲啟動(dòng)主類

        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;?//?面板高??
        ????/**?游戲的當(dāng)前狀態(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;?//?定時(shí)器??
        ????private?int?intervel?=?1000?/?100;?//?時(shí)間間隔(毫秒)??

        ????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?=?{};?//?敵機(jī)數(shù)組??
        ????private?Bullet[]?bullets?=?{};?//?子彈數(shù)組??
        ????private?Hero?hero?=?new?Hero();?//?英雄機(jī)??

        ????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);?//?畫英雄機(jī)??
        ????????paintBullets(g);?//?畫子彈??
        ????????paintFlyingObjects(g);?//?畫飛行物??
        ????????paintScore(g);?//?畫分?jǐn)?shù)??
        ????????paintState(g);?//?畫游戲狀態(tài)??
        ????}??

        ????/**?畫英雄機(jī)?*/??
        ????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);??
        ????????}??
        ????}??

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

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

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

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

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

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

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

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

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

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

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

        ????/**?飛行物入場?*/??
        ????public?void?enterAction()?{??
        ????????flyEnteredIndex++;??
        ????????if?(flyEnteredIndex?%?40?==?0)?{?//?400毫秒生成一個(gè)飛行物--10*40??
        ????????????FlyingObject?obj?=?nextOne();?//?隨機(jī)生成一個(gè)飛行物??
        ????????????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();?//?英雄機(jī)走一步??
        ????}??

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

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

        ????/**?射擊?*/??
        ????public?void?shootAction()?{??
        ????????shootIndex++;??
        ????????if?(shootIndex?%?30?==?0)?{?//?300毫秒發(fā)一顆??
        ????????????Bullet[]?bs?=?hero.shoot();?//?英雄打出子彈??
        ????????????bullets?=?Arrays.copyOf(bullets,?bullets.length?+?bs.length);?//?擴(kuò)容??
        ????????????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);?//?將不越界的子彈留著??
        ????}??

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

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

        ????????for?(int?i?=?0;?i?????????????int?index?=?-1;??
        ????????????FlyingObject?obj?=?flyings[i];??
        ????????????if?(hero.hit(obj))?{?//?檢查英雄機(jī)與飛行物是否碰撞??
        ????????????????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;?//?碰上的與最后一個(gè)飛行物交換??

        ????????????????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];?//?被擊中的飛行物與最后一個(gè)飛行物交換??
        ????????????flyings[index]?=?flyings[flyings.length?-?1];??
        ????????????flyings[flyings.length?-?1]?=?temp;??

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

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

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

        一只獨(dú)孤的程序猿
        https://blog.csdn.net/wclxyn/article/details/110159708

        最近熱文閱讀:

        1、為了甩鍋,我寫了個(gè)牛逼的日志切面!
        2、記一次 mysql 磁盤滿解決過程
        3、排名前 16 的 Java 工具類,哪個(gè)你沒用過?
        4、垃圾代碼和優(yōu)質(zhì)代碼的區(qū)別?
        5、工作群里常見表情的真正含義……
        6、把我坑慘的一個(gè)MySQL雙引號(hào)!
        7、基于Spring+SpringMVC+Mybatis的分布式敏捷開發(fā)系統(tǒng)架構(gòu)
        8、分享5個(gè)免費(fèi)的在線 SQL 數(shù)據(jù)庫環(huán)境,簡直太方便了!
        9SQL 優(yōu)化極簡法則,你掌握了幾個(gè)?
        10、高并發(fā)下的接口冪等性解決方案!
        關(guān)注公眾號(hào),你想要的Java都在這里

        瀏覽 44
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            小泽玛利亚强忍高潮 | 欧美成人大片 | 国产亲子乱婬一级A片 | 欧美激情插插插 | 农村妇女毛片 | 深夜爽爽动态图无遮无挡 | 伊人在线视频 | 男人捅女人的网站 | 亚洲福利 | 国产精品秘 久久久成人福利 |