基于java的飞机大战游戏的设计与实现,JAVA飞机大战

  基于java的飞机大战游戏的设计与实现,JAVA飞机大战

  本文实例为大家分享了爪哇岛实现飞机大战游戏的具体代码,供大家参考,具体内容如下

  我的面板类

  包p;导入Java。awt。字体;导入Java。awt。图形;导入Java。awt。点;导入Java。awt。长方形;导入Java。awt。事件。鼠标事件;导入Java。awt。事件。mousemotionlistener导入Java。util。ArrayList导入Java。util。列表;导入javax。SQL。行集内部;导入javax。挥棒。图像图标;导入javax。挥棒。jpanel//xx.2//创建面板类,继承面板,实现移动监听事件公共类我的面板扩展面板实现MouseMotionListener {//私有图像图标bj image=新图像图标( img/bj。png’);//英雄机图片私人图像图标英雄图像=新图像图标( img/头. png’);//显示徽标//专用图像图标徽标图像=新图像图标( img/头. png’);//英雄机的宽高private int width=英雄形象。geticonvwidth();private int height=英雄形象。geticonheight();//英雄机的坐标private int x=180 private int y=880//创建一个敌机的集合,用于展示多个敌机listname enemy s=new ArrayList();//存储子弹集合list bullet bullets=new ArrayList();//存储爆炸对象集合列表炸弹炸弹=new ArrayList();//存储英雄机爆炸集合ListHeroDead hero EADS=new ArrayList();私有(同Internationalorganizations)国际组织数;//统计当前得分私有int m;//统计剩余血条量//我的面板jp=new my panel(){//{//设置背景(颜色。灰色);//设置面板背景颜色//} public MyPanel() { //在构造方法中准备10个敌机for(int I=0;i10I){ Enemy s . add(new Enemy());} } @覆盖公共空白绘画(图形g) { //用于绘制图片区域超级涂料(克);//在窗口左侧展示打飞机得分//设置字体:参数1:字体家族,参数2:字体样式:加粗参数3:字体大小g.setFont(新字体(宋体,字体。粗体,30));g。拉绳(当前得分:号,5,30);g。拉绳(发量(万根):(5米),5,80);//g.drawImage(null,x,y,getBackground(),getfocuscyclerotancestor());//绘制英雄机图片参数1,图片参数注射毒品和3:坐标g.drawImage(heroImage.getImage(),x,y,null);//g .绘制图像(logo图像。getimage(),19,22,null);//在绘图中显示10辆敌机for(int I=0;伊恩MYS。size();i ){敌我=敌人。get(I);//获取敌机对象敌国.绘制图像(g);//然后分别展示} //展示子弹集合的图片

  for (int i = 0; i < bullets.size(); i++) {            Bullet bullet = bullets.get(i);  //取出子弹对象            bullet.drawImage(g);        }                //展示爆炸集合的图片        for(int i=0;i<bombs.size();i++){            Bomb bomb = bombs.get(i);            bomb.drawImage(g);        }                //展示英雄机的销毁图片        for(int i=0;i<heroDeads.size();i++){            HeroDead heroDead = heroDeads.get(i);            heroDead.drawImage(g);        }            }    @Override    public void mouseDragged(MouseEvent e) {        //System.out.println("鼠标移动并拖拽触发");                //鼠标拖拽时,需要将英雄机也带着移动(只需改变x轴和y轴)        x = e.getX()-width/2;  //英雄机的移动,随着鼠标触发移动的        y = e.getY()-height/2;  //鼠标指定到英雄机中间位置                repaint();  //重新绘制图片    }    @Override    public void mouseMoved(MouseEvent e) {        //System.out.println("鼠标移动的触发..");                //鼠标移动时,需要将英雄机也带着移动(只需改变x轴和y轴)        x = e.getX()-width/2;  //英雄机的移动,随着鼠标触发移动的        y = e.getY()-height/2;  //鼠标指定到英雄机中间位置                repaint();  //重新绘制图片    }    //L-4. 创建子弹类Bullet,操作与敌机类类似    public void init() {        //定义一个标记,循环了自定义的次数后,才去添加,这样子弹数量会变少        int flag = 0;        while(true) { //循环地跑,模拟依次移动的效果            flag++;  //            if(flag==50) {  //控制子弹数量                              bullets.add(new Bullet(x+width/2, y)); //就是从英雄级的x,y轴位置发射子弹的                           flag=0;  //又回到0,依次计算15次              //System.out.println("子弹数量:"+ bullets.size());            }                                    //展示子弹,让子弹飞起来            for(int i=0;i<bullets.size();i++) {                 Bullet bullet = bullets.get(i);  //取出对象                 if(i%2!=0)//设置子弹左右发射                 bullet.move();                   else                 bullet.move1();//移动子弹位置                                                   //如果子弹移动到y轴为0,则移除掉                 if(bullet.getY()<0){                     bullets.remove(bullet);  //移除子弹对象                 }            }            //xx.3.            //敌机循环移动..            for(int i=0;i<enemys.size();i++) {                Enemy en = enemys.get(i);                en.move();  //循环地移动每一架敌机y轴位置                                                //超出屏幕范围后,需要移除,并重新添加一个对象                if(en.getY()>GameMain.HEIGHT) {                    //int count1=enemys.size();                    enemys.remove(en);   //移除对象                                        enemys.add(new Enemy());  //重新再创建对象                }                            //L 3-4                    //在敌机的循环中,再继续循环子弹; 需要判断是否有子弹和敌机重叠了,                //则移除敌机对象,重新添加,移除子弹;如果有则添加爆炸对象                for(int j=0;j<bullets.size();j++){                    Bullet bu = bullets.get(j);                    if(isHit(en,bu)){ //碰撞的判断                        enemys.remove(en);  //移除敌机,并重新new一个                        enemys.add(new Enemy());                                                bullets.remove(bu);  //移除子弹                                                //添加的爆炸位置和敌机位置一致                        bombs.add(new Bomb(en.getX(), en.getY()));                                                number += 10; //爆炸后,累加得分                    }                }                //zz-6                //判断英雄机与敌机的碰撞(英雄机的消亡)                if(isHit(en)){                    System.out.println("进入英雄机爆炸...");                    //敌机的对象移除                    enemys.remove(en);                                        //英雄机爆炸图片位置应该与英雄机重叠                    heroDeads.add(new HeroDead(x, y));                    for(m=0;m<=heroDeads.size();m++) {                        while(heroDeads.size()==5) {                            return;                         }                    }                      //游戏结束,跳出死循环                }            }            //L-5            //将爆炸的所有对象,过一段时间则干掉            for(int i=0;i<bombs.size();i++){                Bomb bomb = bombs.get(i);                bomb.move();  //计算次数,统一循环多少次后,再干掉                                if(bomb.getCount()>6){                    bombs.remove(bomb);  //在循环的一定范围后,可以移除爆炸了                }            }                        //xx.2            //每次的移动都需要停顿一下            try {                Thread.sleep(6);    //单位:毫秒  睡眠6毫秒            } catch (InterruptedException e) {                e.printStackTrace();            }                         repaint();  //重新绘制图片        }    }                 //zz-6     //英雄机与敌机的碰撞    private boolean isHit(Enemy en) {        //英雄机的碰撞区域        Rectangle rect = new Rectangle(x, y, width, height);        //碰撞点的位置,是在敌机的中心点        Point point = new Point(en.getX()+en.getWidth()/2, en.getY()+en.getHeight()/2);                return rect.contains(point);    }            //L-5    private boolean isHit(Enemy en, Bullet bu) {        //填充敌机的碰撞区域        Rectangle rect = new Rectangle(en.getX(), en.getY(), en.getWidth(), en.getHeight());        //将子弹的位置设置在中间        Point point = new Point(bu.getX()+bu.getWidth()/2, bu.getY()+bu.getHeight()/2);        //如果位置有重叠,返回true        return rect.contains(point);    }}HeroDead类

  

package  P;import java.awt.Graphics;import javax.swing.ImageIcon;public class HeroDead {    private ImageIcon heroImage = new ImageIcon("img/爆炸.gif");    private int width = heroImage.getIconWidth();    private int height = heroImage.getIconHeight();    private int x;    private int y;                public ImageIcon getHeroImage() {        return heroImage;    }    public void setHeroImage(ImageIcon heroImage) {        this.heroImage = heroImage;    }    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 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 HeroDead(int x,int y){        this.x=x;        this.y=y;    }    public void drawImage(Graphics g) {        g.drawImage(heroImage.getImage(), x, y, null);    }}

GameMain类

 

  

package  P;import java.awt.Color;import javax.swing.BorderFactory;import javax.swing.JFrame;//游戏入口类public class GameMain {    static final int WIDTH = 860;  //设置静态常量,作为状态值使用    static final int HEIGHT = 660;    public static void main(String[] args) {        JFrame jFrame = new JFrame();  //实例化顶级窗口类        jFrame.setSize(WIDTH, HEIGHT);  //设置宽高像素        jFrame.setTitle("小秃头历险记");  //设置标题        jFrame.setLocationRelativeTo(null);  //设置居中效果        //JFrame.EXIT_ON_CLOSE: 状态值  3        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口的同时,把程序关闭                //在窗口中,加入面板        MyPanel pl = new MyPanel();        pl.setBackground(Color.pink);        pl.setBorder(BorderFactory.createLineBorder(Color.cyan, 3));        jFrame.add(pl);  //添加面板组件        jFrame.addMouseMotionListener(pl);  //添加鼠标移动事件                  jFrame.setVisible(true);  //使窗口可视化                pl.init();  //在面板中循环将组件跑起来    }}

Enemy类

 

  

package  P;import java.awt.Graphics;import java.util.Random;import javax.swing.ImageIcon;//创建敌机类public class Enemy {    //创建敌机图片,宽高,坐标等属性    private ImageIcon enemyImage = new ImageIcon("img/错误.png");        private int width = enemyImage.getIconWidth();    private int height = enemyImage.getIconHeight();        private int x;    private int y;        public ImageIcon getEnemyImage() {        return enemyImage;    }    public void setEnemyImage(ImageIcon enemyImage) {        this.enemyImage = enemyImage;    }    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 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 Enemy(){        //创建随机类,在窗口宽高范围内随机        Random random = new Random();        //随机出来的敌机位置可以显示一半图片        x = random.nextInt(GameMain.WIDTH-width/2);        y = -random.nextInt(GameMain.HEIGHT-height/2);  //初始敌机位置为负数    }    public void drawImage(Graphics g) {        //绘制敌机图片        g.drawImage(enemyImage.getImage(), x, y, null);    }    public void move() {        y +=2;  //控制y轴速度    }}

Bullet类

 

  

package  P;import java.awt.Graphics;import javax.swing.ImageIcon;//创建子弹类public class Bullet {  &      

	  
	  
	  
	  
	  
	  
        

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: