From 500506da780356b65db8cc2301c44c85469899d4 Mon Sep 17 00:00:00 2001 From: androidmage Date: Mon, 11 Jan 2016 20:48:32 -0500 Subject: [PATCH] Archons also try to escape where it will be safe --- RobotPlayer.java | 44 +++++++++++++------------------------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/RobotPlayer.java b/RobotPlayer.java index b26b279..86f8316 100644 --- a/RobotPlayer.java +++ b/RobotPlayer.java @@ -869,7 +869,7 @@ public static void escapeEnemy(){ if(enemies == null){ return; } - ArrayList dangerousEnemies = dangerousRobotLocation(enemies); + ArrayList dangerousEnemies = dangerousRobots(enemies, rc.getLocation()); if(dangerousEnemies == null){ return; } @@ -877,8 +877,15 @@ public static void escapeEnemy(){ for(RobotInfo dangerousEnemy: dangerousEnemies){ Direction escapeDirection = calculateEscapeDirection(dangerousEnemy.location); if(rc.canMove(escapeDirection)){ - System.out.println("success"); rc.move(escapeDirection); + return; + } + } + for(Direction possibleDirection: DIRECTIONS){ + dangerousEnemies = dangerousRobots(enemies, rc.getLocation().add(possibleDirection)); + if(rc.canMove(possibleDirection) && dangerousEnemies == null){ + rc.move(possibleDirection); + return; } } } @@ -896,7 +903,7 @@ public static RobotInfo[] locateEnemy(){ return null; } - public static ArrayList dangerousRobotLocation(RobotInfo[] enemies){ + public static ArrayList dangerousRobots(RobotInfo[] enemies, MapLocation location){ ArrayList dangerousEnemies = new ArrayList(); for(RobotInfo enemy: enemies){ if(enemy.location.distanceSquaredTo(rc.getLocation()) <= enemy.type.attackRadiusSquared){ @@ -905,36 +912,11 @@ public static ArrayList dangerousRobotLocation(RobotInfo[] enemies){ } return dangerousEnemies; } - + public static Direction calculateEscapeDirection(MapLocation enemyLocation){ - MapLocation myLocation = rc.getLocation(); - int xDifference = enemyLocation.x - myLocation.x; - int yDifference = enemyLocation.y - myLocation.y; - if(xDifference>0 && yDifference>0){ - return Direction.NORTH_WEST; - } - else if(xDifference>0 && yDifference<0){ - return Direction.SOUTH_WEST; - } - else if(xDifference<0 && yDifference<0){ - return Direction.SOUTH_EAST; - } - else if(xDifference<0 && yDifference>0){ - return Direction.NORTH_EAST; - } - else if(xDifference>0){ - return Direction.WEST; - } - else if(xDifference<0){ - return Direction.EAST; - } - else if(yDifference>0){ - return Direction.NORTH; - } - return Direction.SOUTH; - + Direction enemyDirection = rc.getLocation().directionTo(enemyLocation); + return enemyDirection.opposite(); } - public static void attackWeakestEnemy(){ MapLocation weakestEnemyLocation = locateWeakestEnemy(); if(weakestEnemyLocation==null){