コード例 #1
0
  @Override
  public void run() {
    try {
      rc.setIndicatorString(0, soldierState.toString());

      DataCache.updateRoundVariables();
      currentLocation = rc.getLocation(); // LEAVE THIS HERE UNDER ALL CIRCUMSTANCES

      if (unassigned) {
        // If this is not an encampment worker
        // Check if our nuke is half done
        if (!ourNukeHalfDone) {
          Message message = BroadcastSystem.read(ChannelType.OUR_NUKE_HALF_DONE);
          if (message.isValid && message.body == 1) {
            ourNukeHalfDone = true;
          }
        }
        // Check if enemy nuke is half done
        if (!enemyNukeHalfDone) {
          Message message = BroadcastSystem.read(ChannelType.ENEMY_NUKE_HALF_DONE);
          if (message.isValid && message.body == 1) {
            enemyNukeHalfDone = true;
          }
        }
        if (enemyNukeHalfDone && !ourNukeHalfDone && soldierState != SoldierState.ALL_IN) {
          //					soldierState = SoldierState.ALL_IN;
          soldierState = SoldierState.CHARGE_SHIELDS;
        }

        switch (soldierState) {
          case NEW:
            newCode();
            break;
          case FINDING_START_MINE_POSITIONS:
            findingStartMinePositionsCode();
            break;
          case CHARGE_SHIELDS:
            if (shieldExists()) {
              chargeShieldsCode();
            } else {
              nextSoldierState = SoldierState.RALLYING;
              rallyingCode();
            }
            break;
          case MINING:
            miningCode();
            break;
          case ESCAPE_HQ_MINES:
            escapeHQMinesCode();
            break;
          case CLEAR_OUT_HQ_MINES:
            clearOutHQMinesCode();
            break;
          case ALL_IN:
            allInCode();
            break;
          case PUSHING:
            pushingCode();
            break;
          case FIGHTING:
            fightingCode();
            break;
          case RALLYING:
            rallyingCode();
            break;
          case SCOUTING:
            scoutingCode();
            break;
          default:
            break;
        }
      } else {
        // This soldier has an encampment job, so it should go do that job
        captureCode();
      }

      reportArtillerySighting();
      if (nextSoldierState != null) {
        soldierState = nextSoldierState;
        nextSoldierState = null; // clear the state for the next call of run() to use
      }
    } catch (Exception e) {
      System.out.println("caught exception before it killed us:");
      System.out.println(rc.getRobot().getID());
      e.printStackTrace();
    }
  }
コード例 #2
0
  @Override
  public void run() {
    try {
      //			System.out.println("start: " + Clock.getBytecodeNum());
      BroadcastSystem.write(powerChannel, (int) rc.getTeamPower());
      //			System.out.println("end: " + Clock.getBytecodeNum());
      DataCache.updateRoundVariables();

      // Check if enemy's nuke is half done
      if (!enemyNukeHalfDone) {
        enemyNukeHalfDone = rc.senseEnemyNukeHalfDone();
      }
      if (enemyNukeHalfDone) {
        // Broadcast this
        BroadcastSystem.write(ChannelType.ENEMY_NUKE_HALF_DONE, 1);
      }

      //			if (Clock.getRoundNum() < 20) {
      //				BroadcastSystem.write(ChannelType.CHANNEL1, 0);
      //				BroadcastSystem.read(ChannelType.CHANNEL1);
      //				BroadcastSystem.write(ChannelType.CHANNEL1, 0);
      //			} else {
      //				rc.resign();
      //			}
      //

      if (Clock.getRoundNum() % Constants.CHANNEL_CYCLE == 0 && Clock.getRoundNum() > 0) {
        EncampmentJobSystem.updateJobsOnCycle();
      } else {
        EncampmentJobSystem.updateJobsAfterChecking();
      }

      if (rc.isActive()) {

        boolean upgrade = false;
        if (!rc.hasUpgrade(Upgrade.DEFUSION)
            && enemyNukeHalfDone
            && DataCache.numAlliedSoldiers > 5) {
          upgrade = true;
          rc.researchUpgrade(Upgrade.DEFUSION);
        } else if (rc.getTeamPower() < 100) {
          if (!rc.hasUpgrade(Upgrade.DEFUSION)) {
            upgrade = true;
            rc.researchUpgrade(Upgrade.DEFUSION);
          } else if (!rc.hasUpgrade(Upgrade.PICKAXE)) {
            upgrade = true;
            rc.researchUpgrade(Upgrade.PICKAXE);
          } else if (!rc.hasUpgrade(Upgrade.FUSION)) {
            upgrade = true;
            rc.researchUpgrade(Upgrade.FUSION);
          }
        }
        if (!upgrade) {

          // Spawn a soldier
          Direction desiredDir = rc.getLocation().directionTo(rc.senseEnemyHQLocation());
          Direction dir = getSpawnDirection(rc, desiredDir);
          if (dir != null) {
            EncampmentJobSystem.updateJobs();
            rc.spawn(dir);
          }
        }
        //				if (Clock.getRoundNum() < 5) {
        //					Direction dir = rc.getLocation().directionTo(rc.senseEnemyHQLocation());
        //					rc.spawn(dir);
        //				}
      }

      //			// TODO: find out what strategy to switch to?
      //			// this.strategy = HQStrategy.xxx
      //			if (rc.isActive()) {
      //				switch (strategy) {
      //				case CREATE_SOLDIER:
      //					create_soldier();
      //					break;
      //				case RESEARCH_DEFUSION:
      //					if (!rc.hasUpgrade(Upgrade.DEFUSION)) {
      //						rc.researchUpgrade(Upgrade.DEFUSION);
      //					}
      //					break;
      //				case RESEARCH_FUSION:
      //					if (!rc.hasUpgrade(Upgrade.FUSION)) {
      //						rc.researchUpgrade(Upgrade.FUSION);
      //					}
      //					break;
      //				case RESEARCH_NUKE:
      //					if (!rc.hasUpgrade(Upgrade.NUKE)) {
      //						rc.researchUpgrade(Upgrade.NUKE);
      //					}
      //					break;
      //				case RESEARCH_PICKAXE:
      //					if (!rc.hasUpgrade(Upgrade.PICKAXE)) {
      //						rc.researchUpgrade(Upgrade.PICKAXE);
      //					}
      //					break;
      //				case RESEARCH_VISION:
      //					if (!rc.hasUpgrade(Upgrade.VISION)) {
      //						rc.researchUpgrade(Upgrade.VISION);
      //					}
      //					break;
      //				default:
      //					break;
      //				}
      //			}
    } catch (Exception e) {
      System.out.println("caught exception before it killed us:");
      System.out.println(rc.getRobot().getID());
      e.printStackTrace();
    }
  }