JAVA小游戏——飞机大战

游戏简介

还记得风靡一时的飞机大战游戏么,不如现在用Java上手写一个玩 :D
操作简易,鼠标控制英雄机的移动。
击毁不同种类的飞行物会得到相应分数,击落蜜蜂可能加命或者由单发子弹变为双发。
运行页面如图(单击页面开始游戏)

游戏素材:戳这里

游戏结构

World主类:包含游戏框架并在main方法中实现各种功能。
FlyingObject类:所有飞行物都继承于此类。
HeroPlane类:设计英雄机的属性和方法。
BigAirplane、SmallAirplane类:敌机的属性和方法。
Bee类:蜜蜂的属性和方法。
Sky类:游戏背景的移动。
Bullet类:子弹的属性和方法。

游戏源码

World类

import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class World extends JPanel{
   
   
    public static final int WIDTH = 400;
    public static final int HEIGHT = 700;
    private Sky sky = new Sky();
    private HeroPlane hero = new HeroPlane();
    private FlyingObject[] enemies = {};
    private Bullet[] bullets = {};

    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;
    //状态页面图片初始化
    private static BufferedImage start;
    private static BufferedImage pause;
    private static BufferedImage gameover;
    static{
        start = FlyingObject.loadImage("start.png");
        pause = FlyingObject.loadImage("pause.png");
        gameover = FlyingObject.loadImage("gameover.png");
    }

    //创建随机敌人对象
    public FlyingObject nextOne(){
        Random rand = new Random();
        int type = rand.nextInt(20);
        if(type<4){
            return new Bee(60,50);
        }else if(type<15){
            return new SmallAirplane(49,36);
        }else{
            return new BigAirplane(66,99);
        }
    }

    //限定敌人入场间隔时间
    int enterIndex = 0;
    int shootIndex2 = 0;
    public void enterAction(){
        enterIndex++;
        if(enterIndex%40==0){
            FlyingObject obj = nextOne();

            enemies = Arrays.copyOf(enemies, enemies.length+1);
            enemies[enemies.length-1] = obj;
        }
    }

    //实现飞行物走步
    public void stepAction(){
        sky.step();
        for(int i=0;i<enemies.length;i++){
            enemies[i].step();
        }
        for(int i=0;i<bullets.length;i++){
            bullets[i].step();
        }
    }

    //实现子弹入场
    int shootIndex = 0;
    public void shootAction(){
        shootIndex++;
        if(shootIndex%30==0){
            Bullet[] bs = hero.shoot();
            bullets = Arrays.copyOf(bullets,bullets.length+bs.length);
            System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length);
        }
    }

    //删除越界对象
    public void outOfBoundsAction(){
        int index = 0;
        FlyingObject[] enemyLives = new FlyingObject[enemies.length];
        for(int i=0;i<enemies.length;i++){
            FlyingObject e = enemies[i];
            if(!e.outOfBounds()&&!e.isRemove()){
                enemyLives[index++] = e;
            }
        }
        enemies = Arrays.copyOf(enemyLives, index);

        index = 0;
        Bullet[] bulletLives = new Bullet[bullets.length];
        for(int i=0;i<bullets.length;i++){
            Bullet b = bullets[i];
            if(!b.outOfBounds()&&!b.isRemove()){
                bulletLives[index++] = b;
            }
        }
        bullets = Arrays.copyOf(bulletLives, index);
    }

    //根据击中的敌人类型判断奖励类型
    int score = 0;
    public void bangAction(){
        for(int i=0;i<bullets.length;i++){
            Bullet b = bullets[i];
            
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值