mirror of
https://github.com/correl/mage.git
synced 2024-12-24 03:00:14 +00:00
add jumpstart swiss and elimiation tournament formats.
This commit is contained in:
parent
57ed834c14
commit
1695e6767d
12 changed files with 272 additions and 5 deletions
|
@ -1203,6 +1203,7 @@ public class NewTournamentDialog extends MageDialog {
|
|||
tOptions.getLimitedOptions().setConstructionTime((Integer) this.spnConstructTime.getValue() * 60);
|
||||
tOptions.getLimitedOptions().setIsRandom(tournamentType.isRandom());
|
||||
tOptions.getLimitedOptions().setIsRichMan(tournamentType.isRichMan());
|
||||
tOptions.getLimitedOptions().setIsJumpstart(tournamentType.isJumpstart());
|
||||
if (tournamentType.isCubeBooster()) {
|
||||
tOptions.getLimitedOptions().setDraftCubeName(this.cbDraftCube.getSelectedItem().toString());
|
||||
if (!(cubeFromDeckFilename.isEmpty())) {
|
||||
|
|
|
@ -22,6 +22,7 @@ public class TournamentTypeView implements Serializable {
|
|||
private final boolean elimination;
|
||||
private final boolean random;
|
||||
private final boolean richMan;
|
||||
private final boolean jumpstart;
|
||||
|
||||
public TournamentTypeView(TournamentType tournamentType) {
|
||||
this.name = tournamentType.getName();
|
||||
|
@ -34,6 +35,7 @@ public class TournamentTypeView implements Serializable {
|
|||
this.elimination = tournamentType.isElimination();
|
||||
this.random = tournamentType.isRandom();
|
||||
this.richMan = tournamentType.isRichMan();
|
||||
this.jumpstart = tournamentType.isJumpstart();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -80,4 +82,9 @@ public class TournamentTypeView implements Serializable {
|
|||
public boolean isRichMan() {
|
||||
return richMan;
|
||||
}
|
||||
|
||||
public boolean isJumpstart() {
|
||||
return jumpstart;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
|
||||
|
||||
package mage.tournament;
|
||||
|
||||
import mage.game.tournament.TournamentOptions;
|
||||
import mage.game.tournament.TournamentSingleElimination;
|
||||
|
||||
public class JumpstartEliminationTournament extends TournamentSingleElimination {
|
||||
|
||||
protected enum TournamentStep {
|
||||
START, OPEN_BOOSTERS, CONSTRUCT, COMPETE, WINNERS
|
||||
}
|
||||
|
||||
protected TournamentStep currentStep;
|
||||
|
||||
public JumpstartEliminationTournament(TournamentOptions options) {
|
||||
super(options);
|
||||
currentStep = TournamentStep.START;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nextStep() {
|
||||
switch (currentStep) {
|
||||
case START:
|
||||
currentStep = TournamentStep.OPEN_BOOSTERS;
|
||||
openBoosters();
|
||||
break;
|
||||
case OPEN_BOOSTERS:
|
||||
currentStep = TournamentStep.CONSTRUCT;
|
||||
construct();
|
||||
break;
|
||||
case CONSTRUCT:
|
||||
currentStep = TournamentStep.COMPETE;
|
||||
runTournament();
|
||||
break;
|
||||
case COMPETE:
|
||||
currentStep = TournamentStep.WINNERS;
|
||||
winners();
|
||||
end();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
|
||||
|
||||
package mage.tournament;
|
||||
|
||||
import mage.game.tournament.TournamentType;
|
||||
|
||||
public class JumpstartEliminationTournamentType extends TournamentType {
|
||||
|
||||
public JumpstartEliminationTournamentType() {
|
||||
this.name = "Jumpstart Elimination";
|
||||
this.maxPlayers = 16;
|
||||
this.minPlayers = 2;
|
||||
this.numBoosters = 0;
|
||||
this.isJumpstart = true;
|
||||
this.elimination = true;
|
||||
this.limited = true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
|
||||
|
||||
package mage.tournament;
|
||||
|
||||
import mage.game.tournament.TournamentOptions;
|
||||
import mage.game.tournament.TournamentSwiss;
|
||||
|
||||
public class JumpstartSwissTournament extends TournamentSwiss {
|
||||
|
||||
protected enum TournamentStep {
|
||||
START, OPEN_BOOSTERS, CONSTRUCT, COMPETE, WINNERS
|
||||
}
|
||||
|
||||
protected TournamentStep currentStep;
|
||||
|
||||
public JumpstartSwissTournament(TournamentOptions options) {
|
||||
super(options);
|
||||
currentStep = TournamentStep.START;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nextStep() {
|
||||
switch (currentStep) {
|
||||
case START:
|
||||
currentStep = TournamentStep.OPEN_BOOSTERS;
|
||||
openBoosters();
|
||||
break;
|
||||
case OPEN_BOOSTERS:
|
||||
currentStep = TournamentStep.CONSTRUCT;
|
||||
construct();
|
||||
break;
|
||||
case CONSTRUCT:
|
||||
currentStep = TournamentStep.COMPETE;
|
||||
runTournament();
|
||||
break;
|
||||
case COMPETE:
|
||||
currentStep = TournamentStep.WINNERS;
|
||||
winners();
|
||||
end();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
package mage.tournament;
|
||||
|
||||
import mage.game.tournament.TournamentType;
|
||||
|
||||
public class JumpstartSwissTournamentType extends TournamentType {
|
||||
|
||||
public JumpstartSwissTournamentType() {
|
||||
this.name = "Jumpstart Swiss";
|
||||
this.maxPlayers = 16;
|
||||
this.minPlayers = 2;
|
||||
this.numBoosters = 0;
|
||||
this.isJumpstart = true;
|
||||
this.limited = true;
|
||||
}
|
||||
|
||||
}
|
|
@ -104,6 +104,8 @@
|
|||
<tournamentType name="Sealed Elimination (Cube)" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedEliminationTournament" typeName="mage.tournament.SealedEliminationCubeTournamentType"/>
|
||||
<tournamentType name="Sealed Swiss" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissTournamentType"/>
|
||||
<tournamentType name="Sealed Swiss (Cube)" jar="mage-tournament-sealed.jar" className="mage.tournament.SealedSwissTournament" typeName="mage.tournament.SealedSwissCubeTournamentType"/>
|
||||
<tournamentType name="Jumpstart Elimination" jar="mage-tournament-sealed.jar" className="mage.tournament.JumpstartEliminationTournament" typeName="mage.tournament.JumpstartEliminationTournamentType"/>
|
||||
<tournamentType name="Jumpstart Swiss" jar="mage-tournament-sealed.jar" className="mage.tournament.JumpstartSwissTournament" typeName="mage.tournament.JumpstartSwissTournamentType"/>
|
||||
</tournamentTypes>
|
||||
<draftCubes>
|
||||
<draftCube name="Adam Styborski's Pauper Cube" jar="mage-tournament-booster-draft.jar" className="mage.tournament.cubes.AdamStyborskisPauperCube"/>
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package mage.game.jumpstart;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.io.CharSource;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.common.io.Resources;
|
||||
|
||||
import mage.cards.Card;
|
||||
import mage.cards.decks.Deck;
|
||||
import mage.cards.decks.DeckCardInfo;
|
||||
import mage.cards.decks.DeckCardLists;
|
||||
import mage.game.GameException;
|
||||
|
||||
public class JumpstartPoolGenerator {
|
||||
|
||||
private static final String RESOURCE_NAME = "mage/game/jumpstart/jumpstart.txt";
|
||||
private static final List<JumpstartPack> JUMPSTART_PACKS;
|
||||
|
||||
static {
|
||||
try {
|
||||
CharSource source = Resources.asCharSource(Resources.getResource(RESOURCE_NAME), Charsets.UTF_8);
|
||||
List<JumpstartPack> packs = new ArrayList<>();
|
||||
JumpstartPack pack = new JumpstartPack();
|
||||
for (String line : source.readLines()) {
|
||||
if (line.isEmpty()) {
|
||||
if (!pack.isEmpty()) {
|
||||
packs.add(pack);
|
||||
pack = new JumpstartPack();
|
||||
}
|
||||
} else if (line.startsWith("#")) {
|
||||
// skip comment
|
||||
} else {
|
||||
String[] ls = line.split(" ", 3);
|
||||
pack.add(new DeckCardInfo(ls[2], ls[1], ls[0]));
|
||||
}
|
||||
}
|
||||
JUMPSTART_PACKS = Collections.unmodifiableList(packs);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Set<Card> generatePool() {
|
||||
try {
|
||||
DeckCardLists list = new DeckCardLists();
|
||||
SecureRandom random = new SecureRandom();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
int index = random.nextInt(JUMPSTART_PACKS.size());
|
||||
list.getCards().addAll(JUMPSTART_PACKS.get(index).getCards());
|
||||
}
|
||||
return Deck.load(list).getCards();
|
||||
} catch (GameException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static class JumpstartPack {
|
||||
|
||||
private final List<DeckCardInfo> cards = new ArrayList<>();
|
||||
|
||||
public void add(DeckCardInfo card) {
|
||||
cards.add(card);
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return cards.isEmpty();
|
||||
}
|
||||
|
||||
public List<DeckCardInfo> getCards() {
|
||||
return Collections.unmodifiableList(cards);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
15
Mage/src/main/java/mage/game/jumpstart/jumpstart.txt
Normal file
15
Mage/src/main/java/mage/game/jumpstart/jumpstart.txt
Normal file
|
@ -0,0 +1,15 @@
|
|||
# setCode cardNum cardName
|
||||
IKO 105 Whisper Squad
|
||||
IKO 105 Whisper Squad
|
||||
IKO 105 Whisper Squad
|
||||
IKO 105 Whisper Squad
|
||||
|
||||
IKO 113 Drannith Stinger
|
||||
IKO 113 Drannith Stinger
|
||||
IKO 113 Drannith Stinger
|
||||
IKO 113 Drannith Stinger
|
||||
|
||||
IKO 149 Essence Symbiote
|
||||
IKO 149 Essence Symbiote
|
||||
IKO 149 Essence Symbiote
|
||||
IKO 149 Essence Symbiote
|
|
@ -19,7 +19,8 @@ public class LimitedOptions implements Serializable {
|
|||
protected int numberBoosters;
|
||||
protected boolean isRandom;
|
||||
protected boolean isRichMan;
|
||||
protected Deck cubeFromDeck = null;
|
||||
protected Deck cubeFromDeck;
|
||||
protected boolean isJumpstart;
|
||||
|
||||
public List<String> getSetCodes() {
|
||||
return sets;
|
||||
|
@ -80,4 +81,13 @@ public class LimitedOptions implements Serializable {
|
|||
public void setIsRichMan(boolean isRichMan) {
|
||||
this.isRichMan = isRichMan;
|
||||
}
|
||||
|
||||
public void setIsJumpstart(boolean isJumpstart) {
|
||||
this.isJumpstart = isJumpstart;
|
||||
}
|
||||
|
||||
public boolean getIsJumpstart() {
|
||||
return this.isJumpstart;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,15 +1,32 @@
|
|||
|
||||
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.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import mage.cards.ExpansionSet;
|
||||
import mage.cards.decks.Deck;
|
||||
import mage.constants.TournamentPlayerState;
|
||||
import mage.game.draft.Draft;
|
||||
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.jumpstart.JumpstartPoolGenerator;
|
||||
import mage.game.match.Match;
|
||||
import mage.game.match.MatchPlayer;
|
||||
import mage.game.result.ResultProtos.MatchPlayerProto;
|
||||
|
@ -20,7 +37,6 @@ import mage.game.result.ResultProtos.TourneyRoundProto;
|
|||
import mage.players.Player;
|
||||
import mage.players.PlayerType;
|
||||
import mage.util.RandomUtil;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -394,6 +410,8 @@ public abstract class TournamentImpl implements Tournament {
|
|||
for (int i = 0; i < options.getLimitedOptions().getNumberBoosters(); i++) {
|
||||
player.getDeck().getSideboard().addAll(cube.createBooster());
|
||||
}
|
||||
} else if (options.getLimitedOptions().getIsJumpstart()) {
|
||||
player.getDeck().getSideboard().addAll(JumpstartPoolGenerator.generatePool());
|
||||
} else {
|
||||
for (ExpansionSet set : sets) {
|
||||
player.getDeck().getSideboard().addAll(set.createBooster());
|
||||
|
|
|
@ -18,7 +18,8 @@ public class TournamentType implements Serializable {
|
|||
protected boolean limited; // or construced
|
||||
protected boolean elimination; // or Swiss
|
||||
protected boolean isRandom;
|
||||
protected boolean isRichMan = false; // or Rich Man Draft
|
||||
protected boolean isRichMan; // or Rich Man Draft
|
||||
protected boolean isJumpstart;
|
||||
|
||||
protected TournamentType() {
|
||||
}
|
||||
|
@ -68,4 +69,8 @@ public class TournamentType implements Serializable {
|
|||
return this.isRichMan;
|
||||
}
|
||||
|
||||
public boolean isJumpstart() {
|
||||
return this.isJumpstart;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue