/* * super class for any enemy in the game * a enemy can spawn at a random location along the border of the map * a enemy can also calculate the distance and angle to the player * 5-23-16 */ package tanks; public abstract class Enemy extends Living { public Enemy() { super(); } public abstract void move(); /* * enemy spawns at a random location on boarder of map. Random number 1-4 * to determine which edge of map enemy spawns. Random number code to * determine how far down or how far over player spawns on given edge. */ public void spawn(int w, int h) { int temp=(int)(Math.random()*(4)) + 1; if(temp==1) { y=0; x=(int)(Math.random()*(w)); } else if(temp==2) { y=(int)(Math.random()*(h)); x=w; } else if(temp==3) { y=h; x=(int)(Math.random()*(w+1)); } else { x=0; y=(int)(Math.random()*(h - 200)); } } /* * Used right triangle algebra to determine distance from x,y of enemy * to x,y of player. */ public double distToPlayer(RotationalElement p) { double d, a, b; a=Math.abs(x-p.x); b=Math.abs(y-p.y); d=Math.sqrt(a*a+b*b); return(d); } /* * Found lengths of imaginary triangle between player and enemy. * Then used inverse trig to determine angle. */ public double angleToPlayer(RotationalElement p) { double a, b, ang; a=(x-p.x); //doesnt have to me absolute value since using atan2 b=(y-p.y); ang=Math.atan2(b,a); //atan2 prevents divisible by zero errors ang = Math.toDegrees(ang); return(ang); } }