病毒大作战

本文介绍了一款名为'病毒大作战'的Java游戏开发,涉及多个类的设计,包括英雄机、子弹、蓝色病毒和红色病毒。游戏规则包括英雄机击打蓝色病毒得分、击打红色病毒获得奖励,如双倍火力或生命值。通过抽象类和接口实现不同对象的功能,并展示了部分关键代码片段,如子弹扩容和病毒判断是否被击中的逻辑。
摘要由CSDN通过智能技术生成

项目分析
for(int i=0 ; i<arrays.length ; i++){
bullets = Arrays.copyOf(bullets, bullets.length+bs.length); //数组扩容
System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length); //数组追加
a+=b;
a=a+b;
}
1、了解需求:病毒大作战的游戏
2、分析功能:
英雄机打 “蓝色病毒” 会得分
英雄机打 “红色病毒“ 会获取奖励(双倍火力、生命值)
3、分析对象:
英雄机
子弹
蓝色病毒
红色病毒
4、设计类
Hero --------------------------- 英雄机类
Bullet -------------------------- 子弹类
Bule ---------------------------- 蓝色病毒
Red ----------------------------- 红色病毒
FlyingObject ----------------- 飞行物类

建项目 virus -----------> 建包 com.qf.virus ------------> 建8个类、复制9张图片

1、FlyingObject 父类,声明共有的属性

package com.qf.virus;

import java.awt.image.BufferedImage;

/*
 * 飞行物类:父类
 */
public abstract class FlyingObject {
    
    /**共有的属性*/
    protected int width;  //宽
    protected int height;  //高
    protected int x;  //x坐标
    protected int y;  //y坐标
    protected BufferedImage image;  //图片
    
    /**走步方法*/
    public abstract void step() ;  //抽象方法没有方法体,要写在抽象类里
    
    /**判断病毒是否被子弹打中*/
    public boolean shootBy(Bullet b) {
        int x = b.x;  //子弹x坐标
        int y = b.y;  //子弹y坐标
        
        return x>this.x && x<this.x+width
                &&
               y>this.y && y<this.y+height;
    }

    /**判断飞行物是否越界*/
    public abstract boolean outofBounds();
    
}

2、Enemy 得分接口

package com.qf.virus;

/*
 * 得分接口
 */
public interface Enemy {
    
    /**得分方法(实现类里必须重写抽象方法)*/
    int getScore();  //抽象方法:没有方法体。接口里面的方法默认是 public abstract

}

3、Award 奖励接口

package com.qf.virus;

/*
 * 奖励接口
 */
public interface Award {
    
    //常量,接口里面默认是 public static final 修饰的
    int DOUBLE_fIRE = 0;  //双倍火力
    int LIFE = 1;  //一条生命
    
    /**获取奖励的方法*/
    int getType();  

}

4、Blue 蓝色病毒类,继承 FlyingObject 父类,实现 Enemy 得分接口

package com.qf.virus;

import java.util.Random;

/*
 * 蓝色病毒,继承 FlyingObject ,实现 Enemy 得分接口
 */
public class Blue extends FlyingObject implements Enemy{
    
    private int speed = 2;  //移动步数
    
    /**构造方法:初始化实例变量*/
    public Blue(){
        image = ShootGame.blue;  //图片
        width = image.getWidth();  //宽
        height = image.getHeight();  //高
        y = -height;  //向上为负,y坐标
        Random rand = new Random();  //随机类的对象
        x = rand.nextInt(ShootGame.WIDTH - width) ;  // 生成随机整数 0 - ShootGame.WIDTH - width 内
    }

    /**重写得分方法*/
    @Override
    public int getScore() {
        return 5;  //返回的分数
    }

    /**重写走步方法*/
    @Override
    public void step() {
        y = y + speed;  //小蓝每次向下移动2步
    }
    
    /**重写飞行物越界*/
    @Override
    public boolean outofBounds() {
        return y>ShootGame.HEIGHT;  //向下出界
    }

}

5、Red 红色病毒类,继承 FlyingObject 父类,实现 Award 奖励接口

package com.qf.virus;

import java.util.Random;

/*
 * 红色病毒,继承 FlyingObject 类,实现 Award 奖励接口
 */
public class Red extends FlyingObject implements Award{
    
    private int xSpeed = 1;  //横向移动步数
    private int ySpeed = 2;  //纵向移动步数
    private int awardType;  //奖励类型
    
    /**构造方法*/
    public Red() {
        image = ShootGame.red;
        width = image.getWidth();
        height = image.getHeight();
        y = -height;
        Random rand = new Random();
        x = rand.nextInt(ShootGame.WIDTH - width);
        awardType = rand.nextInt(2);  //生成0或1随机整数 [0,2)
    }

    /**重写获取奖励类型*/
    @Override
    public int getType() {
        return awardType;  //返回随机的奖励类型
    }

    /**重写走步方法*/
    @Override
    public void step() {
        y = y + ySpeed;  //向下飞
        x = x + xSpeed;  
        if(x<0) {
            xSpeed = 1; //向右飞
        }
        if(x>ShootGame.WIDTH-width) {
            xSpeed = -1;  //向左飞
        }
    }
    
    /**重写飞行物越界*/
    @

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

手下败酱

谢谢你的打赏!

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

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

打赏作者

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

抵扣说明:

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

余额充值