mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Add 2 new random deck types - standard and modern legal random color decks. Also improved dual/tri land selection with oracle parsing. Generated decks now choose basic lands that match a card from the deck.
This commit is contained in:
@@ -3,15 +3,19 @@ package forge.deck;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.IItemManager;
|
||||
import forge.model.FModel;
|
||||
|
||||
public class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDeckGenerator> {
|
||||
public static List<DeckProxy> getColorDecks(final IItemManager<DeckProxy> lstDecks0, final boolean isAi0) {
|
||||
public static List<DeckProxy> getColorDecks(final IItemManager<DeckProxy> lstDecks0, final Predicate<PaperCard> formatFilter0, final boolean isAi0) {
|
||||
final String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
|
||||
"White", "Blue", "Black", "Red", "Green" };
|
||||
final List<DeckProxy> decks = new ArrayList<DeckProxy>();
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks0, isAi0));
|
||||
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks0, formatFilter0, isAi0));
|
||||
}
|
||||
return decks;
|
||||
}
|
||||
@@ -20,13 +24,15 @@ public class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDec
|
||||
private final int index;
|
||||
private final IItemManager<DeckProxy> lstDecks;
|
||||
private final boolean isAi;
|
||||
private final Predicate<PaperCard> formatFilter;
|
||||
|
||||
private ColorDeckGenerator(final String name0, final int index0, final IItemManager<DeckProxy> lstDecks0, final boolean isAi0) {
|
||||
private ColorDeckGenerator(final String name0, final int index0, final IItemManager<DeckProxy> lstDecks0,final Predicate<PaperCard> formatFilter0, final boolean isAi0) {
|
||||
super();
|
||||
name = name0;
|
||||
index = index0;
|
||||
lstDecks = lstDecks0;
|
||||
isAi = isAi0;
|
||||
formatFilter = formatFilter0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -51,7 +57,7 @@ public class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDec
|
||||
selection.add(deck.getName());
|
||||
}
|
||||
if (DeckgenUtil.colorCheck(selection)) {
|
||||
return DeckgenUtil.buildColorDeck(selection, isAi);
|
||||
return DeckgenUtil.buildColorDeck(selection, formatFilter, isAi);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ public enum DeckType {
|
||||
PRECONSTRUCTED_DECK("Preconstructed Decks"),
|
||||
QUEST_OPPONENT_DECK ("Quest Opponent Decks"),
|
||||
COLOR_DECK ("Random Color Decks"),
|
||||
STANDARD_COLOR_DECK ("Random Standard Color Decks"),
|
||||
MODERN_COLOR_DECK ("Random Modern Color Decks"),
|
||||
THEME_DECK ("Random Theme Decks"),
|
||||
RANDOM_DECK ("Random Decks"),
|
||||
NET_DECK ("Net Decks"),
|
||||
@@ -22,6 +24,8 @@ public enum DeckType {
|
||||
DeckType.PRECONSTRUCTED_DECK,
|
||||
DeckType.QUEST_OPPONENT_DECK,
|
||||
DeckType.COLOR_DECK,
|
||||
DeckType.STANDARD_COLOR_DECK,
|
||||
DeckType.MODERN_COLOR_DECK,
|
||||
DeckType.THEME_DECK,
|
||||
DeckType.RANDOM_DECK,
|
||||
DeckType.NET_DECK
|
||||
|
||||
@@ -13,6 +13,7 @@ import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.deck.generation.*;
|
||||
import forge.game.GameType;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.IItemManager;
|
||||
import forge.model.FModel;
|
||||
@@ -44,34 +45,48 @@ public class DeckgenUtil {
|
||||
* @param selection {@link java.lang.String} array
|
||||
* @return {@link forge.deck.Deck}
|
||||
*/
|
||||
public static Deck buildColorDeck(List<String> selection, boolean forAi) {
|
||||
|
||||
public static Deck buildColorDeck(List<String> selection, Predicate<PaperCard> formatFilter, boolean forAi) {
|
||||
try {
|
||||
final Deck deck;
|
||||
String deckName = null;
|
||||
|
||||
|
||||
DeckGeneratorBase gen = null;
|
||||
CardDb cardDb = FModel.getMagicDb().getCommonCards();
|
||||
if (selection.size() == 1) {
|
||||
gen = new DeckGeneratorMonoColor(cardDb, DeckFormat.Constructed, selection.get(0));
|
||||
}
|
||||
else if (selection.size() == 2) {
|
||||
gen = new DeckGenerator2Color(cardDb, DeckFormat.Constructed, selection.get(0), selection.get(1));
|
||||
}
|
||||
else if (selection.size() == 3) {
|
||||
gen = new DeckGenerator3Color(cardDb, DeckFormat.Constructed, selection.get(0), selection.get(1), selection.get(2));
|
||||
}
|
||||
else {
|
||||
gen = new DeckGenerator5Color(cardDb, DeckFormat.Constructed);
|
||||
deckName = "5 colors";
|
||||
if (formatFilter == null){
|
||||
if (selection.size() == 1) {
|
||||
gen = new DeckGeneratorMonoColor(cardDb, DeckFormat.Constructed,selection.get(0));
|
||||
}
|
||||
else if (selection.size() == 2) {
|
||||
gen = new DeckGenerator2Color(cardDb, DeckFormat.Constructed,selection.get(0), selection.get(1));
|
||||
}
|
||||
else if (selection.size() == 3) {
|
||||
gen = new DeckGenerator3Color(cardDb, DeckFormat.Constructed,selection.get(0), selection.get(1), selection.get(2));
|
||||
}
|
||||
else {
|
||||
gen = new DeckGenerator5Color(cardDb, DeckFormat.Constructed);
|
||||
deckName = "5 colors";
|
||||
}
|
||||
}else {
|
||||
if (selection.size() == 1) {
|
||||
gen = new DeckGeneratorMonoColor(cardDb, DeckFormat.Constructed, formatFilter, selection.get(0));
|
||||
} else if (selection.size() == 2) {
|
||||
gen = new DeckGenerator2Color(cardDb, DeckFormat.Constructed, formatFilter, selection.get(0), selection.get(1));
|
||||
} else if (selection.size() == 3) {
|
||||
gen = new DeckGenerator3Color(cardDb, DeckFormat.Constructed, formatFilter, selection.get(0), selection.get(1), selection.get(2));
|
||||
} else {
|
||||
gen = new DeckGenerator5Color(cardDb, DeckFormat.Constructed, formatFilter);
|
||||
deckName = "5 colors";
|
||||
}
|
||||
}
|
||||
gen.setSingleton(FModel.getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS));
|
||||
gen.setUseArtifacts(!FModel.getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
|
||||
final CardPool cards = gen.getDeck(60, forAi);
|
||||
|
||||
|
||||
if (null == deckName) {
|
||||
deckName = Lang.joinHomogenous(Arrays.asList(selection));
|
||||
}
|
||||
|
||||
|
||||
// After generating card lists, build deck.
|
||||
deck = new Deck("Random deck : " + deckName);
|
||||
deck.setDirectory("generated/color");
|
||||
@@ -81,7 +96,7 @@ public class DeckgenUtil {
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return buildColorDeck(selection, forAi); //try again if previous color deck couldn't be generated
|
||||
return buildColorDeck(selection, formatFilter, forAi); //try again if previous color deck couldn't be generated
|
||||
}
|
||||
|
||||
public static QuestEvent getQuestEvent(final String name) {
|
||||
@@ -98,6 +113,17 @@ public class DeckgenUtil {
|
||||
return duel;
|
||||
}
|
||||
|
||||
/** @return {@link forge.deck.Deck} */
|
||||
public static Deck getRandomColorDeck(Predicate<PaperCard> formatFilter, boolean forAi) {
|
||||
final int[] colorCount = new int[] {1, 2, 3};
|
||||
final int count = colorCount[MyRandom.getRandom().nextInt(colorCount.length)];
|
||||
final List<String> selection = new ArrayList<String>();
|
||||
|
||||
// A simulated selection of "random 1" will trigger the AI selection process.
|
||||
for (int i = 0; i < count; i++) { selection.add("Random"); }
|
||||
return DeckgenUtil.buildColorDeck(selection, formatFilter, forAi);
|
||||
}
|
||||
|
||||
/** @return {@link forge.deck.Deck} */
|
||||
public static Deck getRandomColorDeck(boolean forAi) {
|
||||
final int[] colorCount = new int[] {1, 2, 3, 5};
|
||||
@@ -106,8 +132,7 @@ public class DeckgenUtil {
|
||||
|
||||
// A simulated selection of "random 1" will trigger the AI selection process.
|
||||
for (int i = 0; i < count; i++) { selection.add("Random"); }
|
||||
|
||||
return DeckgenUtil.buildColorDeck(selection, forAi);
|
||||
return DeckgenUtil.buildColorDeck(selection, null, forAi);
|
||||
}
|
||||
|
||||
/** @return {@link forge.deck.Deck} */
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.game.GameType;
|
||||
import forge.game.IHasGameType;
|
||||
import forge.model.FModel;
|
||||
import forge.quest.QuestController;
|
||||
import forge.util.Aggregates;
|
||||
|
||||
@@ -91,12 +92,26 @@ public class RandomDeckGenerator extends DeckProxy implements Comparable<RandomD
|
||||
case QUEST_OPPONENT_DECK:
|
||||
return Aggregates.random(DeckProxy.getAllQuestEventAndChallenges()).getDeck();
|
||||
case COLOR_DECK:
|
||||
final List<String> colors = new ArrayList<String>();
|
||||
final int count = Aggregates.randomInt(1, 3);
|
||||
List<String> colors = new ArrayList<String>();
|
||||
int count = Aggregates.randomInt(1, 3);
|
||||
for (int i = 1; i <= count; i++) {
|
||||
colors.add("Random " + i);
|
||||
}
|
||||
return DeckgenUtil.buildColorDeck(colors, isAi);
|
||||
return DeckgenUtil.buildColorDeck(colors, null, isAi);
|
||||
case STANDARD_COLOR_DECK:
|
||||
colors = new ArrayList<String>();
|
||||
count = Aggregates.randomInt(1, 3);
|
||||
for (int i = 1; i <= count; i++) {
|
||||
colors.add("Random " + i);
|
||||
}
|
||||
return DeckgenUtil.buildColorDeck(colors, FModel.getFormats().getStandard().getFilterPrinted(), isAi);
|
||||
case MODERN_COLOR_DECK:
|
||||
colors = new ArrayList<String>();
|
||||
count = Aggregates.randomInt(1, 3);
|
||||
for (int i = 1; i <= count; i++) {
|
||||
colors.add("Random " + i);
|
||||
}
|
||||
return DeckgenUtil.buildColorDeck(colors, FModel.getFormats().getModern().getFilterPrinted(), isAi);
|
||||
case THEME_DECK:
|
||||
return Aggregates.random(DeckProxy.getAllThemeDecks()).getDeck();
|
||||
default:
|
||||
|
||||
@@ -29,6 +29,12 @@ public class GauntletUtil {
|
||||
deck = DeckgenUtil.getRandomColorDeck(true);
|
||||
eventNames.add("Random colors deck");
|
||||
break;
|
||||
case STANDARD_COLOR_DECK:
|
||||
deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getStandard().getFilterPrinted(),true);
|
||||
break;
|
||||
case MODERN_COLOR_DECK:
|
||||
deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getModern().getFilterPrinted(),true);
|
||||
break;
|
||||
case CUSTOM_DECK:
|
||||
deck = DeckgenUtil.getRandomCustomDeck();
|
||||
eventNames.add(deck.getName());
|
||||
|
||||
@@ -29,6 +29,12 @@ public class TournamentUtil {
|
||||
deck = DeckgenUtil.getRandomColorDeck(true);
|
||||
eventNames.add("Random colors deck");
|
||||
break;
|
||||
case STANDARD_COLOR_DECK:
|
||||
deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getStandard().getFilterPrinted(),true);
|
||||
break;
|
||||
case MODERN_COLOR_DECK:
|
||||
deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getModern().getFilterPrinted(),true);
|
||||
break;
|
||||
case CUSTOM_DECK:
|
||||
deck = DeckgenUtil.getRandomCustomDeck();
|
||||
eventNames.add(deck.getName());
|
||||
|
||||
Reference in New Issue
Block a user