Ejemplo n.º 1
0
  // inform the player about how his visible map looks now
  private void sendUpdateMapInfo(Player player) {
    LinkedList<Region> visibleRegions = map.visibleRegionsForPlayer(player);
    String updateMapString = "update_map";
    for (Region region : visibleRegions) {
      int id = region.getId();
      String playerName = region.getPlayerName();
      int armies = region.getArmies();

      updateMapString = updateMapString.concat(" " + id + " " + playerName + " " + armies);
    }
    player.getBot().writeInfo(updateMapString);
  }
Ejemplo n.º 2
0
 public String getVacationListByRegionJSON(
     Date dateFrom, Date dateTo, List<Vacation> vacationList) {
   List<Region> regionList = regionService.getRegions();
   List<Employee> employeeList = new ArrayList<Employee>();
   for (Vacation vacation : vacationList) {
     Employee employee = vacation.getEmployee();
     if (!(employeeList.contains(employee))) {
       employeeList.add(employee);
     }
   }
   final JsonArrayNodeBuilder result = anArrayBuilder();
   // для каждого проекта смотрим сотрудников у которых есть отпуск
   for (Region region : regionList) {
     JsonArrayNodeBuilder employeeNode = anArrayBuilder();
     boolean hasEmployees = false;
     for (Employee employee : employeeList) {
       if (employee.getRegion().getId().equals(region.getId())) {
         JsonArrayNodeBuilder vacationNode = createVacationsNode(employee, vacationList);
         hasEmployees = true;
         employeeNode.withElement(
             anObjectBuilder()
                 .withField("employee", aStringBuilder(employee.getName()))
                 .withField("vacations", vacationNode));
       }
     }
     if (hasEmployees) {
       result.withElement(
           anObjectBuilder()
               .withField("region_id", aStringBuilder(region.getId().toString()))
               .withField("region_name", aStringBuilder(region.getName()))
               .withField("employeeList", employeeNode)
               .withField("holidays", getHolidayInRegion(dateFrom, dateTo, region)));
     }
   }
   return JsonUtil.format(result);
 }
Ejemplo n.º 3
0
  private void executeAttackTransfer() {
    LinkedList<Region> visibleRegionsPlayer1Map = map.visibleRegionsForPlayer(player1);
    LinkedList<Region> visibleRegionsPlayer2Map = map.visibleRegionsForPlayer(player2);
    LinkedList<Region> visibleRegionsPlayer1OldMap = visibleRegionsPlayer1Map;
    LinkedList<Region> visibleRegionsPlayer2OldMap = visibleRegionsPlayer2Map;
    ArrayList<ArrayList<Integer>> usedRegions = new ArrayList<ArrayList<Integer>>();
    for (int i = 0; i <= 42; i++) {
      usedRegions.add(new ArrayList<Integer>());
    }
    Map oldMap = map.getMapCopy();

    int moveNr = 1;
    Boolean previousMoveWasIllegal = false;
    String previousMovePlayer = "";
    while (moveQueue.hasNextAttackTransferMove()) {
      AttackTransferMove move =
          moveQueue.getNextAttackTransferMove(moveNr, previousMovePlayer, previousMoveWasIllegal);

      if (move.getIllegalMove().equals("")) // the com.theaigames.move is not illegal
      {
        Region fromRegion = move.getFromRegion();
        Region oldFromRegion = oldMap.getRegion(move.getFromRegion().getId());
        Region toRegion = move.getToRegion();
        Player player = getPlayer(move.getPlayerName());

        if (fromRegion.ownedByPlayer(
            player.getName())) // check if the fromRegion still belongs to this player
        {
          if (!usedRegions
              .get(fromRegion.getId())
              .contains(
                  toRegion
                      .getId())) // between two regions there can only be attacked/transfered once
          {
            if (oldFromRegion.getArmies() > 1) // there are still armies that can be used
            {
              if (oldFromRegion.getArmies() < fromRegion.getArmies()
                  && oldFromRegion.getArmies() - 1
                      < move
                          .getArmies()) // not enough armies on fromRegion at the start of the
                                        // round?
              move.setArmies(
                    oldFromRegion.getArmies() - 1); // com.theaigames.move the maximal number.
              else if (oldFromRegion.getArmies() >= fromRegion.getArmies()
                  && fromRegion.getArmies() - 1
                      < move.getArmies()) // not enough armies on fromRegion currently?
              move.setArmies(fromRegion.getArmies() - 1); // com.theaigames.move the maximal number.

              // not needed anymore as regions can only be used once now
              oldFromRegion.setArmies(
                  oldFromRegion.getArmies()
                      - move.getArmies()); // update oldFromRegion so new armies cannot be used yet

              if (toRegion.ownedByPlayer(player.getName())) // transfer
              {
                if (fromRegion.getArmies() > 1) {
                  fromRegion.setArmies(fromRegion.getArmies() - move.getArmies());
                  toRegion.setArmies(toRegion.getArmies() + move.getArmies());
                  usedRegions.get(fromRegion.getId()).add(toRegion.getId());
                } else
                  move.setIllegalMove(
                      move.getFromRegion().getId() + " transfer " + "only has 1 army");
              } else // attack
              {
                int destroyedArmies = doAttack(move);
                oldFromRegion.setArmies(
                    oldFromRegion.getArmies()
                        - destroyedArmies); // armies that are destroyed and replaced in the same
                                            // turn cannot be used to attack/transfer with
                usedRegions.get(fromRegion.getId()).add(toRegion.getId());
              }
            } else
              move.setIllegalMove(
                  move.getFromRegion().getId()
                      + " attack/transfer "
                      + "has used all available armies");
          } else
            move.setIllegalMove(
                move.getFromRegion().getId()
                    + " attack/transfer "
                    + "has already attacked/transfered to this region");
        } else
          move.setIllegalMove(
              move.getFromRegion().getId() + " attack/transfer " + "was taken this round");
      }

      visibleRegionsPlayer1Map = map.visibleRegionsForPlayer(player1);
      visibleRegionsPlayer2Map = map.visibleRegionsForPlayer(player2);

      fullPlayedGame.add(new MoveResult(move, map.getMapCopy()));
      if (visibleRegionsPlayer1Map.contains(move.getFromRegion())
          || visibleRegionsPlayer1Map.contains(move.getToRegion())
          || visibleRegionsPlayer1OldMap.contains(move.getToRegion())) {
        player1PlayedGame.add(
            new MoveResult(move, map.getVisibleMapCopyForPlayer(player1))); // for the game file
        if (move.getPlayerName().equals(player2.getName()))
          opponentMovesPlayer1.add(move); // for the opponent_moves output
      }
      if (visibleRegionsPlayer2Map.contains(move.getFromRegion())
          || visibleRegionsPlayer2Map.contains(move.getToRegion())
          || visibleRegionsPlayer2OldMap.contains(move.getToRegion())) {
        player2PlayedGame.add(
            new MoveResult(move, map.getVisibleMapCopyForPlayer(player2))); // for the game file
        if (move.getPlayerName().equals(player1.getName()))
          opponentMovesPlayer2.add(move); // for the opponent_moves output
      }

      visibleRegionsPlayer1OldMap = visibleRegionsPlayer1Map;
      visibleRegionsPlayer2OldMap = visibleRegionsPlayer2Map;

      // set some stuff to know what next com.theaigames.move to get
      if (move.getIllegalMove().equals("")) {
        previousMoveWasIllegal = false;
        moveNr++;
      } else {
        previousMoveWasIllegal = true;
      }
      previousMovePlayer = move.getPlayerName();
    }
  }