在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → Java 飞机大战

Java 飞机大战

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.17M
  • 下载次数:18
  • 浏览次数:143
  • 发布时间:2021-07-12
  • 实例类别:Android平台开发
  • 发 布 人:zhzzzzhhhyyy
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 飞机大战 java 大战 飞机

实例介绍

【实例简介】

飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是自己控制的飞机)、敌人。而敌人应该分为打死给分的飞机(就是普通飞机),另一种就是打死有奖励的敌人。他们都应该是飞行物的子类,我们也可以为普通飞机和给奖励的敌人设一个接口让他们去实现接口,这样有利于以后的扩展,我在这里给的简化版的飞机大战,主要是为了让大家了解面向对象。

【实例截图】

from clipboard

from clipboard

【核心代码】


package fly; import gema.BallPanel; import gema.Brick; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Arrays; import java.util.Random; import java.util.Timer; import java.util.TimerTask; public class ShootGame extends JPanel { public static final int WIDTH=500; public static final int HEIGTH=754; public static BufferedImage background;//背景图片  public static BufferedImage airplane;//敌机  public static BufferedImage bee;//小蜜蜂  public static BufferedImage bullet;//子弹  public static BufferedImage gameover;//游戏结束  public static BufferedImage hero0;//英雄战机0  public static BufferedImage hero1;//英雄战机1  public static BufferedImage pause;//暂停  public static BufferedImage start;//开始  public static BufferedImage boss1;//背景图片  public static BufferedImage boss2;//背景图片   private Hero hero=new Hero();//创建一个战机对象   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 state=0; private Bullet[] bullets={};//创建一个存储所有子弹的数组   private Timer timer;//定时器  private FlyingObject[] flyings={};//创建一个存储敌机的数组  private FlyingObject[] boss={};//创建一个存储boss1机的数组   private int score=0; static { try { background= ImageIO.read(ShootGame.class.getResource("background.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")); gameover= ImageIO.read(ShootGame.class.getResource("gameover.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")); start= ImageIO.read(ShootGame.class.getResource("start.png")); boss1= ImageIO.read(ShootGame.class.getResource("boss1.png")); boss2= ImageIO.read(ShootGame.class.getResource("boss2.png"));

        } catch (IOException e) {
            e.printStackTrace();
        }

    } //画战机  public void pintHero(Graphics g){
        g.drawImage(hero.getImage(),hero.getX(),hero.getY(),null);
    } //画游戏状态的方法  public void pintStage(Graphics g){ switch (state){ case START:
                g.drawImage(start,50,110,null); break; case PAUSE:
                g.drawImage(pause,0,0,null); break; case GAME_OVER:
                g.drawImage(gameover,0,0,null); break;
        }

    } //画子弹的方法  public void paibtBullets(Graphics g){ for (int i=0;i<bullets.length;i  ){
            Bullet b=bullets[i];
            g.drawImage(b.getImage(),b.getX()-b.getWidth()/2,b.getY(),null);
        }
    } //画敌机  public void pintFlyingObjects(Graphics g){ for (int i=0;i<flyings.length;i  ){
            FlyingObject f=flyings[i];
            g.drawImage(f.getImage(),f.getX(),f.getY(),null);
        }
    } //画分数和生命的方法  public void pintScore(Graphics g){ int x=10; int y=25;
        Font font=new Font(Font.SANS_SERIF,Font.BOLD,14);
        g.setFont(font);
        g.drawString("分数:" score,x,y);
        y =20;
        g.drawString("生命:" hero.getLife(),x,y);
    } @Override  public void paint(Graphics g) { super.paint(g);
        g.drawImage(background,0,0,null); //调用画战机的方法  pintHero(g); //调用游戏状态的方法  pintStage(g); //调用画子弹的方法  paibtBullets(g); //调用画敌机的方法  pintFlyingObjects(g); //调用画分数的方法  pintScore(g);
    } //发射子弹的方法  int shootInent=0; public void shootAction(){ if (shootInent %20==0){//每隔300毫秒发射一次  Bullet[] bs=hero.shoot();//战机发射一次子弹  //扩容  bullets= Arrays.copyOf(bullets,bullets.length bs.length); //向扩容的位置追加子弹  System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length);
        }



    } //所有子弹移动一步的方法  public void stepAction(){ //子弹移动  for (int i=0;i<bullets.length;i  ){ bullets[i].step();
        } //敌机移动  for (int i=0;i<flyings.length;i  ){ flyings[i].step();
        }
    } //产生一个飞行物的方法  public FlyingObject nextOne(){
        Random r=new Random(); int type=r.nextInt(5); if (type==0){ return new Bee();
        }else { return new Airplane();
        }
    } //产生敌机  int fylIndex=0; public void enterAction(){ if (fylIndex %20==0){ //产生一个敌机  FlyingObject obj=nextOne(); //扩容  flyings=Arrays.copyOf(flyings,flyings.length 1); //添加敌机  flyings[flyings.length-1]=obj;
        }

    } //产生一个boss1的方法    //检测一颗子弹是否和所有飞行物碰撞  public void bang(Bullet bullet){ int index=-1;//击中飞行物的索引  for (int i=0;i<flyings.length;i  ){
            FlyingObject f=flyings[i]; if (f.shootBy(bullet)){
                index=i; break;
            }
        } //删除击中飞行物  if(index!=-1){ //记录被击中的敌机  FlyingObject one=flyings[index]; //被击中的飞行物的位置,重新放置最后一个元素  flyings[index]=flyings[flyings.length-1]; //删除最后一个元素  flyings=Arrays.copyOf(flyings,flyings.length-1); //判断飞行物的类型  if (one instanceof Enemy){
                Enemy e=(Enemy)one;//强制转换  score =e.getScore();//加分  }else if (one instanceof Aword){
                Aword a=(Aword)one; int type=a.getType();//获取奖励类型  switch (type){ case Aword.ADD_Fire: hero.setDoubleFire(2); break; case Aword.ADD_Life: hero.setLife(hero.getLife() 1); break;
                }
            }
        }

    } //所有的子弹是否和所有的飞行物发射碰撞  public void bangAction(){ for (int i=0;i<bullets.length;i  ){
            Bullet b=bullets[i];
            bang(b);
        }
    } //检测游戏是否结束  public boolean isGameOver(){ for (int i=0;i<flyings.length;i  ){ int index=-1;
            FlyingObject obj=flyings[i]; if (hero.hit(obj)){ hero.setLife(hero.getLife()-1);//减生命  index=i;
            } if (index!=-1){ //被碰到的飞行物的位置,重新放置最后一个元素  flyings[index]=flyings[flyings.length-1]; //删除最后一个元素  flyings=Arrays.copyOf(flyings,flyings.length-1);
            }
        } return hero.getLife()<=0;
    } //游戏结束改变游戏状态  public void checkGameOver(){ if (isGameOver()){ state=GAME_OVER;
        }
    } //删除越界的飞行物和子弹  public void outOfBoundsAction(){ int index=0; //创建一个数组用于装未出界的飞行物  FlyingObject[] flyingLives=new FlyingObject[flyings.length]; //将没有出界的飞行物放到flyingLives数组中  for (int i=0;i<flyings.length;i  ){
            FlyingObject f=flyings[i]; if (!f.outOfBounds()){
                flyingLives[index]=f;
                index  ;
            }
        } //flyings数组重新赋值  flyings=Arrays.copyOf(flyingLives,index);

        index=0; //创建一个数组用于装未出界的飞行物  Bullet[] bulletLives=new Bullet[bullets.length]; //将没有出界的飞行物放到flyingLives数组中  for (int i=0;i<bullets.length;i  ){
            Bullet f=bullets[i]; if (!f.outOfBounds()){
                bulletLives[index]=f;
                index  ;
            }
        } //flyings数组重新赋值  bullets=Arrays.copyOf(bulletLives,index);


    } //启动定时器的方法  public void action(){ //创建鼠标适配器  MouseAdapter ma=new MouseAdapter() { //鼠标滑动事件  public void mouseMoved(MouseEvent e){ if (state==RUNNING){ hero.setX(e.getX()-hero.getWidth()/2); hero.setY(e.getY()-hero.getHeigth()/2);
            }


        } //鼠标单击事件  public void mouseClicked(MouseEvent e){ if (state==START){ state=RUNNING;
            }else if (state==GAME_OVER){ hero=new Hero();//出现创建战斗机  score=0;//清空分数  flyings=new FlyingObject[0];//清空敌机  bullets=new Bullet[0];//清空子弹   state=START;//修改开始的状态  }

            } //鼠标移出  public void mouseExited(MouseEvent e){ if (state==RUNNING){ state=PAUSE;
            }
            } //鼠标进入  public void mouseEntered(MouseEvent e){ if (state==PAUSE){ state=RUNNING;
            }
            }
        }; //添加监听器  this.addMouseMotionListener(ma); this.addMouseListener(ma); timer=new Timer();//初始化定时器  timer.schedule(new TimerTask() { @Override  public void run() { if (state==RUNNING){
                   shootAction();//调用发射的方法  stepAction();//调用子弹移动的方法  hero.step();//调用战机移动的方法  enterAction();//调用产生敌机的方法  bangAction();//调用飞行物和子弹碰撞的方法  checkGameOver();//调用游戏结束的方法  outOfBoundsAction();//检测飞行物是否越界的方法  } //               System.out.println(bullets.length);  //重绘  repaint();

           }
       },10,10);
    } public static void main(String[] args) {
        JFrame frame=new JFrame("飞机大战");
        frame.setSize(WIDTH,HEIGTH);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setAlwaysOnTop(true);//设置窗口总在前方  frame.setVisible(true);

        ShootGame sg=new ShootGame();//创建面板对象  frame.add(sg);//添加面板到窗体中  sg.action();//启动执行定时器  }


}


实例下载地址

Java 飞机大战

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警