飞机大战项目

本文档详细介绍了飞机大战游戏的各个组成部分,包括抽象类FlyingObject作为基础,Airplane、BigAirplane和Bee等不同类型的飞机,以及Award接口定义奖励类型,Score接口处理得分,Sky、Hero、Bullet和World类分别表示天空、英雄飞机、子弹和游戏世界。通过这些组件,构建了一个完整的飞机大战游戏框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

飞机大战

抽象类FlyingObject

小飞机Airplane类

大飞机BigAirplane类

奖励机Bee类

奖励类型Award接口

获得分数Score接口

天空Sky类

英雄级Hero类

子弹Bullet类

游戏开始World类


飞机大战


抽象类FlyingObject

package cn.tedu.shoot;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

//飞机大战的父类飞行物
public abstract class FlyingObject {
	// 定义三种状态常量:活着、死了、消失
	public static final int LIFE = 0;
	public static final int DEAD = 1;
	public static final int REMOVE = 2;
	// 定义当前对象的状态属性
	protected int state = LIFE;// 初始默认活着

//所有子类共有的属性和方法、
	protected int width;
	protected int height;
	protected int x;
	protected int y;

	// 小敌机,大敌机,奖励机使用的构造
	public FlyingObject(int width, int height) {
		this.width = width;
		this.height = height;
		// 所有敌级的y轴都是负高度,因为出现在屏幕上方
		y = -height;
		Random ran = new Random();
		// x轴是从左侧开始到屏幕的宽度减去低级的宽度的随机数
		x = ran.nextInt(400 - this.width);
	}

	// 子弹,天空,英雄机的构造

	public FlyingObject(int width, int height, int x, int y) {
		this.width = width;
		this.height = height;
		this.x = x;
		this.y = y;
	}

	public void show() {
		System.out.println("宽:" + width + ",高" + height);
		System.out.println("x:" + x + ",y:" + y);
	}

	// 读取图片,将项目中保存的图片,转换成java内存的图片
	public static BufferedImage readImage(String fileName) {
		try {
			// 根据文件名将图片获取并赋值给img
			BufferedImage img = ImageIO.read(FlyingObject.class.getResource(fileName));
			return img;
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}

	}

	// 定义一个单位移动的抽象方法
	public abstract void step();

	// 判断状态的方法
	// 判断是否活着
	public boolean isLife() {
		return state == LIFE;
	}

	// 判断是否死了
	public boolean isDead() {
		return state == DEAD;
	}

	// 判断是否消失
	public boolean isRemove() {
		return state == REMOVE;
	}

	// 获得图片的抽象方法
	public abstract BufferedImage getImage();

	// 绘制图片到窗体
	public void paintObject(Graphics g) {
		g.drawImage(getImage(), x, y, null);
	}

	// 判断出界的方法
	public boolean isOutOfBounds() {

		return y > World.HEIGHT;
	}

	// 判断碰撞的方法
	// 判断的是this(当前对象)是否和参数中的飞行物碰撞了
	public boolean hit(FlyingObject f) {
		// this.想象为子弹,f想象为一架敌机
		int x1 = f.x - this.width;// 左侧点
		int x2 = f.x + f.width;// 右侧点

		int y1 = f.y - this.height;// 上方点
		int y2 = f.y + f.height;// 下方点

		return this.x > x1 && this.x < x2 && this.y > y1 && this.y < y2;

	}

	// 改变飞行物状态为DEAD的方法
	public void goDead() {
		state = DEAD;
	}

}

小飞机Airplane类

package cn.tedu.shoot;

import java.awt.image.BufferedImage;

public class Airplane extends FlyingObject implements Score{
	// 保存小敌机相关图片的数组
	private static BufferedImage[] images;
	static {
		// 初始化图片数组
		images = new BufferedImage[5];
		// 第一张图是小敌机图
		images[0] = readImage("airplane0.png");
		// 循环加载4张爆炸图
		for (int i = 1; i < images.length; i++) {
			images[i] = readImage("bom" + i + ".png");
		}
	}

	// 速度
	private int step;

	public Airplane() {
		super(48, 50);
		step = 5;
	}

	public void show() {
		super.show();
		System.out.println("速度:" + step);
	}

	public void step() {
		// 小敌机向下移动
		y += step;
	}

	int index = 1;

	public BufferedImage getImage() {
		BufferedImage img = null;
		// 如果活着返回第一张图
		if (isLife()) {
			img = images[0];
		} else if (isDead()) {
			// 如果死了获得爆炸图片
			img = images[index];
			index++;
			//如果爆炸完毕,将小飞机设置为消失
			if(index==images.length) {
				state=REMOVE;
			}
		}
		return img;
	}

	public int getScore() {
		//击中小敌机得1分
		return 1;
	}
}

大飞机BigAirplane类


                
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值