package aimFire; import java.awt.Color; import java.awt.Graphics; import java.util.Random; public class Target implements Runnable{ private AimFire a; private Graphics g; private int radius; private int xLocation; private int yLocation; private int xDirection; private int yDirection; private int xSpeed; private int ySpeed; public Target(AimFire driver, Graphics graphics, Random rand){ this(driver, graphics, 3*(rand.nextInt(9)+ 2), rand.nextInt(1 + AimFire.MAX_X - 60) + 30 + AimFire.MIN_X, rand.nextInt(1 + AimFire.MAX_Y - 60 - AimFire.MIN_Y) + 30 + AimFire.MIN_Y, rand.nextInt(3)-1, rand.nextInt(3)-1, rand.nextInt(5)+1, rand.nextInt(5)+1); if(xDirection == 0 && yDirection == 0){ if(rand.nextInt(2)==0){ if(rand.nextInt(2)==0){ xDirection = 1; }else{ xDirection = -1; } }else{ if(rand.nextInt(2)==0){ yDirection = 1; }else{ yDirection = -1; } } } } public Target(AimFire driver, Graphics graphics, int r, int x, int y, int xDir, int yDir, int xSp, int ySp){ a = driver; g = graphics; radius = r; xLocation = x; yLocation = y; xDirection = xDir; yDirection = yDir; xSpeed = xSp; ySpeed = ySp; } public void run() { if(g!=null){ paint(); int count = 1; while(xLocation >= AimFire.MIN_X && xLocation <= AimFire.MAX_X && yLocation >= AimFire.MIN_Y && yLocation <= AimFire.MAX_Y){ unpaint(); if(count % (AimFire.SPEED_CONSTANT/xSpeed) == 0){ xLocation += xDirection; } if(count % (AimFire.SPEED_CONSTANT/ySpeed) == 0){ yLocation += yDirection; } paint(); count++; } unpaint(); a.notifyOfDeath(this); } } public int hit(int x, int y){ if(Math.abs(x - xLocation) < radius/3 && Math.abs(y - yLocation) < radius/3){ xLocation = -99; return 3; }else if(Math.abs(x - xLocation) < 2*radius/3 && Math.abs(y - yLocation) < 2*radius/3){ xLocation = -99; return 2; }else if(Math.abs(x - xLocation) < radius && Math.abs(y - yLocation) < radius){ xLocation = -99; return 1; }else{ return 0; } } private void paint(){ g.setColor(Color.red); g.fillOval(xLocation-radius, yLocation-radius, 2*radius, 2*radius); g.setColor(Color.white); g.fillOval(xLocation-2*radius/3, yLocation-2*radius/3, 4*radius/3, 4*radius/3); g.setColor(Color.red); g.fillOval(xLocation-radius/3, yLocation-radius/3, 2*radius/3, 2*radius/3); } private void unpaint(){ g.setColor(Color.black); g.fillOval(xLocation-radius, yLocation-radius, 2*radius, 2*radius); } }