📄 bullet.java
字号:
package gameoflife;
import static java.lang.System.out;
import java.awt.Color;
import java.util.Random;
import java.util.Stack;
/**************************************
* Acts as a tower factory.
**************************************/
public abstract class Bullet
{
//protected Point offset;
protected int sizeInCell;
protected Point[] points;
protected Xenomorph dest;
double x_center, y_center;
double speed;
int demage;
static int FLYING = 1;
static int REACHED = 2;
int state;
public Bullet(int xc, int yc, int demage) {
//offset = new Point(xOffset, yOffset);
x_center = xc - this.sizeInCell / 2;
y_center = yc - this.sizeInCell / 2;
state = FLYING;
this.demage = demage;
}
public Point[] getPoints() {
return points;
}
public static Bullet createGunBullet(int xc, int yc, Xenomorph xeno, int demage)
{
return new GunBullet(xc, yc, xeno, demage);
}
public static Bullet createQuickBullet(int xc, int yc, Xenomorph xeno, int demage)
{
return new QuickBullet(xc, yc, xeno, demage);
}
public static Bullet createSlowerBullet(int xc, int yc, Xenomorph xeno, int demage)
{
return new SlowBullet(xc, yc, xeno, demage);
}
public static Bullet createAroundBullet(int xc, int yc, Xenomorph xeno, int demage)
{
return new AroundBullet(xc, yc, xeno, demage);
}
public void moveOneTimeSlice() {
double dx = this.dest.x_center;
double dy = this.dest.y_center;
double dist = distance(x_center, y_center, dx, dy);
//out.println(this.toString());
if(dist < speed) {
state = REACHED;
x_center = dx;
y_center = dy;
dest.remove(this);
} else {
x_center += speed / dist * (dest.x_center - x_center);
y_center += speed / dist * (dest.y_center - y_center);
}
}
abstract public Explode createExplode(int xc, int xy);
public double distance(double sx, double sy, double dx, double dy) {
return Math.sqrt( (sx - dx)*(sx - dx) + (sy - dy)*(sy - dy) );
}
public String toString() {
return "<Bullet (" + (int)this.x_center + ", " + (int)this.y_center + ")#{"+demage+"} X->" + dest + ">";
}
}
/**
*
*/
class GunBullet extends Bullet {
public GunBullet(int x, int y, Xenomorph xeno, int demage) {
super(x, y, demage);
this.sizeInCell = 1;
this.speed = 3;
this.dest = xeno;
points = new Point[] {
new Point(0,0),
};
/** x
*/
for(Point p : points) {
p.color = Color.YELLOW;
}
}
public Explode createExplode(int xc, int xy) {
return new GunExplode(xc, xy);
}
}
/**
*
*/
class QuickBullet extends Bullet
{
public QuickBullet(int x, int y, Xenomorph xeno, int demage) {
super(x, y, demage);
sizeInCell = 3;
speed = 2;
dest = xeno;
points = new Point[] {
new Point(1,0),
new Point(0,1), new Point(1,1), new Point(2,1),
new Point(1,2),
};
/** .x.
* xxx
.x.
*/
for(Point p : points) {
p.color = Color.YELLOW;
}
}
public Explode createExplode(int xc, int xy) {
return new QuickExplode(xc, xy);
}
}
class SlowBullet extends Bullet
{
public SlowBullet(int x, int y, Xenomorph xeno, int demage)
{
super(x, y, demage);
sizeInCell = 2;
speed = 2;
dest = xeno;
points = new Point[] {
new Point(0,0), new Point(1,0),
new Point(0,1), new Point(1,1),
};
/** xx
* xx
*/
for(Point p : points) {
p.color = Color.YELLOW;
}
}
public Explode createExplode(int xc, int xy) {
return new SlowExplode(xc, xy);
}
}
class AroundBullet extends Bullet
{
public AroundBullet(int x, int y, Xenomorph xeno, int demage)
{
super(x, y, demage);
sizeInCell = 0;
speed = 3;
dest = xeno;
points = new Point[0];
/**
*/
for(Point p : points) {
p.color = Color.YELLOW;
}
}
public Explode createExplode(int xc, int xy) {
return new AroundExplode(xc, xy);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -