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:
austinio7116
2017-05-03 10:49:53 +00:00
parent ffe6518f32
commit 7a355a84a1
18 changed files with 366 additions and 76 deletions

View File

@@ -8,6 +8,8 @@ import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import com.google.common.base.Predicate;
import forge.item.PaperCard;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
@@ -135,10 +137,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
updateDecks(DeckProxy.getAllConstructedDecks(), ItemManagerConfig.CONSTRUCTED_DECKS);
}
private void updateColors() {
private void updateColors(Predicate<PaperCard> formatFilter) {
lstDecks.setAllowMultipleSelections(true);
lstDecks.setPool(ColorDeckGenerator.getColorDecks(lstDecks, isAi));
lstDecks.setPool(ColorDeckGenerator.getColorDecks(lstDecks, formatFilter, isAi));
lstDecks.setup(ItemManagerConfig.STRING_ONLY);
btnRandom.setText("Random Colors");
@@ -277,7 +279,13 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener {
updateCustom();
break;
case COLOR_DECK:
updateColors();
updateColors(null);
break;
case STANDARD_COLOR_DECK:
updateColors(FModel.getFormats().getStandard().getFilterPrinted());
break;
case MODERN_COLOR_DECK:
updateColors(FModel.getFormats().getModern().getFilterPrinted());
break;
case THEME_DECK:
updateThemes();

View File

@@ -70,6 +70,8 @@ public enum CSubmenuGauntletQuick implements ICDoc {
// Find appropriate filename for new save, create and set new save file.
final List<DeckType> allowedDeckTypes = new ArrayList<DeckType>();
if (view.getBoxColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.COLOR_DECK); }
if (view.getBoxStandardColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.STANDARD_COLOR_DECK); }
if (view.getBoxModernColorDecks().isSelected()) { allowedDeckTypes.add(DeckType.MODERN_COLOR_DECK); }
if (view.getBoxThemeDecks().isSelected()) { allowedDeckTypes.add(DeckType.THEME_DECK); }
if (view.getBoxUserDecks().isSelected()) { allowedDeckTypes.add(DeckType.CUSTOM_DECK); }
if (view.getBoxQuestDecks().isSelected()) { allowedDeckTypes.add(DeckType.QUEST_OPPONENT_DECK); }

View File

@@ -51,6 +51,8 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
private final JCheckBox boxPreconDecks = new FCheckBox(DeckType.PRECONSTRUCTED_DECK.toString());
private final JCheckBox boxQuestDecks = new FCheckBox(DeckType.QUEST_OPPONENT_DECK.toString());
private final JCheckBox boxColorDecks = new FCheckBox(DeckType.COLOR_DECK.toString());
private final JCheckBox boxStandardColorDecks = new FCheckBox(DeckType.STANDARD_COLOR_DECK.toString());
private final JCheckBox boxModernColorDecks = new FCheckBox(DeckType.MODERN_COLOR_DECK.toString());
private final JCheckBox boxThemeDecks = new FCheckBox(DeckType.THEME_DECK.toString());
private final FDeckChooser lstDecks = new FDeckChooser(null, false);
@@ -78,6 +80,8 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
boxQuestDecks.setSelected(true);
boxThemeDecks.setSelected(true);
boxColorDecks.setSelected(true);
boxStandardColorDecks.setSelected(true);
boxModernColorDecks.setSelected(true);
sliOpponents.setMajorTickSpacing(5);
sliOpponents.setMinorTickSpacing(0);
@@ -98,7 +102,9 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
pnlOptions.add(boxPreconDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxQuestDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxThemeDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxColorDecks, "w 96%!, h 30px!, gap 2% 0 0 0");
pnlOptions.add(boxColorDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxStandardColorDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxModernColorDecks, "w 96%!, h 30px!, gap 2% 0 0 0");
}
/* (non-Javadoc)
@@ -171,6 +177,16 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
return boxColorDecks;
}
/** @return {@link javax.swing.JCheckBox} */
public JCheckBox getBoxStandardColorDecks() {
return boxStandardColorDecks;
}
/** @return {@link javax.swing.JCheckBox} */
public JCheckBox getBoxModernColorDecks() {
return boxModernColorDecks;
}
/** @return {@link javax.swing.JCheckBox} */
public JCheckBox getBoxThemeDecks() {
return boxThemeDecks;

View File

@@ -1,11 +1,12 @@
package forge.item;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.Iterables;
import forge.card.ColorSet;
import junit.framework.Assert;
import org.testng.annotations.BeforeTest;
@@ -155,6 +156,57 @@ public class DeckHintsTest {
Assert.assertEquals(1, hints.filter(list).size());
}
/**
* Test for finding dual lands for deck generation.
*/
@Test(timeOut = 1000, enabled = true)
void testFindDualLands() {
List<String> cardNames= Arrays.asList("tundra.txt", "hallowed_fountain.txt", "flooded_strand.txt", "prairie_stream.txt", "sunken_hollow.txt", "smoldering_marsh.txt");
List<PaperCard> cards = new ArrayList<>();
for (String name:cardNames){
cards.add(readCard(name));
}
final String pattern="Add \\{([WUBRG])\\} or \\{([WUBRG])\\} to your mana pool";
Pattern p = Pattern.compile(pattern);
for (PaperCard card:cards){
System.out.println(card.getRules().getOracleText());
Matcher matcher = p.matcher(card.getRules().getOracleText());
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
final String fetchPattern="Search your library for a ([^\\s]*) or ([^\\s]*) card";
final List<String> dLands = new ArrayList<String>();
Map<String,String> colorLookup= new HashMap<>();
colorLookup.put("Plains","W");
colorLookup.put("Forest","G");
colorLookup.put("Mountain","R");
colorLookup.put("Island","U");
colorLookup.put("Swamp","B");
Pattern p2 = Pattern.compile(fetchPattern);
for (PaperCard card:cards){
System.out.println(card.getName());
Matcher matcher = p2.matcher(card.getRules().getOracleText());
while (matcher.find()) {
List<String> manaColorNames = new ArrayList<>();
System.out.println(card.getName());
for (int i = 1; i <= matcher.groupCount(); i++) {
manaColorNames.add(colorLookup.get(matcher.group(i)));
}
System.out.println(manaColorNames.toString());
ColorSet manaColorSet = ColorSet.fromNames(manaColorNames);
}
}
System.out.println(dLands.toString());
return;
//Assert.assertNotNull(has);
}
/**
* Create a CardPrinted from the given filename.
*