java飞机大战完整代码暨设计思路

本文档详细介绍了Java实现的飞机大战游戏的设计思路和主要类的实现,包括主机类Hero、小型敌机类AirPlane、大型敌机类BigAirplane、奖励类Bee、子弹类Bullet以及背景类Sky等。每个类都有其特定的功能和行为,如主机的双倍火力、敌机的移动和得分、奖励的获取等。此外,还涉及到了游戏状态管理、对象的生命周期和碰撞检测等关键功能。
摘要由CSDN通过智能技术生成

主机类

/**

  • 主机

  • @author Administrator
    */
    public class Hero extends FlyingObiect{
    private static BufferedImage[] images;
    static{
    images = new BufferedImage[2];
    for (int i = 0; i < images.length; i++) {
    images[i] = loadImage(“hero” + i + “.png”);
    }
    }
    private int life ;
    private int doubleFire;

    public Hero() {
    super(97, 124, 140, 400);
    life = 6;
    doubleFire = 0;
    }
    public void moveTo(int x,int y){
    this.x = x - this.width/2;
    this.y = y - this.height/2;
    }
    public void step(){
    System.out.println(“图片的切换”);
    }
    @Override
    public BufferedImage getImage() {
    return images[0];
    }
    /*英雄机产生子弹/
    public Bullet[] shoot() {
    int xStep = this.width/4;
    int yStep = 15;
    if (doubleFire >0) {//双倍火力
    Bullet[] bs = new Bullet[2];
    bs[0] = new Bullet(this.x + xStep * 1, this.y - yStep);
    bs[1] = new Bullet(this.x + xStep * 3, this.y - yStep);
    return bs;
    }else {
    Bullet[] bs = new Bullet[1];
    bs[0] = new Bullet(this.x + xStep * 2, this.y - yStep);
    return bs;
    }
    }
    public void addDoubleFire() {
    doubleFire +=10;
    }
    public void addLife() {
    life++;
    }
    public int getLife() {
    return life;
    }
    public void substractLife() {
    life–;
    }
    public void clearDoublieFire() {
    // TODO Auto-generated method stub
    doubleFire = 0;
    }
    }

小型敌机类

public class AirPlane extends FlyingObiect implements Enemy{
private static BufferedImage[] images;
static{
images = new BufferedImage[5];
for (int i = 0; i < images.length; i++) {
images[i] = loadImage(“airplane” + i + “.png”);
}
}
//成员变量
private int speed;//速度
//方法
/构造方法/
public AirPlane () {
super(49, 36);
//小敌机出现的位置
this.speed = 2;
}
/移动/
public void step(){
this.y += speed;
}
//得到图片
int index = 1;
@Override
public BufferedImage getImage() {
if (isLife()) {
return images[0];
} else if(isDead()){//图片切换
BufferedImage img = images[index++];
if (index == images.length) {
state = REMOVE;
}
return img;
}
return null;
}
/*得分奖励/
@Override
public int getScore() {
return 1;
}
}

大型敌机

public class BigAirplane extends FlyingObiect implements Enemy{
private static BufferedImage[] images;
static{
images = new BufferedImage[5];
for (int i = 0; i < images.length; i++) {
images[i] = loadImage(“bigplane” + i + “.png”);
}
}
//成员变量
private int speed;//速度
//方法
/构造方法/
public BigAirplane () {
super(98, 72);
this.speed = 2;
}
/移动/
public void step(){
this.y += speed;
}
int index = 1;
@Override
public BufferedImage getImage() {
if (isLife()) {
return images[0];
} else if(isDead()){//图片切换
BufferedImage img = images[index++];
if (index == images.length) {
state = REMOVE;
}
return img

package cn.feike.shoot; import java.awt.Graphics; import java.awt.image.BufferedImage; public abstract class FlyingObject { protected double x;//物体的x坐标 protected double y;//物体的y坐标 protected double width;//物体的宽 protected double heigth;//物体的高 protected BufferedImage image;//当前正在显示的图片 protected int index = 0;//图片数组下标序号,子类中使用 protected double step;//飞行物每次(1/24秒)移动的距离 protected int life;//命 protected int state;//飞行物的状态 public static final int ACTIVE=0;//活着状态 public static final int DEAD=1;//死亡状态 public static final int REMOVE=2;//回收状态 //默认构造器 public FlyingObject() { life = 1; state = ACTIVE; } //有参构造器 public FlyingObject(double width,double heigth){ this();//调用无参数的构造器,必须写在第一行. this.x = (int)(Math.random()*(480-width)); this.y = -heigth; this.width = width; this.heigth = heigth; step = Math.random()*3+0.8;//初始化step为[0.8,3.8)之间的数 } //重写toString方法 public String toString() { return x+","+y+","+width+","+heigth+","+image; } //重写paint,方便子类对象的使用 public void paint(Graphics g) { g.drawImage(image, (int)x, (int)y, null);//绘制图片 } //飞行物移动的move方法 /** * 重构了move,方法实现播放销毁动画功能 */ public void move(){ if(state == ACTIVE){ y += step; return ; } if(state == DEAD){ //从子类对象中获取下一张照片 BufferedImage img = nextImage(); if(img == null){ state = REMOVE;//没有照片则回收 }else{ image = img;//否则把子类的图片传给image } //越界则销毁 if(y>=825){ state = REMOVE; } } } /** * 子类中必须有的方法,返回下一个要播放的照片引用, * 如果返回null表示没有可播放的照片了. */ protected abstract BufferedImage nextImage(); /** * 飞行物被打了一下 */ public void hit(){ if(life>0){ life--; } if(life==0){ state = DEAD; } } /** * 碰撞检测的方法 * 检测物体的位置是否在碰撞的范围内. * (子弹是否在飞行物的碰撞范围内) */ public boolean duang(FlyingObject obj){ //this(x,y,w,h) //obj(x,y,w,h) double x1 = this.x - obj.width; double x2 = this.x + this.width; double y1 = this.y - obj.width; double y2 = this.y + this.heigth; return x1<obj.x&&obj;.x<x2&&y1;<obj.y&&obj;.y<y2; } /** 重构FlyingObject,添加了状态检查方法 */ /** 检查飞行物死了吗 */ public boolean isDead(){ return state == DEAD; } /** 检查飞行物是否活动的 */ public boolean isActive(){ return state == ACTIVE; } /** 检查飞行是否可以被删除*/ public boolean canRemove(){ return state == REMOVE; } /** 飞行物添加"去死"方法*/ public void goDead(){ if(isActive()){ state = DEAD; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值