* Tournament handling - Finished pairing are updated now to tournament players list immediately.

This commit is contained in:
LevelX2 2014-02-17 00:41:40 +01:00
parent ce967ee88c
commit 4e5de2b7f9
10 changed files with 120 additions and 76 deletions

View file

@ -38,12 +38,14 @@ import java.util.UUID;
*/
public class Round {
private int roundNum;
private List<TournamentPairing> pairs = new ArrayList<TournamentPairing>();
private List<TournamentPlayer> playerByes = new ArrayList<TournamentPlayer>();
private final int roundNum;
private final Tournament tournament;
private final List<TournamentPairing> pairs = new ArrayList<TournamentPairing>();
private final List<TournamentPlayer> playerByes = new ArrayList<TournamentPlayer>();
public Round(int roundNum) {
public Round(int roundNum, Tournament tournament) {
this.roundNum = roundNum;
this.tournament = tournament;
}
public void addPairing(TournamentPairing match) {
@ -68,12 +70,18 @@ public class Round {
}
public boolean isRoundOver() {
boolean roundIsOver = true;
for (TournamentPairing pair: pairs) {
if (!pair.getMatch().isMatchOver()) {
return false;
roundIsOver = false;
} else {
if (!pair.isAlreadyPublished()) {
tournament.updateResults();
pair.setAlreadyPublished(true);
}
}
}
return true;
return roundIsOver;
}
public List<TournamentPlayer> getPlayerByes() {

View file

@ -53,6 +53,7 @@ public interface Tournament {
Collection<Round> getRounds();
List<ExpansionSet> getSets();
void updateResults();
void setBoosterInfo(String setInfo);
/**
* Gives back a String that shows the included sets (e.g. "3xRTR" or "1xDGM 1xGTC 1xRTR") or cube name

View file

@ -28,20 +28,30 @@
package mage.game.tournament;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.constants.TournamentPlayerState;
import mage.game.draft.DraftCube;
import mage.game.events.*;
import mage.game.events.Listener;
import mage.game.events.PlayerQueryEvent;
import mage.game.events.PlayerQueryEventSource;
import mage.game.events.TableEvent;
import mage.game.events.TableEvent.EventType;
import mage.game.events.TableEventSource;
import mage.game.match.Match;
import mage.players.Player;
import org.apache.log4j.Logger;
/**
*
* @author BetaSteward_at_googlemail.com
@ -164,7 +174,7 @@ public abstract class TournamentImpl implements Tournament {
}
protected Round createRoundRandom() {
Round round = new Round(rounds.size() + 1);
Round round = new Round(rounds.size() + 1, this);
rounds.add(round);
List<TournamentPlayer> roundPlayers = getActivePlayers();
while (roundPlayers.size() > 1) {
@ -213,7 +223,11 @@ public abstract class TournamentImpl implements Tournament {
return activePlayers;
}
protected void updateResults() {
/**
*
*/
@Override
public void updateResults() {
for (TournamentPlayer player: players.values()) {
player.setResults("");
player.setPoints(0);
@ -224,27 +238,37 @@ public abstract class TournamentImpl implements Tournament {
UUID player1Id = pair.getPlayer1().getPlayer().getId();
UUID player2Id = pair.getPlayer2().getPlayer().getId();
Match match = pair.getMatch();
StringBuilder sb1 = new StringBuilder(players.get(player1Id).getResults());
StringBuilder sb2 = new StringBuilder(players.get(player2Id).getResults());
sb1.append(pair.getPlayer2().getPlayer().getName());
sb1.append(" (").append(match.getPlayer(player1Id).getWins());
sb1.append("-").append(match.getPlayer(player2Id).getWins()).append(") ");
sb2.append(pair.getPlayer1().getPlayer().getName());
sb2.append(" (").append(match.getPlayer(player2Id).getWins());
sb2.append("-").append(match.getPlayer(player1Id).getWins()).append(") ");
players.get(player1Id).setResults(sb1.toString());
players.get(player2Id).setResults(sb2.toString());
if (match.getPlayer(player1Id).getWins() > match.getPlayer(player2Id).getWins()) {
int points = players.get(player1Id).getPoints();
players.get(player1Id).setPoints(points + 3);
} else if (match.getPlayer(player1Id).getWins() < match.getPlayer(player2Id).getWins()) {
int points = players.get(player2Id).getPoints();
players.get(player2Id).setPoints(points + 3);
} else {
int points = players.get(player1Id).getPoints();
players.get(player1Id).setPoints(points + 1);
points = players.get(player2Id).getPoints();
players.get(player2Id).setPoints(points + 1);
if (match.isMatchOver()) {
if (round.getRoundNumber() == rounds.size()) {
if (players.get(player1Id).getState().equals(TournamentPlayerState.DUELING)) {
players.get(player1Id).setState(TournamentPlayerState.WAITING);
}
if (players.get(player2Id).getState().equals(TournamentPlayerState.DUELING)) {
players.get(player2Id).setState(TournamentPlayerState.WAITING);
}
}
StringBuilder sb1 = new StringBuilder(players.get(player1Id).getResults());
StringBuilder sb2 = new StringBuilder(players.get(player2Id).getResults());
sb1.append(pair.getPlayer2().getPlayer().getName());
sb1.append(" (").append(match.getPlayer(player1Id).getWins());
sb1.append("-").append(match.getPlayer(player2Id).getWins()).append(") ");
sb2.append(pair.getPlayer1().getPlayer().getName());
sb2.append(" (").append(match.getPlayer(player2Id).getWins());
sb2.append("-").append(match.getPlayer(player1Id).getWins()).append(") ");
players.get(player1Id).setResults(sb1.toString());
players.get(player2Id).setResults(sb2.toString());
if (match.getPlayer(player1Id).getWins() > match.getPlayer(player2Id).getWins()) {
int points = players.get(player1Id).getPoints();
players.get(player1Id).setPoints(points + 3);
} else if (match.getPlayer(player1Id).getWins() < match.getPlayer(player2Id).getWins()) {
int points = players.get(player2Id).getPoints();
players.get(player2Id).setPoints(points + 3);
} else {
int points = players.get(player1Id).getPoints();
players.get(player1Id).setPoints(points + 1);
points = players.get(player2Id).getPoints();
players.get(player2Id).setPoints(points + 1);
}
}
}
for (TournamentPlayer tournamentPlayer : round.getPlayerByes()) {

View file

@ -38,15 +38,17 @@ import mage.game.match.MatchPlayer;
*/
public class TournamentPairing {
private UUID id = UUID.randomUUID();
private final UUID id = UUID.randomUUID();
private UUID tableId;
private Match match;
private TournamentPlayer player1;
private TournamentPlayer player2;
private final TournamentPlayer player1;
private final TournamentPlayer player2;
private boolean alreadyPublished;
public TournamentPairing(TournamentPlayer player1, TournamentPlayer player2) {
this.player1 = player1;
this.player2 = player2;
this.alreadyPublished = false;
}
public UUID getId() {
@ -98,4 +100,12 @@ public class TournamentPairing {
this.tableId = tableId;
}
public boolean isAlreadyPublished() {
return alreadyPublished;
}
public void setAlreadyPublished(boolean alreadyPublished) {
this.alreadyPublished = alreadyPublished;
}
}

View file

@ -62,7 +62,7 @@ public abstract class TournamentSwiss extends TournamentImpl {
}
protected Round createRoundSwiss() {
Round round = new Round(rounds.size() + 1);
Round round = new Round(rounds.size() + 1, this);
rounds.add(round);
List<TournamentPlayer> roundPlayers = getActivePlayers();
// sort players by tournament points