public void tryToBuild() throws GameActionException { // try to build a robot Direction dl = randomDirection(); if (rc.getRoundNum() % 400 < 20 && rc.canBuild(dl, RobotType.SCOUT) && rc.isCoreReady()) { rc.build(dl, RobotType.SCOUT); } double prob = random.nextDouble(); int index = 0; RobotType robot; if (Utility.getClosestRound(zss) < 30) { while (prob > probabilitiesZ[index]) { index++; } robot = buildRobotTypes[index]; } else { while (prob > probabilities[index]) { index++; } robot = buildRobotTypes[index]; } for (Direction d : Direction.values()) { if (rc.canBuild(d, robot)) { if (rc.isCoreReady()) { rc.build(d, robot); int newid = rc.senseRobotAtLocation(rc.getLocation().add(d)).ID; MessageSignal teamFirstDirective = new MessageSignal(rc); if (leaderLocation != null) { teamFirstDirective.setCommand(leaderLocation, MessageSignal.CommandType.MOVE); } teamFirstDirective.send(2); } } } return; }
public void getSignals() { Signal[] queue = rc.emptySignalQueue(); for (Signal signal : queue) { if (signal.getTeam() == myTeam) { if (signal.getMessage() != null) { if (signal.getMessage()[0] == 0xdead && signal.getMessage()[1] == 0xbeef) { heiarchy--; continue; } MessageSignal msgSig = new MessageSignal(signal); switch (msgSig.getMessageType()) { case ROBOT: if (msgSig.getPingedTeam() == Team.NEUTRAL) { rc.setIndicatorString(0, "Found neutral"); if (msgSig.getPingedLocation().distanceSquaredTo(rc.getLocation()) < 40) { goalLocation = msgSig.getPingedLocation(); } } if (msgSig.getPingedType() == RobotType.ARCHON && msgSig.getPingedTeam() == myTeam.opponent()) { rc.setIndicatorString(0, "Found enemy Archon"); foundEnemyArchon = true; sentGoal = false; enemyArchon = msgSig.getPingedLocation(); } if (msgSig.getPingedType() == RobotType.ZOMBIEDEN) { rc.setIndicatorString(2, "Found Zombie Den"); knownZombieDenLocations.add(msgSig.getPingedLocation()); foundZombieDen = true; } break; case PARTS: break; default: break; } } } } }
@Override public void prerun() throws GameActionException { if (rc.getRoundNum() % 5 == 0) { RobotInfo[] robotsNearMe = rc.senseNearbyRobots(); for (RobotInfo ri : robotsNearMe) { if (ri.team == Team.NEUTRAL && !neutralBotLocations.contains(ri.location)) { neutralBotLocations.add(ri.location); } } } getSignals(); if (!suppressSignals && heiarchy == -1 && (!sentGoal || rc.getRoundNum() - lastSentGoal > 10)) { MapLocation goal; MessageSignal goalDirection = new MessageSignal(rc); if (foundZombieDen) { goal = knownZombieDenLocations.get(knownZombieDenLocations.size() - 1); goalDirection.setCommand(goal, MessageSignal.CommandType.ATTACK); } else if (foundEnemyArchon) { goal = enemyArchon; goalDirection.setCommand(goal, MessageSignal.CommandType.ATTACK); } else { goal = rc.getLocation(); goalDirection.setCommand(goal, MessageSignal.CommandType.MOVE); } goalDirection.send(GameConstants.MAP_MAX_HEIGHT * GameConstants.MAP_MAX_HEIGHT); sentGoal = true; lastSentGoal = rc.getRoundNum(); rc.setIndicatorString(2, goal + ""); } else { rc.setIndicatorString(2, ""); super.prerun(); } }