public Direction flee() throws GameActionException { cur = rc.getLocation(); // (r+2)^2 ~= r^2 + 20 if r ~ 4 if (m.inDangerRadius(cur)) { // too close to splash range return m.moveInDir(c.enemyhq.directionTo(cur)); } Robot[] en = sensor.getBots(Sensor.ATTACK_RANGE_ENEMIES); if (en.length > 0) { return fleeWeighted(en); } // en= sensor.getBots(Sensor.SENSE_RANGE_ENEMIES); // if (en.length > 0) { // return fleeWeighted(en); // } // no enemies return Direction.OMNI; }
public Direction fleeClosest(Robot[] en) throws GameActionException { MapLocation min = rc.senseLocationOf(en[0]); int minDist = min.distanceSquaredTo(cur); for (int i = 1; i < en.length; i++) { MapLocation next = rc.senseLocationOf(en[i]); int dist = next.distanceSquaredTo(cur); if (minDist < dist) { min = next; minDist = dist; } } Direction desired = cur.directionTo(min); return m.moveInDir(desired); }
public Direction fleeWeighted(Robot[] en) throws GameActionException { Robot[] allies = sensor.getBots(Sensor.SENSE_RANGE_ALLIES); int yDir = 0; int xDir = 0; int numEnemies = en.length; int numAllies = allies.length; for (Robot e : en) { MapLocation eLoc = rc.senseRobotInfo(e).location; xDir -= eLoc.x; yDir -= eLoc.y; } for (Robot a : allies) { MapLocation aLoc = rc.senseRobotInfo(a).location; xDir += aLoc.x; yDir += aLoc.y; } xDir += numEnemies * cur.x - numAllies * cur.x; yDir += numEnemies * cur.y - numAllies * cur.y; Direction desired = cur.directionTo(cur.add(xDir, yDir)); return m.smartMove(desired); }