public static void run(RobotController theRC) { rc = theRC; // These don't change so get them once and use the local variable (performance) myType = rc.getType(); myTeam = rc.getTeam(); enemyTeam = myTeam.opponent(); myHQ = rc.senseHQLocation(); myLoc = rc.getLocation(); senseRange = myType.sensorRadiusSquared; attackRange = myType.attackRadiusSquared; maxRounds = rc.getRoundLimit(); if (myType == RobotType.MISSILE) runMissile(); if (myType.canMove()) { bfs = new Bfs(rc); // We need to check the breadth first search results to move optimally } threats = new Threats(rc); if (myType == RobotType.HQ) runHQ(); else if (myType == RobotType.TOWER) runTower(); else if (myType.isBuilding) runBuilding(); else if (myType.canBuild()) runBeaver(); else if (myType.canMine()) runMiner(); // Includes Beavers else if (myType == RobotType.DRONE) runDrone(); else if (myType.canAttack() || myType == RobotType.LAUNCHER) runCombat(); else runOther(); }
// Move towards enemy HQ if we can attack private static void doAdvanceMove() { try { if (myType == RobotType.COMMANDER && rc.hasLearnedSkill(CommanderSkillType.FLASH) && rc.getFlashCooldown() == 0) flashTowards(threats.enemyHQ, false); } catch (GameActionException e) { System.out.println("Flash exception"); // e.printStackTrace(); } if (rc.isCoreReady()) { Direction dir = null; if (myType.canAttack() || (myType == RobotType.LAUNCHER && Clock.getRoundNum() > 550)) { if (myType != RobotType.DRONE) dir = bfs.readResult(myLoc, threats.enemyHQ); if (dir == null) dir = myLoc.directionTo(threats.enemyHQ); rc.setIndicatorString(2, "Advancing " + dir); } else { dir = myLoc.directionTo(myHQ); rc.setIndicatorString(2, "HQ Defensive unit " + dir); } tryMove(dir, false); } }
static boolean canDamage(RobotType r) { return r.canAttack() || r == RobotType.LAUNCHER || r == RobotType.MISSILE; }
private static boolean commanderLikes(RobotType t) { return (t == RobotType.MINER || t == RobotType.BEAVER || (t.isBuilding && t.canAttack() == false)); }