// if soldier is in range of stuff but doesn't see it, sets it to null public static void resetLocations(RobotController rc) throws GameActionException { if (nearestTurretLocation != null && myLoc.distanceSquaredTo(nearestTurretLocation) <= 13 && (rc.senseRobotAtLocation(nearestTurretLocation) == null || rc.senseRobotAtLocation(nearestTurretLocation).type != RobotType.TURRET || !rc.senseRobotAtLocation(nearestTurretLocation).team.equals(enemyTeam))) { if (nearestTurretLocation.equals(currentDestination)) currentDestination = null; nearestTurretLocation = null; } if (nearestEnemyLocation != null && myLoc.distanceSquaredTo(nearestEnemyLocation) <= 13 && (rc.senseRobotAtLocation(nearestEnemyLocation) == null || !rc.senseRobotAtLocation(nearestEnemyLocation).team.equals(enemyTeam))) { if (nearestEnemyLocation.equals(currentDestination)) currentDestination = null; nearestEnemyLocation = null; } if (nearestDenLocation != null && rc.canSense(nearestDenLocation) && (rc.senseRobotAtLocation(nearestDenLocation) == null || rc.senseRobotAtLocation(nearestDenLocation).type != RobotType.ZOMBIEDEN)) { if (nearestDenLocation.equals(currentDestination)) currentDestination = null; nearestDenLocation = null; } if (nearestDistressedArchon != null && myLoc.distanceSquaredTo(nearestDistressedArchon) <= 13 && (rc.senseRobotAtLocation(nearestDistressedArchon) == null || !rc.senseRobotAtLocation(nearestDistressedArchon).team.equals(enemyTeam)) || distressedArchonTurns > 5) { if (nearestDistressedArchon != null && nearestDistressedArchon.equals(currentDestination)) currentDestination = null; nearestDistressedArchon = null; distressedArchonTurns = 0; } }
/** * Expensive method. Should call upon initialization only. * * @param rc * @throws GameActionException */ static void senseRubble(RobotController rc) throws GameActionException { int roundNum = rc.getRoundNum(); for (int x = -straightSight; x <= straightSight; ++x) { for (int y = -straightSight; y <= straightSight; ++y) { MapLocation loc = rc.getLocation().add(x, y); if (rc.canSense(loc)) { rubbleTimes[loc.x % MAP_MOD][loc.y % MAP_MOD] = roundNum; mapRubble[loc.x % MAP_MOD][loc.y % MAP_MOD] = rc.senseRubble(loc); } } } }
/** * Move and update history * * @param rc * @param dir */ static void move(RobotController rc, Direction dir) throws GameActionException { rc.move(dir); MapLocation loc = rc.getLocation(); history[historySize++] = loc; int roundNum = rc.getRoundNum(); switch (dir) { case NORTH_EAST: case EAST: case SOUTH_EAST: for (int y = -straightSight; y <= straightSight; ++y) { MapLocation senseLocation = loc.add(straightSight, y); if (rc.canSense(senseLocation)) { rubbleTimes[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = roundNum; mapRubble[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = rc.senseRubble(senseLocation); } } break; case SOUTH_WEST: case WEST: case NORTH_WEST: for (int y = -straightSight; y <= straightSight; ++y) { MapLocation senseLocation = loc.add(-straightSight, y); if (rc.canSense(senseLocation)) { rubbleTimes[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = roundNum; mapRubble[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = rc.senseRubble(senseLocation); } } break; default: break; } switch (dir) { case NORTH_WEST: case NORTH: case NORTH_EAST: for (int x = -straightSight; x <= straightSight; ++x) { MapLocation senseLocation = loc.add(x, straightSight); if (rc.canSense(senseLocation)) { rubbleTimes[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = roundNum; mapRubble[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = rc.senseRubble(senseLocation); } } break; case SOUTH_EAST: case SOUTH: case SOUTH_WEST: for (int x = -straightSight; x <= straightSight; ++x) { MapLocation senseLocation = loc.add(x, -straightSight); if (rc.canSense(senseLocation)) { rubbleTimes[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = roundNum; mapRubble[senseLocation.x % MAP_MOD][senseLocation.y % MAP_MOD] = rc.senseRubble(senseLocation); } } break; default: break; } if (robotType == RobotType.ARCHON) mapParts[loc.x % MAP_MOD][loc.y % MAP_MOD] = 0; }