Support generating deck for planar conquest commander

This commit is contained in:
drdev
2014-11-23 05:11:23 +00:00
parent 86f738a81f
commit 769b5c1b37
17 changed files with 245 additions and 119 deletions

View File

@@ -25,6 +25,7 @@ import com.google.common.collect.Multimaps;
import forge.card.CardEdition.CardInSet;
import forge.card.CardEdition.Type;
import forge.deck.generation.IDeckGenPool;
import forge.item.PaperCard;
import forge.util.*;
@@ -34,7 +35,7 @@ import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
import java.util.Map.Entry;
public final class CardDb implements ICardDatabase {
public final class CardDb implements ICardDatabase, IDeckGenPool {
public final static String foilSuffix = "+";
public final static char NameSetSeparator = '|';

View File

@@ -18,12 +18,14 @@
package forge.deck;
import com.google.common.collect.Lists;
import forge.StaticData;
import forge.card.CardDb;
import forge.item.PaperCard;
import forge.util.ItemPool;
import forge.util.ItemPoolSorter;
import forge.util.MyRandom;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
@@ -33,10 +35,7 @@ import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Deck section.
*
*/
public class CardPool extends ItemPool<PaperCard> {
public CardPool() {
@@ -193,6 +192,4 @@ public class CardPool extends ItemPool<PaperCard> {
}
return sb.toString();
}
}

View File

@@ -0,0 +1,38 @@
package forge.deck.generation;
import java.util.HashMap;
import forge.item.PaperCard;
public class DeckGenPool implements IDeckGenPool {
private final HashMap<String, PaperCard> cards = new HashMap<String, PaperCard>();
public void add(PaperCard c) {
cards.put(c.getName(), c);
}
public void addAll(Iterable<PaperCard> cc) {
for (PaperCard c : cc) {
add(c);
}
}
@Override
public PaperCard getCard(String name) {
return cards.get(name);
}
@Override
public PaperCard getCard(String name, String edition) {
return cards.get(name);
}
@Override
public PaperCard getCard(String name, String edition, int artIndex) {
return cards.get(name);
}
@Override
public Iterable<PaperCard> getAllCards() {
return cards.values();
}
}

View File

@@ -18,10 +18,11 @@
package forge.deck.generation;
import com.google.common.collect.Lists;
import forge.card.ColorSet;
import forge.card.ICardDatabase;
import forge.card.MagicColor;
import forge.deck.CardPool;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.Arrays;
@@ -55,18 +56,8 @@ public class DeckGenerator2Color extends DeckGeneratorBase {
// 4x 7 - 20
// = 52x - card pool (before further random filtering)
/**
* <p>
* Constructor for Generate2ColorDeck.
* </p>
*
* @param clr1
* a {@link java.lang.String} object.
* @param clr2
* a {@link java.lang.String} object.
*/
public DeckGenerator2Color(ICardDatabase cardDb, final String clr1, final String clr2) {
super(cardDb);
public DeckGenerator2Color(IDeckGenPool pool, final String clr1, final String clr2) {
super(pool);
int c1 = MagicColor.fromName(clr1);
int c2 = MagicColor.fromName(clr2);

View File

@@ -18,11 +18,12 @@
package forge.deck.generation;
import com.google.common.collect.Lists;
import forge.card.ColorSet;
import forge.card.ICardDatabase;
import forge.card.MagicColor;
import forge.deck.CardPool;
import forge.util.MyRandom;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.List;
@@ -43,20 +44,8 @@ public class DeckGenerator3Color extends DeckGeneratorBase {
ImmutablePair.of(new FilterCMC(6, 20), 3)
);
/**
* <p>
* Constructor for Generate3ColorDeck.
* </p>
*
* @param clr1
* a {@link java.lang.String} object.
* @param clr2
* a {@link java.lang.String} object.
* @param clr3
* a {@link java.lang.String} object.
*/
public DeckGenerator3Color(ICardDatabase cardDb, final String clr1, final String clr2, final String clr3) {
super(cardDb);
public DeckGenerator3Color(IDeckGenPool pool, final String clr1, final String clr2, final String clr3) {
super(pool);
int c1 = MagicColor.fromName(clr1);
int c2 = MagicColor.fromName(clr2);
int c3 = MagicColor.fromName(clr3);

View File

@@ -18,9 +18,10 @@
package forge.deck.generation;
import com.google.common.collect.Lists;
import forge.card.ColorSet;
import forge.card.ICardDatabase;
import forge.deck.CardPool;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.List;
@@ -50,8 +51,8 @@ public class DeckGenerator5Color extends DeckGeneratorBase {
/**
* Instantiates a new generate5 color deck.
*/
public DeckGenerator5Color(ICardDatabase cardDb) {
super(cardDb);
public DeckGenerator5Color(IDeckGenPool pool) {
super(pool);
colors = ColorSet.fromMask(0).inverse();
}

View File

@@ -49,7 +49,7 @@ public abstract class DeckGeneratorBase {
protected ColorSet colors;
protected final CardPool tDeck = new CardPool();
protected final ICardDatabase cardDb;
protected final IDeckGenPool pool;
// 2-colored deck generator has its own constants. The rest works fine with these ones
protected float getLandsPercentage() { return 0.44f; }
@@ -58,8 +58,8 @@ public abstract class DeckGeneratorBase {
StringBuilder tmpDeck = new StringBuilder();
public DeckGeneratorBase(ICardDatabase cardDb) {
this.cardDb = cardDb;
public DeckGeneratorBase(IDeckGenPool pool) {
this.pool = pool;
}
public void setSingleton(boolean singleton){
@@ -107,7 +107,7 @@ public abstract class DeckGeneratorBase {
throw new RuntimeException("Generate2ColorDeck : get2ColorDeck -- looped too much, please try again -- Cr12");
}
tDeck.add(cardDb.getCard(cp.getName(),cp.getEdition()));
tDeck.add(pool.getCard(cp.getName(), cp.getEdition()));
final int n = this.cardCounts.get(cp.getName());
this.cardCounts.put(cp.getName(), n + 1);
@@ -132,7 +132,7 @@ public abstract class DeckGeneratorBase {
break;
}
tDeck.add(cardDb.getCard(s));
tDeck.add(pool.getCard(s));
final int n = this.cardCounts.get(s);
this.cardCounts.put(s, n + 1);
@@ -175,13 +175,13 @@ public abstract class DeckGeneratorBase {
PaperCard cp;
if(edition != null)
cp = cardDb.getCard(basicLandName, edition);
cp = pool.getCard(basicLandName, edition);
else
cp = cardDb.getCard(basicLandName);
cp = pool.getCard(basicLandName);
String basicLandSet = cp.getEdition();
for (int i=0; i < nLand; i++) {
tDeck.add(cardDb.getCard(cp.getName(), basicLandSet, -1), 1);
tDeck.add(pool.getCard(cp.getName(), basicLandSet, -1), 1);
}
landsLeft -= nLand;
@@ -233,7 +233,7 @@ public abstract class DeckGeneratorBase {
final List<PaperCard> curvedRandomized = Lists.newArrayList();
for (PaperCard c : curved) {
this.cardCounts.put(c.getName(), 0);
curvedRandomized.add(cardDb.getCard(c.getName()));
curvedRandomized.add(pool.getCard(c.getName()));
}
addSome(addOfThisCmc, curvedRandomized);
@@ -250,7 +250,7 @@ public abstract class DeckGeneratorBase {
if (useArtifacts) {
hasColor = Predicates.or(hasColor, COLORLESS_CARDS);
}
return Iterables.filter(cardDb.getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES));
return Iterables.filter(pool.getAllCards(), Predicates.compose(Predicates.and(canPlay, hasColor), PaperCard.FN_GET_RULES));
}
protected static Map<String, Integer> countLands(ItemPool<PaperCard> outList) {

View File

@@ -18,10 +18,11 @@
package forge.deck.generation;
import com.google.common.collect.Lists;
import forge.card.ColorSet;
import forge.card.ICardDatabase;
import forge.card.MagicColor;
import forge.deck.CardPool;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.List;
@@ -54,18 +55,8 @@ public class DeckGeneratorMonoColor extends DeckGeneratorBase {
// 4x 7 - 20
// = 52x - card pool (before further random filtering)
/**
* <p>
* Constructor for Generate2ColorDeck.
* </p>
*
* @param clr1
* a {@link java.lang.String} object.
* @param clr2
* a {@link java.lang.String} object.
*/
public DeckGeneratorMonoColor(ICardDatabase cardDb, final String clr1) {
super(cardDb);
public DeckGeneratorMonoColor(IDeckGenPool pool, final String clr1) {
super(pool);
if (MagicColor.fromName(clr1) == 0) {
int color1 = r.nextInt(5);
colors = ColorSet.fromMask(MagicColor.WHITE << color1);

View File

@@ -0,0 +1,10 @@
package forge.deck.generation;
import forge.item.PaperCard;
public interface IDeckGenPool {
PaperCard getCard(String name);
PaperCard getCard(String name, String edition);
PaperCard getCard(String name, String edition, int artIndex);
Iterable<PaperCard> getAllCards();
}