美文网首页
JAVA飞机大战(五)

JAVA飞机大战(五)

作者: 包佳奇 | 来源:发表于2018-03-06 17:14 被阅读549次

接着JAVA飞机大战(四)继续写.

一、在Hero类中英雄机和敌人碰撞的实现
1.英雄机与敌人的碰撞检测

/** 英雄机与敌人的碰撞检测 this:英雄机 other:敌人 */
    public boolean hit(FlyingObject other){
        int x1 = other.x-this.width/2; //x1:敌人的x-1/2英雄机的宽
        int x2 = other.x+other.width+this.width/2; //x2:敌人的x+敌人的宽+1/2英雄机的宽
        int y1 = other.y-this.height/2; //y1:敌人的y-1/2英雄机的高
        int y2 = other.y+other.height+this.height/2; //y:敌人的y+敌人的高+1/2英雄机的高
        int x = this.x+this.width/2; //x:英雄机的x+1/2英雄机的宽
        int y = this.y+this.height/2; //y:英雄机的y+1/2英雄机的高
        
        return x>=x1 && x<=x2
               &&
               y>=y1 && y<=y2; //x在x1与x2之间,并且,y在y1与y2之间,即为撞上了
    }

2.英雄机减命,清空火力值

    /** 英雄机减命 */
    public void subtractLife(){
        life--; //命数减1
    }
    
    /** 清空火力值 */
    public void clearDoubleFire(){
        doubleFire = 0; //火力值清零
    }

3.在ShootGame类中实现碰撞hitAction方法

    /** 英雄机与所有敌人(敌机+小蜜蜂)的碰撞 */
    public void hitAction(){
        for(int i=0;i<flyings.length;i++){ //遍历所有敌人
            FlyingObject f = flyings[i]; //获取每一个敌人
            if(hero.hit(f)){ //撞上了
                hero.subtractLife(); //英雄机减命
                hero.clearDoubleFire(); //英雄机清火力
                //将被撞的敌人与数组中的最后一个元素交换
                FlyingObject t = flyings[i];
                flyings[i] = flyings[flyings.length-1];
                flyings[flyings.length-1] = t;
                //缩容(去掉最后一个元素,即被撞的敌人对象)
                flyings = Arrays.copyOf(flyings, flyings.length-1);
            }
        }
    }

4.检测游戏结束

    /** 检测游戏是否结束 */
    public void checkGameOverAction(){ //10毫秒走一次
        if(hero.getLife()<=0){ //游戏结束时
            state=GAME_OVER;   //修改当前状态为游戏结束状态
        }
    }

二、画状态
1.在ShootGame类中设计四种成员

        public static final int START = 0;     //启动状态
    public static final int RUNNING = 1;   //运行状态
    public static final int PAUSE = 2;     //暂停状态
    public static final int GAME_OVER = 3; //游戏结束状态
    private int state = START; //当前状态(默认为启动状态)

2.调用paint方法画图

/** 画状态 */
    public void paintState(Graphics g){
        switch(state){ //根据当前状态画不同的图
        case START:
            g.drawImage(start,0,0,null);
            break;
        case PAUSE:
            g.drawImage(pause,0,0,null);
            break;
        case GAME_OVER:
            g.drawImage(gameover,0,0,null);
            break;
        }
    }

3.在监听器中根据鼠标事件改变状态

        MouseAdapter l = new MouseAdapter(){
            /** 处理mouseMoved()鼠标移动事件 */
            public void mouseMoved(MouseEvent e){
                if(state==RUNNING){ //运行状态下执行
                    int x = e.getX(); //获取鼠标的x坐标
                    int y = e.getY(); //获取鼠标的y坐标
                    hero.moveTo(x, y); //英雄机随着鼠标动
                }
            }
            /** 处理mouseClicked()鼠标点击事件 */
            public void mouseClicked(MouseEvent e){
                switch(state){ //根据不同状态做不同处理
                case START:        //启动状态时
                    state=RUNNING; //修改为运行状态
                    break;
                case GAME_OVER:  //游戏结束状态时
                    score = 0; //清理现场
                    hero = new Hero();
                    flyings = new FlyingObject[0];
                    bullets = new Bullet[0];
                    state=START; //修改为启动状态
                    break;
                }
            }
            /** 处理mouseExited()鼠标移出事件 */
            public void mouseExited(MouseEvent e){
                if(state==RUNNING){ //运行状态时
                    state=PAUSE;    //变为暂停状态
                }
            }
            /** 处理mouseEntered()鼠标移入事件 */
            public void mouseEntered(MouseEvent e){
                if(state==PAUSE){  //暂停状态时
                    state=RUNNING; //变为运行状态
                }
            }
            
        };

相关文章

  • JAVA飞机大战(五)

    接着JAVA飞机大战(四)继续写. 一、在Hero类中英雄机和敌人碰撞的实现1.英雄机与敌人的碰撞检测 2.英雄机...

  • Java飞机大战

    FlyingObject,作为飞行物的父类,这里的飞行物指的就是敌机,小蜜蜂,子弹,英雄机 敌机类,图片取自Sho...

  • Java+swing版飞机大战

    Java小游戏实训——飞机大战 一、实验目的 使用Java+swing实现飞机大战小游戏 二、实验要求 1.掌握J...

  • 游戏编写进行时

    经过了将近20天的努力,我编写的飞机大战终于完成了,从对java一点也不懂,到把飞机大战编写完成,里面是java对...

  • JAVA飞机大战(二)

    接着JAVA飞机大战(一)继续写,在之前的文章中,已经创建好了要使用的类、接口、以及主程序,接下来需要把对象显示在...

  • JAVA飞机大战(四)

    接着JAVA飞机大战(三)继续写. 一、实现删除越界的敌人和子弹1.在Flyingobject父类定义抽象方法,检...

  • JAVA飞机大战(三)

    接着JAVA飞机大战(二)继续写,在之前的文章中,已经创建好了窗口,可以显示出来英雄机,以及飞行物的显示.接下来实...

  • JAVA飞机大战(一)

    分析:飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应...

  • Python打飞机(飞机大战)

    敌机和主机 发子弹 连发子弹 飞机大战(加音乐代码) 飞机大战代码: 精灵组 飞机大战敌机 飞机大战背景 上下左右...

  • java游戏制作总结——飞机大战

    用Java制作游戏之前,一定要做到方向明确,思路清晰。首先确定自己需要用到几个类,类里的内容大致是什么,用脑图进行...

网友评论

      本文标题:JAVA飞机大战(五)

      本文链接:https://www.haomeiwen.com/subject/khkrfftx.html