⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bullet.java

📁 一个Java的塔防小游戏
💻 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 + -