Exemplo n.º 1
0
  @Override
  public void generateRound(int roundNumber) {

    // if trying to skip a round...stop it
    if (roundNumber > rounds.size() + 1) {
      throw new IllegalArgumentException();
    }

    cancelRound(roundNumber);

    List<IAMatch> matches;
    if (roundNumber == 1) {

      matches = new ArrayList<IAMatch>();
      List<IAPlayer> tempList = new ArrayList<>();
      tempList.addAll(getIAPlayers());

      List<IAPlayer> firstRoundByePlayers = new ArrayList<>();
      for (IAPlayer p : tempList) {
        if (p.isFirstRoundBye()) {
          firstRoundByePlayers.add(p);
        }
      }
      tempList.removeAll(firstRoundByePlayers);

      if (seedingEnum == InitialSeedingEnum.IN_ORDER) {

        while (tempList.isEmpty() == false) {
          IAPlayer player1 = tempList.get(0);
          IAPlayer player2 = null;
          tempList.remove(0);
          if (tempList.isEmpty() == false) {
            player2 = tempList.get(0);
            tempList.remove(0);
          }

          IAMatch match = new IAMatch(player1, player2);
          matches.add(match);
        }

      } else if (seedingEnum == InitialSeedingEnum.RANDOM) {
        Collections.shuffle(tempList);

        while (tempList.isEmpty() == false) {
          IAPlayer player1 = tempList.get(0);
          IAPlayer player2 = tempList.get(tempList.size() - 1);
          tempList.remove(player1);
          if (player1 == player2) {
            player2 = null;
          } else {
            tempList.remove(player2);
          }

          IAMatch match = new IAMatch(player1, player2);
          matches.add(match);
        }
      } else if (seedingEnum == InitialSeedingEnum.BY_GROUP) {
        Map<String, List<IAPlayer>> playerMap = new HashMap<String, List<IAPlayer>>();

        // Add players to map
        for (IAPlayer p : tempList) {
          List<IAPlayer> playerList = playerMap.get(p.getPlayer().getGroupName());

          if (playerList == null) {
            playerList = new ArrayList<>();
            String groupName =
                p.getPlayer().getGroupName() == null ? "" : p.getPlayer().getGroupName();
            playerMap.put(groupName, playerList);
          }

          playerList.add(p);
        }

        // Shuffle up the lists
        List<String> seedValues = new ArrayList<>(playerMap.keySet());
        Collections.shuffle(seedValues);

        // Shuffle each group list
        for (List<IAPlayer> list : playerMap.values()) {
          Collections.shuffle(list);
        }

        // /////////////
        // Add new algorythm here
        // /////////////

        IAPlayer p1 = null;
        IAPlayer p2 = null;
        while (seedValues.isEmpty() == false) {
          int i = 0;
          while (i < seedValues.size()) {
            if (p1 == null) {
              p1 = playerMap.get(seedValues.get(i)).get(0);
            } else {
              p2 = playerMap.get(seedValues.get(i)).get(0);
              matches.add(new IAMatch(p1, p2));
              p1 = null;
              p2 = null;
            }

            playerMap.get(seedValues.get(i)).remove(0);

            if (playerMap.get(seedValues.get(i)).isEmpty()) {
              seedValues.remove(i);
            } else {
              i++;
            }
          }

          Collections.shuffle(seedValues);
        }
        if (p1 != null) {
          matches.add(new IAMatch(p1, null));
        }
      }

      for (IAPlayer p : firstRoundByePlayers) {
        matches.add(new IAMatch(p, null));
      }

    } else {

      matches = getMatches(getIAPlayers());
    }
    IARound r = new IARound(matches, this, roundNumber);
    rounds.add(r);
    if (roundNumber == 1
        && startAsSingleElimination
        && (matches.size() == 1
            || matches.size() == 2
            || matches.size() == 4
            || matches.size() == 8
            || matches.size() == 16
            || matches.size() == 32)) {
      r.setSingleElimination(true);
      getTournamentGUI()
          .getRoundTabbedPane()
          .addSingleEliminationTab(r.getMatches().size() * 2, r.getPanel());
    } else {
      getTournamentGUI().getRoundTabbedPane().addSwissTab(roundNumber, r.getPanel());
    }

    getTournamentGUI().getRankingTable().setPlayers(getAllIAPlayers());
  }