import java.util.*;
import robocode.*;
/**
* @author Matthew Chun-Lum
*
*/
public class BackAndForthHunter extends Robot {
public HashMap<String, Double> enemyYCoordinates;
public void run() {
enemyYCoordinates = new HashMap<String, Double>();
setAdjustRadarForGunTurn(false);
setAdjustGunForRobotTurn(true);
moveToWestWall();
turnGunRight(90 - getGunHeading());
while(true) {
if(getX() > 75)
moveToWestWall();
if(getGunHeading() != 90)
turnGunRight(90 - getGunHeading());
moveUp();
moveDown();
}
}
public void moveToClosestEnemy() {
double myY = getY();
double closest = 5000;
for(Double d : enemyYCoordinates.values()) {
if(Math.abs(closest) > Math.abs(myY - d)) {
closest = myY - d;
}
}
if(closest > 0) {
moveDown();
} else {
moveUp();
}
}
public void onScannedRobot(ScannedRobotEvent e) {
if(!enemyYCoordinates.containsKey(e.getName())) {
double y = getY() + (EpgyUtil.cos(e.getBearing() + getHeading()) * e.getDistance());
enemyYCoordinates.put(e.getName(), y);
}
double velocity = getVelocity();
stop(true);
fire(3.0);
fire(3.0);
fire(3.0);
}
public void onRobotDeath(RobotDeathEvent e) {
enemyYCoordinates.remove(e.getName());
}
public void moveUp() {
turnTo(0);
ahead(getBattleFieldHeight());
}
public void moveDown() {
ahead(-getY());
}
public void moveToWestWall() {
turnTo(270);
ahead(getX());
}
public void onHitWall(HitWallEvent e) {
stop();
}
public void onHitRobot(HitRobotEvent e) {
moveUp();
}
public void turnTo(double angle) {
turnRight(angle - getHeading());
}
}