ammunition.java

来自「坦克小战网络版」· Java 代码 · 共 56 行

JAVA
56 行
字号
import java.awt.*;

public class ammunition{
	private vector direction3D, centre, cross, normal,gravity;
	public double speed;
	public surface Surface;
	private int time;

	public ammunition(surface Surface, vector direction3D, vector centre, vector cross, double speed){
		this.direction3D = direction3D.unit();
		this.speed = speed;
		this.centre = centre;
		this.Surface = Surface;
		this.cross = cross;
		normal = direction3D.cross(cross).unit();
		gravity = new vector(0, 0, -0.5);
	}

	public void fly(){
		vector c = centre;
		centre = centre.add(direction3D.unit().scale(speed)).add(gravity.scale(0.5*time));
		direction3D = centre.add(c.scale(-1)).unit();
		normal = direction3D.cross(cross).unit();
		time++;
	}

	public boolean Crashed(T3D P1, T3D P2){
		return Surface.evaluate(centre.a, centre.b) >= centre.c
					||  P1.tower.centre.subtract(centre).length() <= 15
						|| P2.tower.centre.subtract(centre).length() <= 15;
	}

	public void draw(Graphics g){
		g.setColor(new Color(144, 84, 39));
		g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(normal.scale(1)).add(cross.scale(1)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).getY(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(cross.scale(1)).getX(), centre.add(cross.scale(1)).getY(), centre.add(direction3D.scale(5)).add(cross.scale(1)).getX(), centre.add(cross.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(cross.scale(1)).getX(), centre.add(cross.scale(1)).getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
		g.drawLine(centre.add(normal.scale(1)).getX(), centre.add(normal.scale(1)).getY(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.getX(), centre.getY(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getX(), centre.add(normal.scale(1)).add(cross.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).add(cross.scale(1)).getX(), centre.add(cross.scale(1)).add(direction3D.scale(5)).getY());
		g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());
		g.drawLine(centre.getX(), centre.getY(), centre.add(direction3D.scale(5)).getX(), centre.add(direction3D.scale(5)).getY());

		g.setColor(Color.gray);
		vector v = new vector(centre.a, centre.b, Surface.evaluate(centre.a, centre.b));
		g.fillOval(v.getX()+1, v.getY()+1, 3, 3);
	}

	public explosion explode(){
		vector v = new vector(centre.a, centre.b, Surface.evaluate(centre.a, centre.b));
		return new explosion(v, new vector(Surface.fx(centre.a, centre.b), Surface.fy(centre.a, centre.b)));
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?