项目分析
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; //向左飞
}
}
/**重写飞行物越界*/
@