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

JAVA飞机大战(三)

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

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

一、飞行物(敌机+小蜜蜂+子弹+英雄机)走一步
1.在FlyingObject类中添加抽象方法step();,同时类也变成抽象类
注:因为每个飞行物的移动方式不同,所以定义抽象方法

public abstract class FlyingObject {
    /** 飞行物走一步 */
    public abstract void step();
}

2.在Airplane,Bee,Bullet,Hero类中重写step()方法

    /** 重写step()小敌机走一步 */
    public void step(){
        y+=speed; //y+(向下)
    }
/** 重写step()小蜜蜂走一步 */
    public void step(){
        x+=xSpeed; //x+(向左或向右)
        y+=ySpeed; //y+(向下)
        if(x>=ShootGame.WIDTH-this.width){ //若蜜蜂的x>=(窗口宽-蜜蜂宽)时,xSpeed为负,即向左
            xSpeed=-1;
        }
        if(x<=0){ //若x<=0时,xSpeed为正,即向右
            xSpeed=1;
        }
    }
    /** 重写step()子弹走一步 */
    public void step(){
        y-=speed; //y-(向上)
    }
/** 重写step()英雄机走一步 */
    public void step(){ //10毫秒走一次
        image = images[index++/10%images.length]; //每100毫秒切换一次
}

3.在ShootGame的主程序的action()方法中调用飞行物走一步的方法

    /** 飞行物(敌机+小蜜蜂+子弹+英雄机)走一步 */
    public void stepAction(){ //10毫秒走一次
        hero.step(); //英雄机走一步
        for(int i=0;i<flyings.length;i++){ //遍历所有敌人
            flyings[i].step(); //敌人走一步
        }
        for(int i=0;i<bullets.length;i++){ //遍历所有子弹
            bullets[i].step(); //子弹走一步
        }
    }

二、子弹入场的实现
1.在Hero类中添加生成子弹的方法

    /** 英雄机发射子弹--生成子弹对象 */
    public Bullet[] shoot(){
        int xStep = this.width/4; //1/4英雄机的宽
        int yStep = 20; //固定的y值
        if(doubleFire>0){ //双倍
            Bullet[] bs = new Bullet[2]; //2发子弹
            bs[0] = new Bullet(this.x+1*xStep,this.y-yStep); //x:英雄机x+1/4英雄机的宽  y:英雄机的y-yStep
            bs[1] = new Bullet(this.x+3*xStep,this.y-yStep); //x:英雄机x+3/4英雄机的宽  y:英雄机的y-yStep
            doubleFire-=2; //发一次双倍,则火力值减2
            return bs;
        }else{ //单倍
            Bullet[] bs = new Bullet[1]; //1发子弹
            bs[0] = new Bullet(this.x+2*xStep,this.y-yStep); //x:英雄机x+2/4英雄机的宽  y:英雄机的y-yStep
            return bs;
        }
    }
  1. 在ShootGame主程序类中实现子弹入场
int shootIndex = 0; //子弹入场计数
    /** 子弹入场(英雄机发射子弹) */
    public void shootAction(){ //10毫秒走一次
        shootIndex++; //每10毫秒增一次
        if(shootIndex%30==0){ //每300(10*30)毫秒走一次
            Bullet[] bs = hero.shoot(); //获取英雄机发射出来的子弹对象
            bullets = Arrays.copyOf(bullets,bullets.length+bs.length); //扩容(bs有几个元素则扩大几个容量)\
            System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length); //数组的追加
        }
    }

3.在action()中的run()方法中调用shootAction();

三、英雄机的移动
1.在Hero类中定义moveTo带参方法

/** 英雄机随着鼠标动 x:鼠标的x坐标 y:鼠标的y坐标*/
    public void moveTo(int x,int y){
        this.x = x-this.width/2;  //英雄机的x=鼠标的x-1/2英雄机的宽
        this.y = y-this.height/2; //英雄机的y=鼠标的y-1/2英雄机的高
    }

2.在ShootGame类中添加监听器并处理鼠标移动事件

import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
 public void action(){
        MouseAdapter l = new MouseAdapter(){
        /** 处理mouseMoved()鼠标移动事件 */
        public void mouseMoved(MouseEvent e){

                int x = e.getX(); //获取鼠标的x坐标
                int y = e.getY(); //获取鼠标的y坐标
                hero.moveTo(x, y); //英雄机随着鼠标动
        
        }
        };
        this.addMouseListener(l); //处理鼠标操作事件
        this.addMouseMotionListener(l); //处理鼠标滑动事件
}

相关文章

  • JAVA飞机大战(三)

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

  • Java飞机大战

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

  • Java+swing版飞机大战

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

  • 游戏编写进行时

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

  • JAVA飞机大战(二)

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

  • JAVA飞机大战(五)

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

  • JAVA飞机大战(四)

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

  • JAVA飞机大战(一)

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

  • Python打飞机(飞机大战)

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

  • CreatorPrimer|飞机大战(三)

    《飞机大战(一)》介绍摄像机实现地图的滚动和子弹组件的设计;在此基础上《飞机大战(二)》增加了子弹的角度直线发射以...

网友评论

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

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