java版飞机大战代码

前言

很久之前整理的小东西,这个是从我个人博客网站拷过来的地址
下面是源码

Plane

package com.trhsy.cn.plane;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.IOException;

/**
 * @ClassName Plane
 * @Description todo
 * @Author Administrator
 * @Date 2020/3/24 002415:03
 **/
public class Plane {
   
   
    /**
     * @Author fan
     * @Description //TODO 定义一个飞机
     * @Date 15:07 2020/3/24 0024
     * @Param
     * @return
     **/
    Image planeImage = null;
    public int x = 300;
    public int y = 700;
    public int lifeCount = 5;

    /**
     * @return
     * @Author fan
     * @Description //TODO 给飞机附图片
     * @Date 15:19 2020/3/24 0024
     * @Param []
     **/
    public Plane() {
   
   
        try {
   
   
            planeImage = ImageIO.read(Plane.class.getClassLoader().getResourceAsStream("images/plane.png"));
        } catch (IOException e) {
   
   
            e.printStackTrace();
        }
    }

    public void draw(Graphics g) {
   
   
        // 画飞机图片
        g.drawImage(planeImage, x, y, null);
        // 飞机移动
        this.move();
        // 血条
        if (lifeCount > 0) {
   
   
            g.setColor(Color.WHITE);
            g.fillRect(20, 80, 100, 10);
            g.setColor(Color.red);
            g.fillRect(20, 80, (100 / 5) * lifeCount, 10);
            g.setColor(Color.blue);
            g.setFont(new Font("幼圆", Font.BOLD, 30));
            g.drawString("Score:" + Play.count, 20, 60);
        }
    }

    public void move() {
   
   
        if (isUP && !isDown && !isLeft && !isRight) {
   
   
            //上
            y = y - 5;
        } else if (!isUP && isDown && !isLeft && !isRight) {
   
   
            //下
            y = y + 5;
        } else if (!isUP && !isDown && isLeft && !isRight) {
   
   
            //左
            x = x - 5;
        } else if (!isUP && !isDown && !isLeft && isRight) {
   
   
            //右
            x = x + 5;
        } else if (isUP && !isDown && isLeft && !isRight) {
   
   
            //左上
            x = x - 5;
            y = y - 5;
        } else if (!isUP && isDown && isLeft && !isRight) {
   
   
            //左下
            x = x - 5;
            y = y + 5;
        } else if (isUP && !isDown && !isLeft && isRight) {
   
   
            //右上
            x = x + 5;
            y = y - 5;
        } else if (!isUP && isDown && !isLeft && isRight) {
   
   
            //右下
            x = x + 5;
            y = y + 5;
        }
    }

    boolean isUP = false;
    boolean isDown = false;
    boolean isLeft = false;
    boolean isRight = false;

    /**
     * @return void
     * @Author fan
     * @Description //TODO 按下
     * @Date 15:21 2020/3/24 0024
     * @Param [e]
     **/
    public void keyPressed(KeyEvent e) {
   
   
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {
   
   
            isRight = true;
        } else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {
   
   
            isLeft = true;
        } else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {
   
   
            isUP = true;
        } else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) {
   
   
            isDown = true;
        }
    }

    /**
     * @return void
     * @Author fan
     * @Description //TODO 松开
     * @Date 15:24 2020/3/24 0024
     * @Param [e]
     **/
    public void keyReleased(KeyEvent e) {
   
   
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {
   
   
            isRight = false;
        } else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {
   
   
            isLeft = false;
        } else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {
   
   
            isUP = false;
        } else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) {
   
   
            isDown = false;
        }
    }

    public Rectangle getRectangle() {
   
   
        return new Rectangle(x, y, planeImage.getWidth(null), planeImage.getHeight(null));
    }

}

PlaneStatus类

package com.trhsy.cn.util;

/**
 * @ClassName PlaneStatus
 * @Description todo 0 游戏开始前 1 第一关 -1 游戏结束
 * @Author Administrator
 * @Date 2020/3/24 002415:28
 **/
public class PlaneStatus {
   
   
    public static int roleNum = 1;
    public static int playStatus = 0;
}

Power类

package com.trhsy.cn.power;

import javax.imageio.ImageIO;
import java.awt.*;
import java.io.IOException;

/**
 * @ClassName Power
 * @Description todo 血瓶类
 * @Author Administrator
 * @Date 2020/3/24 002415:29
 **/
public class Power {
   
   
    Image PowerImage = null;
    //初始位置
    int x = 20;
    int y = 0;

    public Power() {
   
   
        this.x = (int) (Math.random() * 540) + 20;
        try {
   
   
            PowerImage = ImageIO.read(Gift.class.getClassLoader()
                    .getResourceAsStream("images/power.png"));
        } catch (IOException e) {
   
   
            e.printStackTrace();
        }
    }

    public void draw(Graphics g) {
   
   
        // 画血瓶图片
        g.drawImage(PowerImage, x, y, null);
        // 血瓶移动
        y++;
    }

    public Rectangle getRectangle() 
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; } } }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无与伦比的傻

微信公众号:dasha500

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值