mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
delete obselete deck generators
This commit is contained in:
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -11251,12 +11251,9 @@ src/main/java/forge/deck/DeckBase.java -text
|
|||||||
src/main/java/forge/deck/DeckGroup.java -text
|
src/main/java/forge/deck/DeckGroup.java -text
|
||||||
src/main/java/forge/deck/DeckRecognizer.java -text
|
src/main/java/forge/deck/DeckRecognizer.java -text
|
||||||
src/main/java/forge/deck/DeckSection.java -text
|
src/main/java/forge/deck/DeckSection.java -text
|
||||||
src/main/java/forge/deck/generate/DeckGenerator.java -text
|
|
||||||
src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain
|
src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain
|
||||||
src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/plain
|
src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/plain
|
||||||
src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain
|
src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain
|
||||||
src/main/java/forge/deck/generate/GenerateConstructedDeck.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/deck/generate/GenerateConstructedMultiColorDeck.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/deck/generate/GenerateDeckUtil.java -text
|
src/main/java/forge/deck/generate/GenerateDeckUtil.java -text
|
||||||
src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain
|
src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain
|
||||||
src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain
|
src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain
|
||||||
@@ -11531,8 +11528,6 @@ src/test/java/forge/card/mana/ManaPartTest.java svneol=native#text/plain
|
|||||||
src/test/java/forge/deck/generate/Generate2ColorDeckTest.java svneol=native#text/plain
|
src/test/java/forge/deck/generate/Generate2ColorDeckTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/deck/generate/Generate3ColorDeckTest.java svneol=native#text/plain
|
src/test/java/forge/deck/generate/Generate3ColorDeckTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/deck/generate/Generate5ColorDeckTest.java svneol=native#text/plain
|
src/test/java/forge/deck/generate/Generate5ColorDeckTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/deck/generate/GenerateConstructedDeckTest.java svneol=native#text/plain
|
|
||||||
src/test/java/forge/deck/generate/GenerateConstructedMultiColorDeckTest.java svneol=native#text/plain
|
|
||||||
src/test/java/forge/gui/ListChooserTest.java svneol=native#text/plain
|
src/test/java/forge/gui/ListChooserTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/gui/game/CardDetailPanelTest.java svneol=native#text/plain
|
src/test/java/forge/gui/game/CardDetailPanelTest.java svneol=native#text/plain
|
||||||
src/test/java/forge/model/BuildInfoTest.java -text
|
src/test/java/forge/model/BuildInfoTest.java -text
|
||||||
|
|||||||
@@ -1,289 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.deck.generate;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import forge.Constant;
|
|
||||||
import forge.PlayerType;
|
|
||||||
import forge.deck.Deck;
|
|
||||||
import forge.gui.GuiUtils;
|
|
||||||
import forge.util.MyRandom;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class to hold add deck generation routines, methods moved from
|
|
||||||
* OldGuiNewGame.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public abstract class DeckGenerator {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* genDecks.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param playerType
|
|
||||||
* the player type {@link java.lang.String} object.
|
|
||||||
*/
|
|
||||||
public static void genDecks(final PlayerType playerType) {
|
|
||||||
// TODO jendave to refactor deck generation
|
|
||||||
Deck d = null;
|
|
||||||
|
|
||||||
final ArrayList<String> decks = new ArrayList<String>();
|
|
||||||
decks.add("2-Color Deck");
|
|
||||||
decks.add("3-Color Deck");
|
|
||||||
decks.add("5-Color Deck");
|
|
||||||
decks.add("2-Color Deck (original)");
|
|
||||||
decks.add("3-Color Deck (original)");
|
|
||||||
decks.add("5-Color Deck (original)");
|
|
||||||
decks.add("Semi-Random Theme Deck");
|
|
||||||
|
|
||||||
final String playerName = playerType.equals(PlayerType.HUMAN) ? "Human" : "Computer";
|
|
||||||
final String prompt = String.format("Generate %s Deck", playerName);
|
|
||||||
|
|
||||||
final Object o = GuiUtils.getChoice(prompt, decks.toArray());
|
|
||||||
|
|
||||||
if (o.toString().equals(decks.get(0))) {
|
|
||||||
d = DeckGenerator.generate2ColorDeck(playerType);
|
|
||||||
} else if (o.toString().equals(decks.get(1))) {
|
|
||||||
d = DeckGenerator.generate3ColorDeck(playerType);
|
|
||||||
} else if (o.toString().equals(decks.get(2))) {
|
|
||||||
d = DeckGenerator.generate5ColorDeck(playerType);
|
|
||||||
} else if (o.toString().equals(decks.get(3))) {
|
|
||||||
d = DeckGenerator.generateConstructedDeck();
|
|
||||||
} else if (o.toString().equals(decks.get(4))) {
|
|
||||||
d = DeckGenerator.generateConstructed3ColorDeck();
|
|
||||||
} else if (o.toString().equals(decks.get(5))) {
|
|
||||||
d = DeckGenerator.generateConstructed5ColorDeck();
|
|
||||||
} else if (o.toString().equals(decks.get(6))) {
|
|
||||||
d = DeckGenerator.generateConstructedThemeDeck();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (playerType.equals(PlayerType.HUMAN)) {
|
|
||||||
Constant.Runtime.HUMAN_DECK[0] = d;
|
|
||||||
} else if (playerType.equals(PlayerType.COMPUTER)) {
|
|
||||||
Constant.Runtime.COMPUTER_DECK[0] = d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generateConstructedDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generateConstructedDeck() {
|
|
||||||
final GenerateConstructedDeck gen = new GenerateConstructedDeck();
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.generateDeck());
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generateConstructed3ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generateConstructed3ColorDeck() {
|
|
||||||
final GenerateConstructedMultiColorDeck gen = new GenerateConstructedMultiColorDeck();
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.generate3ColorDeck());
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generateConstructed5ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generateConstructed5ColorDeck() {
|
|
||||||
final GenerateConstructedMultiColorDeck gen = new GenerateConstructedMultiColorDeck();
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.generate5ColorDeck());
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generateConstructedThemeDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generateConstructedThemeDeck() {
|
|
||||||
final GenerateThemeDeck gen = new GenerateThemeDeck();
|
|
||||||
final ArrayList<String> tNames = GenerateThemeDeck.getThemeNames();
|
|
||||||
tNames.add(0, "Random");
|
|
||||||
final Object o = GuiUtils.getChoice("Select a theme.", tNames.toArray());
|
|
||||||
|
|
||||||
String stDeck;
|
|
||||||
if (o.toString().equals("Random")) {
|
|
||||||
final Random r = MyRandom.getRandom();
|
|
||||||
stDeck = tNames.get(r.nextInt(tNames.size() - 1) + 1);
|
|
||||||
} else {
|
|
||||||
stDeck = o.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.getThemeDeck(stDeck, 60));
|
|
||||||
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generate2ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param p
|
|
||||||
* a {@link java.lang.String} object.
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generate2ColorDeck(final PlayerType p) {
|
|
||||||
final Random r = MyRandom.getRandom();
|
|
||||||
|
|
||||||
final ArrayList<String> colors = new ArrayList<String>();
|
|
||||||
colors.add("Random");
|
|
||||||
colors.add("white");
|
|
||||||
colors.add("blue");
|
|
||||||
colors.add("black");
|
|
||||||
colors.add("red");
|
|
||||||
colors.add("green");
|
|
||||||
|
|
||||||
String c1;
|
|
||||||
String c2;
|
|
||||||
if (p.equals(PlayerType.HUMAN)) {
|
|
||||||
c1 = GuiUtils.getChoice("Select first color.", colors.toArray()).toString();
|
|
||||||
|
|
||||||
if (c1.equals("Random")) {
|
|
||||||
c1 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
colors.remove(c1);
|
|
||||||
|
|
||||||
c2 = GuiUtils.getChoice("Select second color.", colors.toArray()).toString();
|
|
||||||
|
|
||||||
if (c2.equals("Random")) {
|
|
||||||
c2 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// if (p.equals("C"))
|
|
||||||
c1 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
colors.remove(c1);
|
|
||||||
c2 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
final Generate2ColorDeck gen = new Generate2ColorDeck(c1, c2);
|
|
||||||
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.get2ColorDeck(60, p));
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generate3ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param p
|
|
||||||
* a {@link java.lang.String} object.
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generate3ColorDeck(final PlayerType p) {
|
|
||||||
final Random r = MyRandom.getRandom();
|
|
||||||
|
|
||||||
final ArrayList<String> colors = new ArrayList<String>();
|
|
||||||
colors.add("Random");
|
|
||||||
colors.add("white");
|
|
||||||
colors.add("blue");
|
|
||||||
colors.add("black");
|
|
||||||
colors.add("red");
|
|
||||||
colors.add("green");
|
|
||||||
|
|
||||||
String c1;
|
|
||||||
String c2;
|
|
||||||
String c3;
|
|
||||||
if (p.equals(PlayerType.HUMAN)) {
|
|
||||||
c1 = GuiUtils.getChoice("Select first color.", colors.toArray()).toString();
|
|
||||||
|
|
||||||
if (c1.equals("Random")) {
|
|
||||||
c1 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
colors.remove(c1);
|
|
||||||
|
|
||||||
c2 = GuiUtils.getChoice("Select second color.", colors.toArray()).toString();
|
|
||||||
|
|
||||||
if (c2.equals("Random")) {
|
|
||||||
c2 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
colors.remove(c2);
|
|
||||||
|
|
||||||
c3 = GuiUtils.getChoice("Select third color.", colors.toArray()).toString();
|
|
||||||
if (c3.equals("Random")) {
|
|
||||||
c3 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// if (p.equals("C"))
|
|
||||||
c1 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
colors.remove(c1);
|
|
||||||
c2 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
colors.remove(c2);
|
|
||||||
c3 = colors.get(r.nextInt(colors.size() - 1) + 1);
|
|
||||||
}
|
|
||||||
final Generate3ColorDeck gen = new Generate3ColorDeck(c1, c2, c3);
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.get3ColorDeck(60, p));
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generate5ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param p
|
|
||||||
* a {@link java.lang.String} object.
|
|
||||||
* @return a {@link forge.deck.Deck} object.
|
|
||||||
*/
|
|
||||||
private static Deck generate5ColorDeck(final PlayerType p) {
|
|
||||||
// Random r = MyRandom.random;
|
|
||||||
|
|
||||||
// ArrayList<String> colors = new ArrayList<String>();
|
|
||||||
// colors.add("Random");
|
|
||||||
// colors.add("white");
|
|
||||||
// colors.add("blue");
|
|
||||||
// colors.add("black");
|
|
||||||
// colors.add("red");
|
|
||||||
// colors.add("green");
|
|
||||||
|
|
||||||
final Generate5ColorDeck gen = new Generate5ColorDeck("white", "blue", "black", "red", "green");
|
|
||||||
final Deck deck = new Deck();
|
|
||||||
deck.getMain().add(gen.get5ColorDeck(60, p));
|
|
||||||
return deck;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.deck.generate;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.Card;
|
|
||||||
import forge.CardFilter;
|
|
||||||
import forge.CardList;
|
|
||||||
import forge.CardListFilter;
|
|
||||||
import forge.CardListUtil;
|
|
||||||
import forge.CardUtil;
|
|
||||||
import forge.Constant;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* GenerateConstructedDeck class.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class GenerateConstructedDeck {
|
|
||||||
private String color1;
|
|
||||||
private String color2;
|
|
||||||
|
|
||||||
private final Map<String, String> map = new HashMap<String, String>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Constructor for GenerateConstructedDeck.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public GenerateConstructedDeck() {
|
|
||||||
this.setupMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* setupMap.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
private void setupMap() {
|
|
||||||
this.map.put(Constant.Color.BLACK, "Swamp");
|
|
||||||
this.map.put(Constant.Color.BLUE, "Island");
|
|
||||||
this.map.put(Constant.Color.GREEN, "Forest");
|
|
||||||
this.map.put(Constant.Color.RED, "Mountain");
|
|
||||||
this.map.put(Constant.Color.WHITE, "Plains");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generateDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
public final CardList generateDeck() {
|
|
||||||
CardList deck;
|
|
||||||
|
|
||||||
int check;
|
|
||||||
|
|
||||||
do {
|
|
||||||
deck = this.get2ColorDeck();
|
|
||||||
check = deck.getType("Creature").size();
|
|
||||||
|
|
||||||
} while ((check < 16) || (24 < check));
|
|
||||||
|
|
||||||
this.addLand(deck);
|
|
||||||
|
|
||||||
if (deck.size() != 60) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
|
||||||
+ deck.size());
|
|
||||||
}
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 25 lands
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* addLand.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param list
|
|
||||||
* a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private void addLand(final CardList list) {
|
|
||||||
Card land;
|
|
||||||
for (int i = 0; i < 13; i++) {
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color1).toString(), AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color2).toString(), AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
} // addLand()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a CardList from the set of all cards that meets the criteria for
|
|
||||||
* color(s), type, whether the card is suitable for placement in random
|
|
||||||
* decks and in AI decks, etc.
|
|
||||||
*
|
|
||||||
* @see #filterBadCards(Iterable)
|
|
||||||
*
|
|
||||||
* @return a subset of cards <= the set of all cards; might be empty, but
|
|
||||||
* never null
|
|
||||||
*/
|
|
||||||
private CardList getCards() {
|
|
||||||
return this.filterBadCards(AllZone.getCardFactory());
|
|
||||||
} // getCards()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get2ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get2ColorDeck() {
|
|
||||||
final CardList deck = this.get2Colors(this.getCards());
|
|
||||||
|
|
||||||
final CardList out = new CardList();
|
|
||||||
deck.shuffle();
|
|
||||||
|
|
||||||
// trim deck size down to 34 cards, presumes 26 land, for a total of 60
|
|
||||||
// cards
|
|
||||||
for (int i = 0; (i < 34) && (i < deck.size()); i++) {
|
|
||||||
out.add(deck.get(i));
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get2Colors.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param in
|
|
||||||
* a {@link forge.CardList} object.
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get2Colors(final CardList in) {
|
|
||||||
int a;
|
|
||||||
int b;
|
|
||||||
|
|
||||||
do {
|
|
||||||
a = CardUtil.getRandomIndex(Constant.Color.ONLY_COLORS);
|
|
||||||
b = CardUtil.getRandomIndex(Constant.Color.ONLY_COLORS);
|
|
||||||
} while (a == b); // do not want to get the same color twice
|
|
||||||
|
|
||||||
this.color1 = Constant.Color.ONLY_COLORS[a];
|
|
||||||
this.color2 = Constant.Color.ONLY_COLORS[b];
|
|
||||||
|
|
||||||
CardList out = new CardList();
|
|
||||||
out.addAll(CardListUtil.getColor(in, this.color1));
|
|
||||||
out.addAll(CardListUtil.getColor(in, this.color2));
|
|
||||||
out.shuffle();
|
|
||||||
|
|
||||||
final CardList artifact = in.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
// is this really a colorless artifact and not something
|
|
||||||
// weird like Sarcomite Myr which is a colored artifact
|
|
||||||
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.COLORLESS)
|
|
||||||
&& !Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
out.addAll(artifact);
|
|
||||||
|
|
||||||
out = out.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
if (c.isCreature() && (c.getNetAttack() <= 1)
|
|
||||||
&& Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_NOSMALL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
out = this.filterBadCards(out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a CardList from the given sequence that meets the criteria for
|
|
||||||
* color(s), type, whether the card is suitable for placement in random
|
|
||||||
* decks and in AI decks, etc.
|
|
||||||
*
|
|
||||||
* @param sequence
|
|
||||||
* an iterable over Card instances
|
|
||||||
*
|
|
||||||
* @return a subset of sequence <= sequence; might be empty, but never null
|
|
||||||
*/
|
|
||||||
private CardList filterBadCards(final Iterable<Card> sequence) {
|
|
||||||
|
|
||||||
final ArrayList<Card> goodLand = new ArrayList<Card>();
|
|
||||||
|
|
||||||
final CardList out = CardFilter.filter(sequence, new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
final ArrayList<String> list = CardUtil.getColors(c);
|
|
||||||
if (list.size() == 2) {
|
|
||||||
if (!(list.contains(GenerateConstructedDeck.this.color1) && list
|
|
||||||
.contains(GenerateConstructedDeck.this.color2))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ((CardUtil.getColors(c).size() <= 2 // only dual colored
|
|
||||||
)
|
|
||||||
// gold cards
|
|
||||||
&& !c.isLand() // no land
|
|
||||||
&& !c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True"))
|
|
||||||
// OR very important
|
|
||||||
|| goodLand.contains(c.getName());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return out;
|
|
||||||
} // filterBadCards()
|
|
||||||
}
|
|
||||||
@@ -1,531 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.deck.generate;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.Card;
|
|
||||||
import forge.CardFilter;
|
|
||||||
import forge.CardList;
|
|
||||||
import forge.CardListFilter;
|
|
||||||
import forge.CardListUtil;
|
|
||||||
import forge.CardUtil;
|
|
||||||
import forge.Constant;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* GenerateConstructedMultiColorDeck class.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @author Forge
|
|
||||||
* @version $Id$
|
|
||||||
*/
|
|
||||||
public class GenerateConstructedMultiColorDeck {
|
|
||||||
private String color1;
|
|
||||||
private String color2;
|
|
||||||
private String color3;
|
|
||||||
private String color4;
|
|
||||||
private String color5;
|
|
||||||
|
|
||||||
private final Map<String, String> map = new HashMap<String, String>();
|
|
||||||
private final Map<String, String[]> multiMap = new HashMap<String, String[]>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Constructor for GenerateConstructedMultiColorDeck.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public GenerateConstructedMultiColorDeck() {
|
|
||||||
this.setupBasicLandMap();
|
|
||||||
this.setupMultiMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* setupBasicLandMap.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
private void setupBasicLandMap() {
|
|
||||||
this.map.put(Constant.Color.BLACK, "Swamp");
|
|
||||||
this.map.put(Constant.Color.BLUE, "Island");
|
|
||||||
this.map.put(Constant.Color.GREEN, "Forest");
|
|
||||||
this.map.put(Constant.Color.RED, "Mountain");
|
|
||||||
this.map.put(Constant.Color.WHITE, "Plains");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* setupMultiMap.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
private void setupMultiMap() {
|
|
||||||
this.multiMap.put(Constant.Color.BLACK + Constant.Color.BLUE,
|
|
||||||
new String[] { "Underground Sea", "Watery Grave" });
|
|
||||||
this.multiMap.put(Constant.Color.BLACK + Constant.Color.GREEN, new String[] { "Bayou", "Overgrown Tomb" });
|
|
||||||
this.multiMap.put(Constant.Color.BLACK + Constant.Color.RED, new String[] { "Badlands", "Blood Crypt" });
|
|
||||||
this.multiMap.put(Constant.Color.BLACK + Constant.Color.WHITE, new String[] { "Scrubland", "Godless Shrine" });
|
|
||||||
this.multiMap.put(Constant.Color.BLUE + Constant.Color.BLACK,
|
|
||||||
new String[] { "Underground Sea", "Watery Grave" });
|
|
||||||
this.multiMap.put(Constant.Color.BLUE + Constant.Color.GREEN,
|
|
||||||
new String[] { "Tropical Island", "Breeding Pool" });
|
|
||||||
this.multiMap.put(Constant.Color.BLUE + Constant.Color.RED, new String[] { "Volcanic Island", "Steam Vents" });
|
|
||||||
this.multiMap.put(Constant.Color.BLUE + Constant.Color.WHITE, new String[] { "Tundra", "Hallowed Fountain" });
|
|
||||||
this.multiMap.put(Constant.Color.GREEN + Constant.Color.BLACK, new String[] { "Bayou", "Overgrown Tomb" });
|
|
||||||
this.multiMap.put(Constant.Color.GREEN + Constant.Color.BLUE,
|
|
||||||
new String[] { "Tropical Island", "Breeding Pool" });
|
|
||||||
this.multiMap.put(Constant.Color.GREEN + Constant.Color.RED, new String[] { "Taiga", "Stomping Ground" });
|
|
||||||
this.multiMap.put(Constant.Color.GREEN + Constant.Color.WHITE, new String[] { "Savannah", "Temple Garden" });
|
|
||||||
this.multiMap.put(Constant.Color.RED + Constant.Color.BLACK, new String[] { "Badlands", "Blood Crypt" });
|
|
||||||
this.multiMap.put(Constant.Color.RED + Constant.Color.BLUE, new String[] { "Volcanic Island", "Steam Vents" });
|
|
||||||
this.multiMap.put(Constant.Color.RED + Constant.Color.GREEN, new String[] { "Taiga", "Stomping Ground" });
|
|
||||||
this.multiMap.put(Constant.Color.RED + Constant.Color.WHITE, new String[] { "Plateau", "Sacred Foundry" });
|
|
||||||
this.multiMap.put(Constant.Color.WHITE + Constant.Color.BLACK, new String[] { "Scrubland", "Godless Shrine" });
|
|
||||||
this.multiMap.put(Constant.Color.WHITE + Constant.Color.BLUE, new String[] { "Tundra", "Hallowed Fountain" });
|
|
||||||
this.multiMap.put(Constant.Color.WHITE + Constant.Color.GREEN, new String[] { "Savannah", "Temple Garden" });
|
|
||||||
this.multiMap.put(Constant.Color.WHITE + Constant.Color.RED, new String[] { "Plateau", "Sacred Foundry" });
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generate3ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
public final CardList generate3ColorDeck() {
|
|
||||||
CardList deck;
|
|
||||||
|
|
||||||
int check;
|
|
||||||
|
|
||||||
do {
|
|
||||||
deck = this.get3ColorDeck();
|
|
||||||
check = deck.getType("Creature").size();
|
|
||||||
|
|
||||||
} while ((check < 16) || (24 < check));
|
|
||||||
|
|
||||||
this.addLand(deck, 3);
|
|
||||||
|
|
||||||
if (deck.size() != 60) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
|
||||||
+ deck.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* generate5ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
public final CardList generate5ColorDeck() {
|
|
||||||
CardList deck;
|
|
||||||
|
|
||||||
deck = this.get5ColorDeck();
|
|
||||||
|
|
||||||
this.addLand(deck, 5);
|
|
||||||
|
|
||||||
if (deck.size() != 60) {
|
|
||||||
throw new RuntimeException(
|
|
||||||
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
|
||||||
+ deck.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* addLand.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param list
|
|
||||||
* a {@link forge.CardList} object.
|
|
||||||
* @param colors
|
|
||||||
* a int.
|
|
||||||
*/
|
|
||||||
private void addLand(final CardList list, final int colors) {
|
|
||||||
if (colors == 3) {
|
|
||||||
final int numberBasic = 2;
|
|
||||||
Card land;
|
|
||||||
for (int i = 0; i < numberBasic; i++) {
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color1).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color2).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color3).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int numberDual = 4;
|
|
||||||
for (int i = 0; i < numberDual; i++) {
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color2)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color3)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color2 + this.color3)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color2)[1],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color3)[1],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color2 + this.color3)[1],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
} else if (colors == 5) {
|
|
||||||
final int numberBasic = 1;
|
|
||||||
Card land;
|
|
||||||
for (int i = 0; i < numberBasic; i++) {
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color1).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color2).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color3).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color4).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.map.get(this.color5).toString(),
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int numberDual = 2;
|
|
||||||
for (int i = 0; i < numberDual; i++) {
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color2)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color3)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color4)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color1 + this.color5)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color2 + this.color3)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color2 + this.color4)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color2 + this.color5)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color3 + this.color4)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color3 + this.color5)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
|
|
||||||
land = AllZone.getCardFactory().getCard(this.multiMap.get(this.color4 + this.color5)[0],
|
|
||||||
AllZone.getComputerPlayer());
|
|
||||||
list.add(land);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} // addLand()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters out cards by color and their suitability for being placed in a
|
|
||||||
* randomly created deck.
|
|
||||||
*
|
|
||||||
* @param colors
|
|
||||||
* the number of different colors the deck should have; if this
|
|
||||||
* is a number other than 3 or 5, we return an empty list.
|
|
||||||
*
|
|
||||||
* @return a subset of all cards in the CardFactory database which might be
|
|
||||||
* empty, but never null
|
|
||||||
*/
|
|
||||||
private CardList getCards(final int colors) {
|
|
||||||
return this.filterBadCards(AllZone.getCardFactory(), colors);
|
|
||||||
} // getCards()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get3ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get3ColorDeck() {
|
|
||||||
final CardList deck = this.get3Colors(this.getCards(3));
|
|
||||||
|
|
||||||
final CardList out = new CardList();
|
|
||||||
deck.shuffle();
|
|
||||||
|
|
||||||
// trim deck size down to 36 cards, presumes 24 land, for a total of 60
|
|
||||||
// cards
|
|
||||||
for (int i = 0; (i < 36) && (i < deck.size()); i++) {
|
|
||||||
out.add(deck.get(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get5ColorDeck.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get5ColorDeck() {
|
|
||||||
final CardList deck = this.get5Colors(this.getCards(5));
|
|
||||||
|
|
||||||
final CardList out = new CardList();
|
|
||||||
deck.shuffle();
|
|
||||||
|
|
||||||
// trim deck size down to 36 cards, presumes 24 land, for a total of 60
|
|
||||||
// cards
|
|
||||||
for (int i = 0; (i < 36) && (i < deck.size()); i++) {
|
|
||||||
out.add(deck.get(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get3Colors.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param in
|
|
||||||
* a {@link forge.CardList} object.
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get3Colors(final CardList in) {
|
|
||||||
int a;
|
|
||||||
int b;
|
|
||||||
int c;
|
|
||||||
|
|
||||||
a = CardUtil.getRandomIndex(Constant.Color.ONLY_COLORS);
|
|
||||||
do {
|
|
||||||
b = CardUtil.getRandomIndex(Constant.Color.ONLY_COLORS);
|
|
||||||
c = CardUtil.getRandomIndex(Constant.Color.ONLY_COLORS);
|
|
||||||
} while ((a == b) || (a == c) || (b == c)); // do not want to get the
|
|
||||||
// same
|
|
||||||
// color thrice
|
|
||||||
|
|
||||||
this.color1 = Constant.Color.ONLY_COLORS[a];
|
|
||||||
this.color2 = Constant.Color.ONLY_COLORS[b];
|
|
||||||
this.color3 = Constant.Color.ONLY_COLORS[c];
|
|
||||||
|
|
||||||
CardList out = new CardList();
|
|
||||||
out.addAll(CardListUtil.getColor(in, this.color1));
|
|
||||||
out.addAll(CardListUtil.getColor(in, this.color2));
|
|
||||||
out.addAll(CardListUtil.getColor(in, this.color3));
|
|
||||||
out.shuffle();
|
|
||||||
|
|
||||||
final CardList artifact = in.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
// is this really a colorless artifact and not something
|
|
||||||
// wierd like Sarcomite Myr which is a colored artifact
|
|
||||||
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.COLORLESS)
|
|
||||||
&& !Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
out.addAll(artifact);
|
|
||||||
|
|
||||||
out = out.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
if (c.isCreature() && (c.getNetAttack() <= 1)
|
|
||||||
&& Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_NOSMALL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
out = this.filterBadCards(out, 3);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* get5Colors.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param in
|
|
||||||
* a {@link forge.CardList} object.
|
|
||||||
* @return a {@link forge.CardList} object.
|
|
||||||
*/
|
|
||||||
private CardList get5Colors(final CardList in) {
|
|
||||||
|
|
||||||
this.color1 = Constant.Color.BLACK;
|
|
||||||
this.color2 = Constant.Color.BLUE;
|
|
||||||
this.color3 = Constant.Color.GREEN;
|
|
||||||
this.color4 = Constant.Color.RED;
|
|
||||||
this.color5 = Constant.Color.WHITE;
|
|
||||||
|
|
||||||
CardList out = new CardList();
|
|
||||||
/*
|
|
||||||
* out.addAll(CardListUtil.getColor(in, color1));
|
|
||||||
* out.addAll(CardListUtil.getColor(in, color2));
|
|
||||||
* out.addAll(CardListUtil.getColor(in, color3));
|
|
||||||
* out.addAll(CardListUtil.getColor(in, color4));
|
|
||||||
* out.addAll(CardListUtil.getColor(in, color5));
|
|
||||||
*/
|
|
||||||
out.addAll(CardListUtil.getGoldCards(in));
|
|
||||||
out.shuffle();
|
|
||||||
|
|
||||||
final CardList artifact = in.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
// is this really a colorless artifact and not something
|
|
||||||
// wierd like Sarcomite Myr which is a colored artifact
|
|
||||||
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.COLORLESS)
|
|
||||||
&& !Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
out.addAll(artifact);
|
|
||||||
|
|
||||||
out = out.filter(new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
if (c.isCreature() && (c.getNetAttack() <= 1)
|
|
||||||
&& Singletons.getModel().getPreferences().getPrefBoolean(FPref.DECKGEN_NOSMALL)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
out = this.filterBadCards(out, 3);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters out cards by color and their suitability for being placed in a
|
|
||||||
* randomly created deck.
|
|
||||||
*
|
|
||||||
* @param sequence
|
|
||||||
* an Iterable of Card instances
|
|
||||||
*
|
|
||||||
* @param colors
|
|
||||||
* the number of different colors the deck should have; if this
|
|
||||||
* is a number other than 3 or 5, we return an empty list.
|
|
||||||
*
|
|
||||||
* @return a subset of sequence <= sequence which might be empty, but never
|
|
||||||
* null
|
|
||||||
*/
|
|
||||||
private CardList filterBadCards(final Iterable<Card> sequence, final int colors) {
|
|
||||||
final ArrayList<Card> goodLand = new ArrayList<Card>();
|
|
||||||
// goodLand.add("Faerie Conclave");
|
|
||||||
// goodLand.add("Forbidding Watchtower");
|
|
||||||
// goodLand.add("Treetop Village");
|
|
||||||
|
|
||||||
CardList out = new CardList();
|
|
||||||
if (colors == 3) {
|
|
||||||
|
|
||||||
out = CardFilter.filter(sequence, new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
final ArrayList<String> list = CardUtil.getColors(c);
|
|
||||||
|
|
||||||
if (list.size() == 3) {
|
|
||||||
if (!list.contains(GenerateConstructedMultiColorDeck.this.color1)
|
|
||||||
|| !list.contains(GenerateConstructedMultiColorDeck.this.color2)
|
|
||||||
|| !list.contains(GenerateConstructedMultiColorDeck.this.color3)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (list.size() == 2) {
|
|
||||||
if (!(list.contains(GenerateConstructedMultiColorDeck.this.color1) && list
|
|
||||||
.contains(GenerateConstructedMultiColorDeck.this.color2))
|
|
||||||
&& !(list.contains(GenerateConstructedMultiColorDeck.this.color1) && list
|
|
||||||
.contains(GenerateConstructedMultiColorDeck.this.color3))
|
|
||||||
&& !(list.contains(GenerateConstructedMultiColorDeck.this.color2) && list
|
|
||||||
.contains(GenerateConstructedMultiColorDeck.this.color3))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((CardUtil.getColors(c).size() <= 3) && !c.isLand() && // no
|
|
||||||
// land
|
|
||||||
!c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True"))
|
|
||||||
|| goodLand.contains(c.getName()); // OR very
|
|
||||||
// important
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (colors == 5) {
|
|
||||||
out = CardFilter.filter(sequence, new CardListFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean addCard(final Card c) {
|
|
||||||
return ((CardUtil.getColors(c).size() >= 2) && // only get
|
|
||||||
// multicolored
|
|
||||||
// cards
|
|
||||||
!c.isLand() && // no land
|
|
||||||
!c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True"))
|
|
||||||
|| goodLand.contains(c.getName()); // OR very
|
|
||||||
// important
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
} // filterBadCards()
|
|
||||||
}
|
|
||||||
@@ -28,8 +28,9 @@ import javax.swing.SwingUtilities;
|
|||||||
|
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
import forge.PlayerType;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.generate.GenerateConstructedDeck;
|
import forge.deck.generate.Generate2ColorDeck;
|
||||||
import forge.deck.io.DeckSerializer;
|
import forge.deck.io.DeckSerializer;
|
||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
|
|
||||||
@@ -95,11 +96,11 @@ public final class MenuCommon extends MenuBase<Deck> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Deck genConstructed = new Deck();
|
Deck genConstructed = new Deck();
|
||||||
genConstructed.getMain().add((new GenerateConstructedDeck()).generateDeck());
|
genConstructed.getMain().add((new Generate2ColorDeck("AI", "AI")).get2ColorDeck(60, PlayerType.HUMAN));
|
||||||
getController().setModel(genConstructed);
|
getController().setModel(genConstructed);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final File getImportFilename() {
|
private File getImportFilename() {
|
||||||
final JFileChooser chooser = new JFileChooser(MenuCommon.previousDirectory);
|
final JFileChooser chooser = new JFileChooser(MenuCommon.previousDirectory);
|
||||||
|
|
||||||
chooser.addChoosableFileFilter(DeckSerializer.DCK_FILTER);
|
chooser.addChoosableFileFilter(DeckSerializer.DCK_FILTER);
|
||||||
@@ -113,7 +114,7 @@ public final class MenuCommon extends MenuBase<Deck> {
|
|||||||
return null;
|
return null;
|
||||||
} // openFileDialog()
|
} // openFileDialog()
|
||||||
|
|
||||||
private final void importDeck() {
|
private void importDeck() {
|
||||||
final File file = this.getImportFilename();
|
final File file = this.getImportFilename();
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
} else if (file.getName().endsWith(".dck")) {
|
} else if (file.getName().endsWith(".dck")) {
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
package forge.deck.generate;
|
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import forge.CardList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA. User: dhudson
|
|
||||||
*/
|
|
||||||
@Test(groups = { "UnitTest" }, timeOut = 1000)
|
|
||||||
public class GenerateConstructedDeckTest {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate constructed deck test1.
|
|
||||||
*/
|
|
||||||
@Test(enabled = false, timeOut = 1000)
|
|
||||||
public void generateConstructedDeckTest1() {
|
|
||||||
final GenerateConstructedDeck g = new GenerateConstructedDeck();
|
|
||||||
|
|
||||||
for (int i = 0; i < 50; i++) {
|
|
||||||
final CardList c = g.generateDeck();
|
|
||||||
System.out.println(c.getType("Creature").size() + " - " + c.size());
|
|
||||||
}
|
|
||||||
System.exit(1);
|
|
||||||
|
|
||||||
} // main
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
package forge.deck.generate;
|
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
|
||||||
|
|
||||||
import forge.CardList;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA. User: dhudson
|
|
||||||
*/
|
|
||||||
@Test(groups = { "UnitTest" }, timeOut = 1000, enabled = false)
|
|
||||||
public class GenerateConstructedMultiColorDeckTest {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate constructed multi color deck test1.
|
|
||||||
*/
|
|
||||||
@Test(enabled = false, timeOut = 1000)
|
|
||||||
public void generateConstructedMultiColorDeckTest1() {
|
|
||||||
final GenerateConstructedMultiColorDeck g = new GenerateConstructedMultiColorDeck();
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
System.out.println("***GENERATING DECK***");
|
|
||||||
final CardList c = g.generate3ColorDeck();
|
|
||||||
System.out.println(c.getType("Creature").size() + " - " + c.size());
|
|
||||||
for (int j = 0; j < c.size(); j++) {
|
|
||||||
System.out.println(c.get(j).getName());
|
|
||||||
}
|
|
||||||
System.out.println("***DECK GENERATED***");
|
|
||||||
|
|
||||||
}
|
|
||||||
System.exit(1);
|
|
||||||
} // main
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user