mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
checkstyle
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
package forge.deck;
|
package forge.deck;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
import forge.PlayerType;
|
import forge.PlayerType;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
@@ -7,15 +9,16 @@ import forge.item.CardPrinted;
|
|||||||
import forge.item.ItemPool;
|
import forge.item.ItemPool;
|
||||||
import forge.item.ItemPoolView;
|
import forge.item.ItemPoolView;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Deck class.</p>
|
* <p>
|
||||||
|
* Deck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* The set of MTG legal cards that become player's library when the game starts.
|
||||||
|
* Any other data is not part of a deck and should be stored elsewhere. Current
|
||||||
|
* fields allowed for deck metadata are Name, Title, Description, Difficulty,
|
||||||
|
* Icon, Deck Type.
|
||||||
*
|
*
|
||||||
* The set of MTG legal cards that become player's library when the game starts.
|
|
||||||
* Any other data is not part of a deck and should be stored elsewhere.
|
|
||||||
* Current fields allowed for deck metadata are Name, Title, Description, Difficulty, Icon, Deck Type.
|
|
||||||
*
|
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -25,22 +28,23 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -7478025567887481994L;
|
private static final long serialVersionUID = -7478025567887481994L;
|
||||||
|
|
||||||
//gameType is from Constant.GameType, like GameType.Regular
|
// gameType is from Constant.GameType, like GameType.Regular
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private GameType deckType;
|
private GameType deckType;
|
||||||
private String comment = null;
|
private String comment = null;
|
||||||
private PlayerType playerType = null;
|
private PlayerType playerType = null;
|
||||||
|
|
||||||
private boolean customPool = false;
|
private boolean customPool = false;
|
||||||
|
|
||||||
private ItemPool<CardPrinted> main;
|
private ItemPool<CardPrinted> main;
|
||||||
private ItemPool<CardPrinted> sideboard;
|
private ItemPool<CardPrinted> sideboard;
|
||||||
|
|
||||||
|
// gameType is from Constant.GameType, like GameType.Regular
|
||||||
//gameType is from Constant.GameType, like GameType.Regular
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Deck.</p>
|
* <p>
|
||||||
|
* Constructor for Deck.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public Deck() {
|
public Deck() {
|
||||||
main = new ItemPool<CardPrinted>(CardPrinted.class);
|
main = new ItemPool<CardPrinted>(CardPrinted.class);
|
||||||
@@ -48,9 +52,12 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Deck.</p>
|
* <p>
|
||||||
*
|
* Constructor for Deck.
|
||||||
* @param type a {@link java.lang.String} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public Deck(final GameType type) {
|
public Deck(final GameType type) {
|
||||||
this();
|
this();
|
||||||
@@ -58,8 +65,10 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Getter for the field <code>main</code>.</p>
|
* <p>
|
||||||
*
|
* Getter for the field <code>main</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.util.List} object.
|
* @return a {@link java.util.List} object.
|
||||||
*/
|
*/
|
||||||
public ItemPoolView<CardPrinted> getMain() {
|
public ItemPoolView<CardPrinted> getMain() {
|
||||||
@@ -67,8 +76,10 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Getter for the field <code>sideboard</code>.</p>
|
* <p>
|
||||||
*
|
* Getter for the field <code>sideboard</code>.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.util.List} object.
|
* @return a {@link java.util.List} object.
|
||||||
*/
|
*/
|
||||||
public ItemPoolView<CardPrinted> getSideboard() {
|
public ItemPoolView<CardPrinted> getSideboard() {
|
||||||
@@ -76,41 +87,50 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getDeckType.</p>
|
* <p>
|
||||||
*
|
* getDeckType.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.lang.String} object.
|
* @return a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public GameType getDeckType() {
|
public GameType getDeckType() {
|
||||||
return deckType;
|
return deckType;
|
||||||
}
|
}
|
||||||
|
|
||||||
//can only call this method ONCE
|
// can only call this method ONCE
|
||||||
/**
|
/**
|
||||||
* <p>setDeckType.</p>
|
* <p>
|
||||||
*
|
* setDeckType.
|
||||||
* @param deckType a {@link java.lang.String} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param deckType
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
void setDeckType(GameType deckType) {
|
void setDeckType(final GameType deckType) {
|
||||||
if (this.getDeckType() != null) {
|
if (this.getDeckType() != null) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException("Deck : setDeckType() error, deck type has already been set");
|
||||||
"Deck : setDeckType() error, deck type has already been set");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.deckType = deckType;
|
this.deckType = deckType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>setName.</p>
|
* <p>
|
||||||
*
|
* setName.
|
||||||
* @param s a {@link java.lang.String} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param s
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public void setName(String s) {
|
public void setName(final String s) {
|
||||||
name = s;
|
name = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getName.</p>
|
* <p>
|
||||||
*
|
* getName.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.lang.String} object.
|
* @return a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public String getName() {
|
public String getName() {
|
||||||
@@ -118,17 +138,22 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>setComment.</p>
|
* <p>
|
||||||
*
|
* setComment.
|
||||||
* @param comment a {@link java.lang.String} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param comment
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public void setComment(String comment) {
|
public void setComment(final String comment) {
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getComment.</p>
|
* <p>
|
||||||
*
|
* getComment.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.lang.String} object.
|
* @return a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public String getComment() {
|
public String getComment() {
|
||||||
@@ -136,33 +161,149 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>addMain.</p>
|
* <p>
|
||||||
*
|
* addMain.
|
||||||
* @param cardName a {@link java.lang.String} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param cardName
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public void addMain(final String cardName) { addMain(CardDb.instance().getCard(cardName)); }
|
public void addMain(final String cardName) {
|
||||||
public void addMain(final CardPrinted card) { main.add(card); }
|
addMain(CardDb.instance().getCard(cardName));
|
||||||
public void addMain(final CardPrinted card, final int amount) { main.add(card, amount); }
|
}
|
||||||
public void addMain(final ItemPoolView<CardPrinted> list) { main.addAll(list); }
|
|
||||||
public void setMain(final Iterable<String> cards) { main = new ItemPool<CardPrinted>(cards, CardPrinted.class); }
|
|
||||||
public void removeMain(final CardPrinted card) { main.remove(card); }
|
|
||||||
public void removeMain(final CardPrinted card, final int amount) { main.remove(card, amount); }
|
|
||||||
public int countMain() { return main.countAll(); }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>addSideboard.</p>
|
* Adds the main.
|
||||||
*
|
*
|
||||||
* @param cardName a {@link java.lang.String} object.
|
* @param card
|
||||||
|
* the card
|
||||||
*/
|
*/
|
||||||
public final void addSideboard(final String cardName) { addSideboard(CardDb.instance().getCard(cardName)); }
|
public void addMain(final CardPrinted card) {
|
||||||
public final void addSideboard(final CardPrinted card) { sideboard.add(card); }
|
main.add(card);
|
||||||
public final void addSideboard(final CardPrinted card, final int amount) { sideboard.add(card, amount); }
|
}
|
||||||
public final void addSideboard(final ItemPoolView<CardPrinted> cards) { sideboard.addAll(cards); }
|
|
||||||
public final void setSideboard(final Iterable<String> cards) { sideboard = new ItemPool<CardPrinted>(cards, CardPrinted.class); }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>countSideboard.</p>
|
* Adds the main.
|
||||||
*
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
|
* @param amount
|
||||||
|
* the amount
|
||||||
|
*/
|
||||||
|
public void addMain(final CardPrinted card, final int amount) {
|
||||||
|
main.add(card, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the main.
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* the list
|
||||||
|
*/
|
||||||
|
public void addMain(final ItemPoolView<CardPrinted> list) {
|
||||||
|
main.addAll(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the main.
|
||||||
|
*
|
||||||
|
* @param cards
|
||||||
|
* the new main
|
||||||
|
*/
|
||||||
|
public void setMain(final Iterable<String> cards) {
|
||||||
|
main = new ItemPool<CardPrinted>(cards, CardPrinted.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the main.
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
|
*/
|
||||||
|
public void removeMain(final CardPrinted card) {
|
||||||
|
main.remove(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the main.
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
|
* @param amount
|
||||||
|
* the amount
|
||||||
|
*/
|
||||||
|
public void removeMain(final CardPrinted card, final int amount) {
|
||||||
|
main.remove(card, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count main.
|
||||||
|
*
|
||||||
|
* @return the int
|
||||||
|
*/
|
||||||
|
public int countMain() {
|
||||||
|
return main.countAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* addSideboard.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param cardName
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
*/
|
||||||
|
public void addSideboard(final String cardName) {
|
||||||
|
addSideboard(CardDb.instance().getCard(cardName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the sideboard.
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
|
*/
|
||||||
|
public void addSideboard(final CardPrinted card) {
|
||||||
|
sideboard.add(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the sideboard.
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
|
* @param amount
|
||||||
|
* the amount
|
||||||
|
*/
|
||||||
|
public void addSideboard(final CardPrinted card, final int amount) {
|
||||||
|
sideboard.add(card, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the sideboard.
|
||||||
|
*
|
||||||
|
* @param cards
|
||||||
|
* the cards
|
||||||
|
*/
|
||||||
|
public void addSideboard(final ItemPoolView<CardPrinted> cards) {
|
||||||
|
sideboard.addAll(cards);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the sideboard.
|
||||||
|
*
|
||||||
|
* @param cards
|
||||||
|
* the new sideboard
|
||||||
|
*/
|
||||||
|
public void setSideboard(final Iterable<String> cards) {
|
||||||
|
sideboard = new ItemPool<CardPrinted>(cards, CardPrinted.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* countSideboard.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a int.
|
* @return a int.
|
||||||
*/
|
*/
|
||||||
public int countSideboard() {
|
public int countSideboard() {
|
||||||
@@ -170,18 +311,23 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>removeSideboard.</p>
|
* <p>
|
||||||
|
* removeSideboard.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @param card
|
||||||
|
* the card
|
||||||
*
|
*
|
||||||
* @param index a int.
|
|
||||||
* @return a {@link java.lang.String} object.
|
|
||||||
*/
|
*/
|
||||||
public void removeFromSideboard(CardPrinted card) {
|
public void removeFromSideboard(final CardPrinted card) {
|
||||||
sideboard.remove(card);
|
sideboard.remove(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>isDraft.</p>
|
* <p>
|
||||||
*
|
* isDraft.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public boolean isDraft() {
|
public boolean isDraft() {
|
||||||
@@ -189,8 +335,10 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>isSealed.</p>
|
* <p>
|
||||||
*
|
* isSealed.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public boolean isSealed() {
|
public boolean isSealed() {
|
||||||
@@ -198,8 +346,10 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>isRegular.</p>
|
* <p>
|
||||||
*
|
* isRegular.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public boolean isRegular() {
|
public boolean isRegular() {
|
||||||
@@ -207,8 +357,10 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>hashCode.</p>
|
* <p>
|
||||||
*
|
* hashCode.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a int.
|
* @return a int.
|
||||||
*/
|
*/
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
@@ -222,17 +374,20 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>compareTo.</p>
|
* <p>
|
||||||
*
|
* compareTo.
|
||||||
* @param d a {@link forge.deck.Deck} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param d
|
||||||
|
* a {@link forge.deck.Deck} object.
|
||||||
* @return a int.
|
* @return a int.
|
||||||
*/
|
*/
|
||||||
public int compareTo(Deck d) {
|
public int compareTo(final Deck d) {
|
||||||
return getName().compareTo(d.getName());
|
return getName().compareTo(d.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
public boolean equals(Object o) {
|
public boolean equals(final Object o) {
|
||||||
if (o instanceof Deck) {
|
if (o instanceof Deck) {
|
||||||
Deck d = (Deck) o;
|
Deck d = (Deck) o;
|
||||||
return getName().equals(d.getName());
|
return getName().equals(d.getName());
|
||||||
@@ -240,28 +395,56 @@ public final class Deck implements Comparable<Deck>, Serializable {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear sideboard.
|
||||||
|
*/
|
||||||
public void clearSideboard() {
|
public void clearSideboard() {
|
||||||
sideboard.clear();
|
sideboard.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear main.
|
||||||
|
*/
|
||||||
public void clearMain() {
|
public void clearMain() {
|
||||||
main.clear();
|
main.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final PlayerType getPlayerType() {
|
/**
|
||||||
|
* Gets the player type.
|
||||||
|
*
|
||||||
|
* @return the player type
|
||||||
|
*/
|
||||||
|
public PlayerType getPlayerType() {
|
||||||
return playerType;
|
return playerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void setPlayerType(PlayerType recommendedPlayer0) {
|
/**
|
||||||
|
* Sets the player type.
|
||||||
|
*
|
||||||
|
* @param recommendedPlayer0
|
||||||
|
* the new player type
|
||||||
|
*/
|
||||||
|
public void setPlayerType(final PlayerType recommendedPlayer0) {
|
||||||
this.playerType = recommendedPlayer0;
|
this.playerType = recommendedPlayer0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if is custom pool.
|
||||||
|
*
|
||||||
|
* @return true, if is custom pool
|
||||||
|
*/
|
||||||
public boolean isCustomPool() {
|
public boolean isCustomPool() {
|
||||||
return customPool;
|
return customPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomPool(boolean cp) {
|
/**
|
||||||
|
* Sets the custom pool.
|
||||||
|
*
|
||||||
|
* @param cp
|
||||||
|
* the new custom pool
|
||||||
|
*/
|
||||||
|
public void setCustomPool(final boolean cp) {
|
||||||
customPool = cp;
|
customPool = cp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,18 +16,20 @@ import forge.deck.generate.GenerateThemeDeck;
|
|||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class to hold add deck generation routines, methods moved from OldGuiNewGame.
|
* Utility class to hold add deck generation routines, methods moved from
|
||||||
*
|
* OldGuiNewGame.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class DeckGeneration {
|
public abstract class DeckGeneration {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* genDecks.
|
* genDecks.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param playerType
|
* @param playerType
|
||||||
* {@link java.lang.String} object.
|
* the player type {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public static void genDecks(final PlayerType playerType) {
|
public static void genDecks(final PlayerType playerType) {
|
||||||
// TODO jendave to refactor deck generation
|
// TODO jendave to refactor deck generation
|
||||||
@@ -45,7 +47,6 @@ public abstract class DeckGeneration {
|
|||||||
String playerName = playerType.equals(PlayerType.HUMAN) ? "Human" : "Computer";
|
String playerName = playerType.equals(PlayerType.HUMAN) ? "Human" : "Computer";
|
||||||
String prompt = String.format("Generate %s Deck", playerName);
|
String prompt = String.format("Generate %s Deck", playerName);
|
||||||
|
|
||||||
|
|
||||||
Object o = GuiUtils.getChoice(prompt, decks.toArray());
|
Object o = GuiUtils.getChoice(prompt, decks.toArray());
|
||||||
|
|
||||||
if (o.toString().equals(decks.get(0))) {
|
if (o.toString().equals(decks.get(0))) {
|
||||||
@@ -75,7 +76,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generateConstructedDeck.
|
* generateConstructedDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
*/
|
*/
|
||||||
private static Deck generateConstructedDeck() {
|
private static Deck generateConstructedDeck() {
|
||||||
@@ -93,7 +94,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generateConstructed3ColorDeck.
|
* generateConstructed3ColorDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
*/
|
*/
|
||||||
private static Deck generateConstructed3ColorDeck() {
|
private static Deck generateConstructed3ColorDeck() {
|
||||||
@@ -111,7 +112,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generateConstructed5ColorDeck.
|
* generateConstructed5ColorDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
*/
|
*/
|
||||||
private static Deck generateConstructed5ColorDeck() {
|
private static Deck generateConstructed5ColorDeck() {
|
||||||
@@ -129,7 +130,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generateConstructedThemeDeck.
|
* generateConstructedThemeDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
*/
|
*/
|
||||||
private static Deck generateConstructedThemeDeck() {
|
private static Deck generateConstructedThemeDeck() {
|
||||||
@@ -160,7 +161,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generate2ColorDeck.
|
* generate2ColorDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param p
|
* @param p
|
||||||
* a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
@@ -215,7 +216,7 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generate3ColorDeck.
|
* generate3ColorDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param p
|
* @param p
|
||||||
* a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
@@ -281,22 +282,21 @@ public abstract class DeckGeneration {
|
|||||||
* <p>
|
* <p>
|
||||||
* generate5ColorDeck.
|
* generate5ColorDeck.
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @param p
|
* @param p
|
||||||
* a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
* @return a {@link forge.deck.Deck} object.
|
* @return a {@link forge.deck.Deck} object.
|
||||||
*/
|
*/
|
||||||
private static Deck generate5ColorDeck(final PlayerType p) {
|
private static Deck generate5ColorDeck(final PlayerType p) {
|
||||||
//Random r = MyRandom.random;
|
// 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");
|
|
||||||
|
|
||||||
|
// ArrayList<String> colors = new ArrayList<String>();
|
||||||
|
// colors.add("Random");
|
||||||
|
// colors.add("white");
|
||||||
|
// colors.add("blue");
|
||||||
|
// colors.add("black");
|
||||||
|
// colors.add("red");
|
||||||
|
// colors.add("green");
|
||||||
|
|
||||||
Generate5ColorDeck gen = new Generate5ColorDeck("white", "blue", "black", "red", "green");
|
Generate5ColorDeck gen = new Generate5ColorDeck("white", "blue", "black", "red", "green");
|
||||||
CardList d = gen.get5ColorDeck(60, p);
|
CardList d = gen.get5ColorDeck(60, p);
|
||||||
|
|||||||
@@ -26,11 +26,6 @@ import javax.swing.filechooser.FileFilter;
|
|||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import freemarker.template.TemplateException;
|
|
||||||
import freemarker.template.Template;
|
|
||||||
import freemarker.template.Configuration;
|
|
||||||
import freemarker.template.DefaultObjectWrapper;
|
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.FileUtil;
|
import forge.FileUtil;
|
||||||
import forge.PlayerType;
|
import forge.PlayerType;
|
||||||
@@ -41,6 +36,10 @@ import forge.item.CardPrinted;
|
|||||||
import forge.item.ItemPoolView;
|
import forge.item.ItemPoolView;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
|
import freemarker.template.Configuration;
|
||||||
|
import freemarker.template.DefaultObjectWrapper;
|
||||||
|
import freemarker.template.Template;
|
||||||
|
import freemarker.template.TemplateException;
|
||||||
|
|
||||||
//reads and writeDeck Deck objects
|
//reads and writeDeck Deck objects
|
||||||
/**
|
/**
|
||||||
@@ -66,9 +65,7 @@ public class DeckManager {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** The Constant DCK_FILTER. */
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static final FileFilter DCK_FILTER = new FileFilter() {
|
public static final FileFilter DCK_FILTER = new FileFilter() {
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(final File f) {
|
public boolean accept(final File f) {
|
||||||
@@ -81,9 +78,7 @@ public class DeckManager {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** The Constant HTML_FILTER. */
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static final FileFilter HTML_FILTER = new FileFilter() {
|
public static final FileFilter HTML_FILTER = new FileFilter() {
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(final File f) {
|
public boolean accept(final File f) {
|
||||||
@@ -265,8 +260,7 @@ public class DeckManager {
|
|||||||
*/
|
*/
|
||||||
private void checkDraftDeck(final Deck[] deck) {
|
private void checkDraftDeck(final Deck[] deck) {
|
||||||
if (deck == null || deck.length != 8 || deck[0].getName().equals("")
|
if (deck == null || deck.length != 8 || deck[0].getName().equals("")
|
||||||
|| (!deck[0].getDeckType().equals(GameType.Draft)))
|
|| (!deck[0].getDeckType().equals(GameType.Draft))) {
|
||||||
{
|
|
||||||
throw new RuntimeException("DeckManager : checkDraftDeck() error, invalid deck");
|
throw new RuntimeException("DeckManager : checkDraftDeck() error, invalid deck");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -641,37 +635,45 @@ public class DeckManager {
|
|||||||
int height = 319;
|
int height = 319;
|
||||||
int width = 222;
|
int width = 222;
|
||||||
|
|
||||||
/* Create and adjust the configuration */
|
/* Create and adjust the configuration */
|
||||||
Configuration cfg = new Configuration();
|
Configuration cfg = new Configuration();
|
||||||
try {
|
try {
|
||||||
cfg.setClassForTemplateLoading(d.getClass(), "/");
|
cfg.setClassForTemplateLoading(d.getClass(), "/");
|
||||||
cfg.setObjectWrapper(new DefaultObjectWrapper());
|
cfg.setObjectWrapper(new DefaultObjectWrapper());
|
||||||
|
|
||||||
/* ------------------------------------------------------------------- */
|
/*
|
||||||
/* You usually do these for many times in the application life-cycle: */
|
* ------------------------------------------------------------------
|
||||||
|
* -
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* You usually do these for many times in the application
|
||||||
|
* life-cycle:
|
||||||
|
*/
|
||||||
|
|
||||||
/* Get or create a template */
|
/* Get or create a template */
|
||||||
temp = cfg.getTemplate("proxy-template.ftl");
|
temp = cfg.getTemplate("proxy-template.ftl");
|
||||||
|
|
||||||
|
|
||||||
/* Create a data-model */
|
/* Create a data-model */
|
||||||
Map<String, Object> root = new HashMap<String, Object>();
|
Map<String, Object> root = new HashMap<String, Object>();
|
||||||
root.put("title", d.getName());
|
root.put("title", d.getName());
|
||||||
List<String> list = new ArrayList<String>();
|
List<String> list = new ArrayList<String>();
|
||||||
for (Card card : d.getMain().toForgeCardList().toArray()) {
|
for (Card card : d.getMain().toForgeCardList().toArray()) {
|
||||||
//System.out.println(card.getSets().get(card.getSets().size() - 1).URL);
|
// System.out.println(card.getSets().get(card.getSets().size() -
|
||||||
|
// 1).URL);
|
||||||
list.add(card.getSets().get(card.getSets().size() - 1).URL);
|
list.add(card.getSets().get(card.getSets().size() - 1).URL);
|
||||||
}
|
}
|
||||||
/* List<String> nameList = new ArrayList<String>();
|
/*
|
||||||
for (Card card : d.getMain().toForgeCardList().toArray()) {
|
* List<String> nameList = new ArrayList<String>(); for (Card card :
|
||||||
//System.out.println(card.getSets().get(card.getSets().size() - 1).URL);
|
* d.getMain().toForgeCardList().toArray()) {
|
||||||
nameList.add(card.getName());
|
* //System.out.println(card.getSets().get(card.getSets().size() -
|
||||||
}*/
|
* 1).URL); nameList.add(card.getName()); }
|
||||||
|
*/
|
||||||
|
|
||||||
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
|
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
|
||||||
for (Entry<CardPrinted, Integer> entry : d.getMain().getOrderedList()) {
|
for (Entry<CardPrinted, Integer> entry : d.getMain().getOrderedList()) {
|
||||||
map.put(entry.getKey().getName(), entry.getValue());
|
map.put(entry.getKey().getName(), entry.getValue());
|
||||||
//System.out.println(entry.getValue() + " " + entry.getKey().getName());
|
// System.out.println(entry.getValue() + " " +
|
||||||
|
// entry.getKey().getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
root.put("urls", list);
|
root.put("urls", list);
|
||||||
@@ -679,11 +681,11 @@ public class DeckManager {
|
|||||||
root.put("height", height);
|
root.put("height", height);
|
||||||
root.put("width", width);
|
root.put("width", width);
|
||||||
root.put("cardlistWidth", width - 11);
|
root.put("cardlistWidth", width - 11);
|
||||||
//root.put("nameList", nameList);
|
// root.put("nameList", nameList);
|
||||||
root.put("cardList", map);
|
root.put("cardList", map);
|
||||||
|
|
||||||
/* Merge data-model with template */
|
/* Merge data-model with template */
|
||||||
//StringWriter sw = new StringWriter();
|
// StringWriter sw = new StringWriter();
|
||||||
temp.process(root, out);
|
temp.process(root, out);
|
||||||
out.flush();
|
out.flush();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -693,8 +695,8 @@ public class DeckManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeCardPool(final ItemPoolView<CardPrinted> pool,
|
private static void writeCardPool(final ItemPoolView<CardPrinted> pool, final BufferedWriter out)
|
||||||
final BufferedWriter out) throws IOException {
|
throws IOException {
|
||||||
List<Entry<CardPrinted, Integer>> main2sort = pool.getOrderedList();
|
List<Entry<CardPrinted, Integer>> main2sort = pool.getOrderedList();
|
||||||
Collections.sort(main2sort, TableSorter.byNameThenSet);
|
Collections.sort(main2sort, TableSorter.byNameThenSet);
|
||||||
for (Entry<CardPrinted, Integer> e : main2sort) {
|
for (Entry<CardPrinted, Integer> e : main2sort) {
|
||||||
|
|||||||
@@ -4,68 +4,156 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>DeckRecognizer class.</p>
|
* <p>
|
||||||
*
|
* DeckRecognizer class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id: DeckRecognizer.java 10499 2011-09-17 15:08:47Z Max mtg $
|
* @version $Id: DeckRecognizer.java 10499 2011-09-17 15:08:47Z Max mtg $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DeckRecognizer {
|
public class DeckRecognizer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Enum TokenType.
|
||||||
|
*/
|
||||||
public enum TokenType {
|
public enum TokenType {
|
||||||
|
|
||||||
|
/** The Known card. */
|
||||||
KnownCard,
|
KnownCard,
|
||||||
|
|
||||||
|
/** The Unknown card. */
|
||||||
UnknownCard,
|
UnknownCard,
|
||||||
|
|
||||||
|
/** The Section name. */
|
||||||
SectionName,
|
SectionName,
|
||||||
|
|
||||||
|
/** The Comment. */
|
||||||
Comment,
|
Comment,
|
||||||
|
|
||||||
|
/** The Unknown text. */
|
||||||
UnknownText
|
UnknownText
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Class Token.
|
||||||
|
*/
|
||||||
public static class Token {
|
public static class Token {
|
||||||
private final TokenType type;
|
private final TokenType type;
|
||||||
private final CardPrinted card;
|
private final CardPrinted card;
|
||||||
private final int number;
|
private final int number;
|
||||||
private final String text;
|
private final String text;
|
||||||
|
|
||||||
public static Token knownCard(CardPrinted theCard, int count) {
|
/**
|
||||||
|
* Known card.
|
||||||
|
*
|
||||||
|
* @param theCard
|
||||||
|
* the the card
|
||||||
|
* @param count
|
||||||
|
* the count
|
||||||
|
* @return the token
|
||||||
|
*/
|
||||||
|
public static Token knownCard(final CardPrinted theCard, final int count) {
|
||||||
return new Token(theCard, TokenType.KnownCard, count, null);
|
return new Token(theCard, TokenType.KnownCard, count, null);
|
||||||
}
|
}
|
||||||
public static Token unknownCard(String cardNme, int count) {
|
|
||||||
|
/**
|
||||||
|
* Unknown card.
|
||||||
|
*
|
||||||
|
* @param cardNme
|
||||||
|
* the card nme
|
||||||
|
* @param count
|
||||||
|
* the count
|
||||||
|
* @return the token
|
||||||
|
*/
|
||||||
|
public static Token unknownCard(final String cardNme, final int count) {
|
||||||
return new Token(null, TokenType.UnknownCard, count, cardNme);
|
return new Token(null, TokenType.UnknownCard, count, cardNme);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Token(CardPrinted knownCard, TokenType type1, int count, String message)
|
private Token(final CardPrinted knownCard, final TokenType type1, final int count, final String message) {
|
||||||
{
|
|
||||||
card = knownCard;
|
card = knownCard;
|
||||||
number = count;
|
number = count;
|
||||||
type = type1;
|
type = type1;
|
||||||
text = message;
|
text = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Token(TokenType type1, int count, String message)
|
/**
|
||||||
{
|
* Instantiates a new token.
|
||||||
|
*
|
||||||
|
* @param type1
|
||||||
|
* the type1
|
||||||
|
* @param count
|
||||||
|
* the count
|
||||||
|
* @param message
|
||||||
|
* the message
|
||||||
|
*/
|
||||||
|
public Token(final TokenType type1, final int count, final String message) {
|
||||||
this(null, type1, count, message);
|
this(null, type1, count, message);
|
||||||
if (type1 == TokenType.KnownCard || type1 == TokenType.UnknownCard) {
|
if (type1 == TokenType.KnownCard || type1 == TokenType.UnknownCard) {
|
||||||
throw new IllegalArgumentException("Use factory methods for recognized card lines");
|
throw new IllegalArgumentException("Use factory methods for recognized card lines");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getText() { return text; }
|
/**
|
||||||
public CardPrinted getCard() { return card; }
|
* Gets the text.
|
||||||
public TokenType getType() { return type; }
|
*
|
||||||
public int getNumber() { return number; }
|
* @return the text
|
||||||
|
*/
|
||||||
|
public final String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the card.
|
||||||
|
*
|
||||||
|
* @return the card
|
||||||
|
*/
|
||||||
|
public final CardPrinted getCard() {
|
||||||
|
return card;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the type.
|
||||||
|
*
|
||||||
|
* @return the type
|
||||||
|
*/
|
||||||
|
public final TokenType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the number.
|
||||||
|
*
|
||||||
|
* @return the number
|
||||||
|
*/
|
||||||
|
public final int getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's think about it numbers in the back later
|
// Let's think about it numbers in the back later
|
||||||
// private static final Pattern searchNumbersInBack = Pattern.compile("(.*)[^A-Za-wyz]*\\s+([\\d]{1,2})");
|
// private static final Pattern searchNumbersInBack =
|
||||||
|
// Pattern.compile("(.*)[^A-Za-wyz]*\\s+([\\d]{1,2})");
|
||||||
private static final Pattern searchNumbersInFront = Pattern.compile("([\\d]{1,2})[^A-Za-wyz]*\\s+(.*)");
|
private static final Pattern searchNumbersInFront = Pattern.compile("([\\d]{1,2})[^A-Za-wyz]*\\s+(.*)");
|
||||||
public static Token recognizeLine(String raw_line)
|
|
||||||
{
|
/**
|
||||||
if (StringUtils.isBlank(raw_line)) { return new Token(TokenType.Comment, 0, raw_line); }
|
* Recognize line.
|
||||||
|
*
|
||||||
|
* @param raw_line
|
||||||
|
* the raw_line
|
||||||
|
* @return the token
|
||||||
|
*/
|
||||||
|
public static Token recognizeLine(final String raw_line) {
|
||||||
|
if (StringUtils.isBlank(raw_line)) {
|
||||||
|
return new Token(TokenType.Comment, 0, raw_line);
|
||||||
|
}
|
||||||
String line = raw_line.trim();
|
String line = raw_line.trim();
|
||||||
|
|
||||||
Token result = null;
|
Token result = null;
|
||||||
Matcher foundNumbersInFront = searchNumbersInFront.matcher(line);
|
Matcher foundNumbersInFront = searchNumbersInFront.matcher(line);
|
||||||
// Matcher foundNumbersInBack = searchNumbersInBack.matcher(line);
|
// Matcher foundNumbersInBack = searchNumbersInBack.matcher(line);
|
||||||
@@ -73,53 +161,67 @@ public class DeckRecognizer {
|
|||||||
String cardName = foundNumbersInFront.group(2);
|
String cardName = foundNumbersInFront.group(2);
|
||||||
int amount = Integer.parseInt(foundNumbersInFront.group(1));
|
int amount = Integer.parseInt(foundNumbersInFront.group(1));
|
||||||
result = recognizePossibleNameAndNumber(cardName, amount);
|
result = recognizePossibleNameAndNumber(cardName, amount);
|
||||||
} /* else if (foundNumbersInBack.matches()) {
|
} /*
|
||||||
String cardName = foundNumbersInBack.group(1);
|
* else if (foundNumbersInBack.matches()) { String cardName =
|
||||||
int amount = Integer.parseInt(foundNumbersInBack.group(2));
|
* foundNumbersInBack.group(1); int amount =
|
||||||
return new Token(cardName, amount);
|
* Integer.parseInt(foundNumbersInBack.group(2)); return new
|
||||||
} */else {
|
* Token(cardName, amount); }
|
||||||
if ( CardDb.instance().isCardSupported(line)) {
|
*/
|
||||||
|
else {
|
||||||
|
if (CardDb.instance().isCardSupported(line)) {
|
||||||
return Token.knownCard(CardDb.instance().getCard(line), 1);
|
return Token.knownCard(CardDb.instance().getCard(line), 1);
|
||||||
}
|
}
|
||||||
result = recognizeNonCard(line, 1);
|
result = recognizeNonCard(line, 1);
|
||||||
}
|
}
|
||||||
return result != null ? result : new Token(TokenType.UnknownText, 0, line);
|
return result != null ? result : new Token(TokenType.UnknownText, 0, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Token recognizePossibleNameAndNumber(String name, int n) {
|
private static Token recognizePossibleNameAndNumber(final String name, final int n) {
|
||||||
if ( CardDb.instance().isCardSupported(name))
|
if (CardDb.instance().isCardSupported(name)) {
|
||||||
return Token.knownCard(CardDb.instance().getCard(name), n);
|
return Token.knownCard(CardDb.instance().getCard(name), n);
|
||||||
|
}
|
||||||
|
|
||||||
Token known = recognizeNonCard(name, n);
|
Token known = recognizeNonCard(name, n);
|
||||||
return null == known ? Token.unknownCard(name, n) : known;
|
return null == known ? Token.unknownCard(name, n) : known;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Token recognizeNonCard(String text, int n) {
|
private static Token recognizeNonCard(final String text, final int n) {
|
||||||
if (isDecoration(text)) { return new Token(TokenType.Comment, n, text); }
|
if (isDecoration(text)) {
|
||||||
if (isSectionName(text)) { return new Token(TokenType.SectionName, n, text); }
|
return new Token(TokenType.Comment, n, text);
|
||||||
|
}
|
||||||
|
if (isSectionName(text)) {
|
||||||
|
return new Token(TokenType.SectionName, n, text);
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static String[] knownComments = new String[] {
|
|
||||||
"land", "lands", "creatures", "creature", "spells", "enchancements", "other spells", "artifacts" };
|
|
||||||
private final static String[] knownCommentParts = new String[] { "card" };
|
|
||||||
|
|
||||||
private static boolean isDecoration(String lineAsIs) {
|
private static final String[] knownComments = new String[] { "land", "lands", "creatures", "creature", "spells",
|
||||||
|
"enchancements", "other spells", "artifacts" };
|
||||||
|
private static final String[] knownCommentParts = new String[] { "card" };
|
||||||
|
|
||||||
|
private static boolean isDecoration(final String lineAsIs) {
|
||||||
String line = lineAsIs.toLowerCase();
|
String line = lineAsIs.toLowerCase();
|
||||||
for (String s : knownCommentParts) {
|
for (String s : knownCommentParts) {
|
||||||
if (line.contains(s)) { return true; }
|
if (line.contains(s)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (String s : knownComments) {
|
for (String s : knownComments) {
|
||||||
if (line.equalsIgnoreCase(s)) { return true; }
|
if (line.equalsIgnoreCase(s)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isSectionName(String line) {
|
private static boolean isSectionName(final String line) {
|
||||||
if (line.toLowerCase().contains("side")) { return true; }
|
if (line.toLowerCase().contains("side")) {
|
||||||
if (line.toLowerCase().contains("main")) { return true; }
|
return true;
|
||||||
|
}
|
||||||
|
if (line.toLowerCase().contains("main")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,26 @@
|
|||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|
||||||
import forge.*;
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.CardFilter;
|
||||||
|
import forge.CardList;
|
||||||
|
import forge.CardListFilter;
|
||||||
|
import forge.Constant;
|
||||||
|
import forge.MyRandom;
|
||||||
|
import forge.PlayerType;
|
||||||
|
import forge.error.ErrorViewer;
|
||||||
|
import forge.properties.ForgeProps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Generate2ColorDeck class.</p>
|
* <p>
|
||||||
*
|
* Generate2ColorDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -25,12 +34,16 @@ public class Generate2ColorDeck {
|
|||||||
private Map<String, Integer> cardCounts = null;
|
private Map<String, Integer> cardCounts = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Generate2ColorDeck.</p>
|
* <p>
|
||||||
*
|
* Constructor for Generate2ColorDeck.
|
||||||
* @param Clr1 a {@link java.lang.String} object.
|
* </p>
|
||||||
* @param Clr2 a {@link java.lang.String} object.
|
*
|
||||||
|
* @param Clr1
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param Clr2
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public Generate2ColorDeck(String Clr1, String Clr2) {
|
public Generate2ColorDeck(final String Clr1, final String Clr2) {
|
||||||
r = MyRandom.random;
|
r = MyRandom.random;
|
||||||
|
|
||||||
cardCounts = new HashMap<String, Integer>();
|
cardCounts = new HashMap<String, Integer>();
|
||||||
@@ -55,8 +68,9 @@ public class Generate2ColorDeck {
|
|||||||
|
|
||||||
// choose second color
|
// choose second color
|
||||||
String c2 = notColors.get(r.nextInt(5));
|
String c2 = notColors.get(r.nextInt(5));
|
||||||
while (c2.equals(color1))
|
while (c2.equals(color1)) {
|
||||||
c2 = notColors.get(r.nextInt(5));
|
c2 = notColors.get(r.nextInt(5));
|
||||||
|
}
|
||||||
color2 = c2;
|
color2 = c2;
|
||||||
} else {
|
} else {
|
||||||
color1 = Clr1;
|
color1 = Clr1;
|
||||||
@@ -67,7 +81,7 @@ public class Generate2ColorDeck {
|
|||||||
notColors.remove(color2);
|
notColors.remove(color2);
|
||||||
|
|
||||||
dL = GenerateDeckUtil.getDualLandList(clrMap.get(color1) + clrMap.get(color2));
|
dL = GenerateDeckUtil.getDualLandList(clrMap.get(color1) + clrMap.get(color2));
|
||||||
|
|
||||||
for (int i = 0; i < dL.size(); i++) {
|
for (int i = 0; i < dL.size(); i++) {
|
||||||
cardCounts.put(dL.get(i), 0);
|
cardCounts.put(dL.get(i), 0);
|
||||||
}
|
}
|
||||||
@@ -75,12 +89,17 @@ public class Generate2ColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get2ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get2ColorDeck.
|
||||||
* @param Size a int.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param Size
|
||||||
|
* a int.
|
||||||
|
* @param pt
|
||||||
|
* the pt
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public CardList get2ColorDeck(int Size, final PlayerType pt) {
|
public final CardList get2ColorDeck(final int Size, final PlayerType pt) {
|
||||||
int lc = 0; // loop counter to prevent infinite card selection loops
|
int lc = 0; // loop counter to prevent infinite card selection loops
|
||||||
String tmpDeck = "";
|
String tmpDeck = "";
|
||||||
CardList tDeck = new CardList();
|
CardList tDeck = new CardList();
|
||||||
@@ -92,9 +111,9 @@ public class Generate2ColorDeck {
|
|||||||
// start with all cards
|
// start with all cards
|
||||||
// remove cards that generated decks don't like
|
// remove cards that generated decks don't like
|
||||||
CardList AllCards = CardFilter.filter(AllZone.getCardFactory(), new CardListFilter() {
|
CardList AllCards = CardFilter.filter(AllZone.getCardFactory(), new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.getSVar("RemRandomDeck").equals("True")) {
|
if (c.getSVar("RemRandomDeck").equals("True")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
||||||
}
|
}
|
||||||
@@ -107,7 +126,7 @@ public class Generate2ColorDeck {
|
|||||||
|
|
||||||
// remove multicolor cards that don't match the colors
|
// remove multicolor cards that don't match the colors
|
||||||
CardListFilter clrF = new CardListFilter() {
|
CardListFilter clrF = new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
for (int i = 0; i < notColors.size(); i++) {
|
for (int i = 0; i < notColors.size(); i++) {
|
||||||
if (c.getManaCost().contains(clrMap.get(notColors.get(i)))) {
|
if (c.getManaCost().contains(clrMap.get(notColors.get(i)))) {
|
||||||
return false;
|
return false;
|
||||||
@@ -123,7 +142,7 @@ public class Generate2ColorDeck {
|
|||||||
CardList Cr1 = CL1.getType("Creature");
|
CardList Cr1 = CL1.getType("Creature");
|
||||||
CardList Cr2 = CL2.getType("Creature");
|
CardList Cr2 = CL2.getType("Creature");
|
||||||
|
|
||||||
String ISE[] = {"Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature"};
|
String[] ISE = { "Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature" };
|
||||||
CardList Sp1 = CL1.getValidCards(ISE, null, null);
|
CardList Sp1 = CL1.getValidCards(ISE, null, null);
|
||||||
CardList Sp2 = CL2.getValidCards(ISE, null, null);
|
CardList Sp2 = CL2.getValidCards(ISE, null, null);
|
||||||
|
|
||||||
@@ -132,9 +151,9 @@ public class Generate2ColorDeck {
|
|||||||
CardList Sp12 = new CardList();
|
CardList Sp12 = new CardList();
|
||||||
|
|
||||||
// used for mana curve in the card pool
|
// used for mana curve in the card pool
|
||||||
final int MinCMC[] = {1}, MaxCMC[] = {2};
|
final int MinCMC[] = { 1 }, MaxCMC[] = { 2 };
|
||||||
CardListFilter cmcF = new CardListFilter() {
|
CardListFilter cmcF = new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
int cCMC = c.getCMC();
|
int cCMC = c.getCMC();
|
||||||
return (cCMC >= MinCMC[0]) && (cCMC <= MaxCMC[0]);
|
return (cCMC >= MinCMC[0]) && (cCMC <= MaxCMC[0]);
|
||||||
}
|
}
|
||||||
@@ -168,11 +187,12 @@ public class Generate2ColorDeck {
|
|||||||
MinCMC[0] += 2;
|
MinCMC[0] += 2;
|
||||||
MaxCMC[0] += 2;
|
MaxCMC[0] += 2;
|
||||||
// resulting mana curve of the card pool
|
// resulting mana curve of the card pool
|
||||||
//16x 1 - 2
|
// 16x 1 - 2
|
||||||
//12x 3 - 4
|
// 12x 3 - 4
|
||||||
//8x 5 - 6
|
// 8x 5 - 6
|
||||||
//4x 7 - 8
|
// 4x 7 - 8
|
||||||
//=40x - card pool could support up to a 275 card deck (all 4-ofs plus basic lands)
|
// =40x - card pool could support up to a 275 card deck (all 4-ofs
|
||||||
|
// plus basic lands)
|
||||||
}
|
}
|
||||||
|
|
||||||
// shuffle card pools
|
// shuffle card pools
|
||||||
@@ -230,7 +250,8 @@ public class Generate2ColorDeck {
|
|||||||
if (LandsPercentage > 0) {
|
if (LandsPercentage > 0) {
|
||||||
p = (float) ((float) LandsPercentage * .01);
|
p = (float) ((float) LandsPercentage * .01);
|
||||||
numLands = (int) (p * (float) Size);
|
numLands = (int) (p * (float) Size);
|
||||||
} else { // otherwise, just fill in the rest of the deck with basic lands
|
} else { // otherwise, just fill in the rest of the deck with basic
|
||||||
|
// lands
|
||||||
numLands = Size - tDeck.size();
|
numLands = Size - tDeck.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,16 +278,14 @@ public class Generate2ColorDeck {
|
|||||||
|
|
||||||
numLands -= nDLands;
|
numLands -= nDLands;
|
||||||
|
|
||||||
if (numLands > 0) // attempt to optimize basic land counts according to color representation
|
if (numLands > 0) // attempt to optimize basic land counts according to
|
||||||
|
// color representation
|
||||||
{
|
{
|
||||||
CCnt ClrCnts[] = {new CCnt("Plains", 0),
|
CCnt[] ClrCnts = { new CCnt("Plains", 0), new CCnt("Island", 0), new CCnt("Swamp", 0),
|
||||||
new CCnt("Island", 0),
|
new CCnt("Mountain", 0), new CCnt("Forest", 0) };
|
||||||
new CCnt("Swamp", 0),
|
|
||||||
new CCnt("Mountain", 0),
|
|
||||||
new CCnt("Forest", 0)};
|
|
||||||
|
|
||||||
// count each card color using mana costs
|
// count each card color using mana costs
|
||||||
// TODO: count hybrid mana differently?
|
// TODO count hybrid mana differently?
|
||||||
for (int i = 0; i < tDeck.size(); i++) {
|
for (int i = 0; i < tDeck.size(); i++) {
|
||||||
String mc = tDeck.get(i).getManaCost();
|
String mc = tDeck.get(i).getManaCost();
|
||||||
|
|
||||||
@@ -276,17 +295,13 @@ public class Generate2ColorDeck {
|
|||||||
|
|
||||||
if (c == 'W') {
|
if (c == 'W') {
|
||||||
ClrCnts[0].Count++;
|
ClrCnts[0].Count++;
|
||||||
}
|
} else if (c == 'U') {
|
||||||
else if (c == 'U') {
|
|
||||||
ClrCnts[1].Count++;
|
ClrCnts[1].Count++;
|
||||||
}
|
} else if (c == 'B') {
|
||||||
else if (c == 'B') {
|
|
||||||
ClrCnts[2].Count++;
|
ClrCnts[2].Count++;
|
||||||
}
|
} else if (c == 'R') {
|
||||||
else if (c == 'R') {
|
|
||||||
ClrCnts[3].Count++;
|
ClrCnts[3].Count++;
|
||||||
}
|
} else if (c == 'G') {
|
||||||
else if (c == 'G') {
|
|
||||||
ClrCnts[4].Count++;
|
ClrCnts[4].Count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -302,12 +317,14 @@ public class Generate2ColorDeck {
|
|||||||
tmpDeck += "totalColor:" + totalColor + "\n";
|
tmpDeck += "totalColor:" + totalColor + "\n";
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
if (ClrCnts[i].Count > 0) { // calculate number of lands for each color
|
if (ClrCnts[i].Count > 0) { // calculate number of lands for
|
||||||
|
// each color
|
||||||
p = (float) ClrCnts[i].Count / (float) totalColor;
|
p = (float) ClrCnts[i].Count / (float) totalColor;
|
||||||
int nLand = (int) ((float) numLands * p);
|
int nLand = (int) ((float) numLands * p);
|
||||||
tmpDeck += "nLand-" + ClrCnts[i].Color + ":" + nLand + "\n";
|
tmpDeck += "nLand-" + ClrCnts[i].Color + ":" + nLand + "\n";
|
||||||
|
|
||||||
// just to prevent a null exception by the deck size fixing code
|
// just to prevent a null exception by the deck size fixing
|
||||||
|
// code
|
||||||
cardCounts.put(ClrCnts[i].Color, nLand);
|
cardCounts.put(ClrCnts[i].Color, nLand);
|
||||||
|
|
||||||
for (int j = 0; j <= nLand; j++) {
|
for (int j = 0; j <= nLand; j++) {
|
||||||
@@ -345,7 +362,7 @@ public class Generate2ColorDeck {
|
|||||||
for (int i = 0; i < diff; i++) {
|
for (int i = 0; i < diff; i++) {
|
||||||
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
|
|
||||||
while (c.isBasicLand()) { // don't remove basic lands
|
while (c.isBasicLand()) { // don't remove basic lands
|
||||||
c = tDeck.get(r.nextInt(tDeck.size()));
|
c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +383,7 @@ public class Generate2ColorDeck {
|
|||||||
public String Color;
|
public String Color;
|
||||||
public int Count;
|
public int Count;
|
||||||
|
|
||||||
public CCnt(String clr, int cnt) {
|
public CCnt(final String clr, final int cnt) {
|
||||||
Color = clr;
|
Color = clr;
|
||||||
Count = cnt;
|
Count = cnt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,26 @@
|
|||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|
||||||
import forge.*;
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.CardFilter;
|
||||||
|
import forge.CardList;
|
||||||
|
import forge.CardListFilter;
|
||||||
|
import forge.Constant;
|
||||||
|
import forge.MyRandom;
|
||||||
|
import forge.PlayerType;
|
||||||
|
import forge.error.ErrorViewer;
|
||||||
|
import forge.properties.ForgeProps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Generate3ColorDeck class.</p>
|
* <p>
|
||||||
*
|
* Generate3ColorDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -26,13 +35,18 @@ public class Generate3ColorDeck {
|
|||||||
private Map<String, Integer> cardCounts = null;
|
private Map<String, Integer> cardCounts = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Generate3ColorDeck.</p>
|
* <p>
|
||||||
*
|
* Constructor for Generate3ColorDeck.
|
||||||
* @param Clr1 a {@link java.lang.String} object.
|
* </p>
|
||||||
* @param Clr2 a {@link java.lang.String} object.
|
*
|
||||||
* @param Clr3 a {@link java.lang.String} object.
|
* @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 Generate3ColorDeck(String Clr1, String Clr2, String Clr3) {
|
public Generate3ColorDeck(final String Clr1, final String Clr2, final String Clr3) {
|
||||||
r = MyRandom.random;
|
r = MyRandom.random;
|
||||||
|
|
||||||
cardCounts = new HashMap<String, Integer>();
|
cardCounts = new HashMap<String, Integer>();
|
||||||
@@ -57,13 +71,15 @@ public class Generate3ColorDeck {
|
|||||||
|
|
||||||
// choose second color
|
// choose second color
|
||||||
String c2 = notColors.get(r.nextInt(5));
|
String c2 = notColors.get(r.nextInt(5));
|
||||||
while (c2.equals(color1))
|
while (c2.equals(color1)) {
|
||||||
c2 = notColors.get(r.nextInt(5));
|
c2 = notColors.get(r.nextInt(5));
|
||||||
|
}
|
||||||
color2 = c2;
|
color2 = c2;
|
||||||
|
|
||||||
String c3 = notColors.get(r.nextInt(5));
|
String c3 = notColors.get(r.nextInt(5));
|
||||||
while (c3.equals(color1) || c3.equals(color2))
|
while (c3.equals(color1) || c3.equals(color2)) {
|
||||||
c3 = notColors.get(r.nextInt(5));
|
c3 = notColors.get(r.nextInt(5));
|
||||||
|
}
|
||||||
color3 = c3;
|
color3 = c3;
|
||||||
} else {
|
} else {
|
||||||
color1 = Clr1;
|
color1 = Clr1;
|
||||||
@@ -76,7 +92,7 @@ public class Generate3ColorDeck {
|
|||||||
notColors.remove(color3);
|
notColors.remove(color3);
|
||||||
|
|
||||||
dL = GenerateDeckUtil.getDualLandList(crMap.get(color1) + crMap.get(color2) + crMap.get(color3));
|
dL = GenerateDeckUtil.getDualLandList(crMap.get(color1) + crMap.get(color2) + crMap.get(color3));
|
||||||
|
|
||||||
for (int i = 0; i < dL.size(); i++) {
|
for (int i = 0; i < dL.size(); i++) {
|
||||||
cardCounts.put(dL.get(i), 0);
|
cardCounts.put(dL.get(i), 0);
|
||||||
}
|
}
|
||||||
@@ -84,12 +100,17 @@ public class Generate3ColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get3ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get3ColorDeck.
|
||||||
* @param Size a int.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param Size
|
||||||
|
* a int.
|
||||||
|
* @param pt
|
||||||
|
* the pt
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public CardList get3ColorDeck(int Size, final PlayerType pt) {
|
public final CardList get3ColorDeck(final int Size, final PlayerType pt) {
|
||||||
int lc = 0; // loop counter to prevent infinite card selection loops
|
int lc = 0; // loop counter to prevent infinite card selection loops
|
||||||
String tmpDeck = "";
|
String tmpDeck = "";
|
||||||
CardList tDeck = new CardList();
|
CardList tDeck = new CardList();
|
||||||
@@ -101,11 +122,11 @@ public class Generate3ColorDeck {
|
|||||||
// start with all cards
|
// start with all cards
|
||||||
// remove cards that generated decks don't like
|
// remove cards that generated decks don't like
|
||||||
CardList AllCards = CardFilter.filter(AllZone.getCardFactory(), new CardListFilter() {
|
CardList AllCards = CardFilter.filter(AllZone.getCardFactory(), new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.getSVar("RemRandomDeck").equals("True")) {
|
if (c.getSVar("RemRandomDeck").equals("True")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -117,10 +138,11 @@ public class Generate3ColorDeck {
|
|||||||
|
|
||||||
// remove multicolor cards that don't match the colors
|
// remove multicolor cards that don't match the colors
|
||||||
CardListFilter clrF = new CardListFilter() {
|
CardListFilter clrF = new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
for (int i = 0; i < notColors.size(); i++) {
|
for (int i = 0; i < notColors.size(); i++) {
|
||||||
if (c.getManaCost().contains(crMap.get(notColors.get(i))))
|
if (c.getManaCost().contains(crMap.get(notColors.get(i)))) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -134,7 +156,7 @@ public class Generate3ColorDeck {
|
|||||||
CardList Cr2 = CL2.getType("Creature");
|
CardList Cr2 = CL2.getType("Creature");
|
||||||
CardList Cr3 = CL3.getType("Creature");
|
CardList Cr3 = CL3.getType("Creature");
|
||||||
|
|
||||||
String ISE[] = {"Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature"};
|
String[] ISE = { "Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature" };
|
||||||
CardList Sp1 = CL1.getValidCards(ISE, null, null);
|
CardList Sp1 = CL1.getValidCards(ISE, null, null);
|
||||||
CardList Sp2 = CL2.getValidCards(ISE, null, null);
|
CardList Sp2 = CL2.getValidCards(ISE, null, null);
|
||||||
CardList Sp3 = CL3.getValidCards(ISE, null, null);
|
CardList Sp3 = CL3.getValidCards(ISE, null, null);
|
||||||
@@ -144,9 +166,9 @@ public class Generate3ColorDeck {
|
|||||||
CardList Sp123 = new CardList();
|
CardList Sp123 = new CardList();
|
||||||
|
|
||||||
// used for mana curve in the card pool
|
// used for mana curve in the card pool
|
||||||
final int MinCMC[] = {1}, MaxCMC[] = {3};
|
final int MinCMC[] = { 1 }, MaxCMC[] = { 3 };
|
||||||
CardListFilter cmcF = new CardListFilter() {
|
CardListFilter cmcF = new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
int cCMC = c.getCMC();
|
int cCMC = c.getCMC();
|
||||||
return (cCMC >= MinCMC[0]) && (cCMC <= MaxCMC[0]);
|
return (cCMC >= MinCMC[0]) && (cCMC <= MaxCMC[0]);
|
||||||
}
|
}
|
||||||
@@ -191,10 +213,11 @@ public class Generate3ColorDeck {
|
|||||||
MinCMC[0] += 2;
|
MinCMC[0] += 2;
|
||||||
MaxCMC[0] += 2;
|
MaxCMC[0] += 2;
|
||||||
// resulting mana curve of the card pool
|
// resulting mana curve of the card pool
|
||||||
//18x 1 - 3
|
// 18x 1 - 3
|
||||||
//12x 3 - 5
|
// 12x 3 - 5
|
||||||
//6x 5 - 7
|
// 6x 5 - 7
|
||||||
//=36x - card pool could support up to a 257 card deck (all 4-ofs plus basic lands)
|
// =36x - card pool could support up to a 257 card deck (all 4-ofs
|
||||||
|
// plus basic lands)
|
||||||
}
|
}
|
||||||
|
|
||||||
// shuffle card pools
|
// shuffle card pools
|
||||||
@@ -219,8 +242,9 @@ public class Generate3ColorDeck {
|
|||||||
c = Cr123.get(r.nextInt(Cr123.size()));
|
c = Cr123.get(r.nextInt(Cr123.size()));
|
||||||
lc++;
|
lc++;
|
||||||
}
|
}
|
||||||
if (lc > 100)
|
if (lc > 100) {
|
||||||
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- Cr123");
|
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- Cr123");
|
||||||
|
}
|
||||||
|
|
||||||
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
||||||
int n = cardCounts.get(c.getName());
|
int n = cardCounts.get(c.getName());
|
||||||
@@ -236,8 +260,9 @@ public class Generate3ColorDeck {
|
|||||||
c = Sp123.get(r.nextInt(Sp123.size()));
|
c = Sp123.get(r.nextInt(Sp123.size()));
|
||||||
lc++;
|
lc++;
|
||||||
}
|
}
|
||||||
if (lc > 100)
|
if (lc > 100) {
|
||||||
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- Sp123");
|
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- Sp123");
|
||||||
|
}
|
||||||
|
|
||||||
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
||||||
int n = cardCounts.get(c.getName());
|
int n = cardCounts.get(c.getName());
|
||||||
@@ -250,8 +275,10 @@ public class Generate3ColorDeck {
|
|||||||
if (LandsPercentage > 0) {
|
if (LandsPercentage > 0) {
|
||||||
p = (float) ((float) LandsPercentage * .01);
|
p = (float) ((float) LandsPercentage * .01);
|
||||||
numLands = (int) (p * (float) Size);
|
numLands = (int) (p * (float) Size);
|
||||||
} else // otherwise, just fill in the rest of the deck with basic lands
|
} else {
|
||||||
|
// otherwise, just fill in the rest of the deck with basic lands
|
||||||
numLands = Size - tDeck.size();
|
numLands = Size - tDeck.size();
|
||||||
|
}
|
||||||
|
|
||||||
tmpDeck += "numLands:" + numLands + "\n";
|
tmpDeck += "numLands:" + numLands + "\n";
|
||||||
|
|
||||||
@@ -264,8 +291,9 @@ public class Generate3ColorDeck {
|
|||||||
s = dL.get(r.nextInt(dL.size()));
|
s = dL.get(r.nextInt(dL.size()));
|
||||||
lc++;
|
lc++;
|
||||||
}
|
}
|
||||||
if (lc > 20)
|
if (lc > 20) {
|
||||||
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- dL");
|
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- dL");
|
||||||
|
}
|
||||||
|
|
||||||
tDeck.add(AllZone.getCardFactory().getCard(s, AllZone.getHumanPlayer()));
|
tDeck.add(AllZone.getCardFactory().getCard(s, AllZone.getHumanPlayer()));
|
||||||
int n = cardCounts.get(s);
|
int n = cardCounts.get(s);
|
||||||
@@ -275,16 +303,14 @@ public class Generate3ColorDeck {
|
|||||||
|
|
||||||
numLands -= ndLands;
|
numLands -= ndLands;
|
||||||
|
|
||||||
if (numLands > 0) // attempt to optimize basic land counts according to color representation
|
if (numLands > 0) // attempt to optimize basic land counts according to
|
||||||
|
// color representation
|
||||||
{
|
{
|
||||||
CCnt ClrCnts[] = {new CCnt("Plains", 0),
|
CCnt[] ClrCnts = { new CCnt("Plains", 0), new CCnt("Island", 0), new CCnt("Swamp", 0),
|
||||||
new CCnt("Island", 0),
|
new CCnt("Mountain", 0), new CCnt("Forest", 0) };
|
||||||
new CCnt("Swamp", 0),
|
|
||||||
new CCnt("Mountain", 0),
|
|
||||||
new CCnt("Forest", 0)};
|
|
||||||
|
|
||||||
// count each card color using mana costs
|
// count each card color using mana costs
|
||||||
// TODO: count hybrid mana differently?
|
// TODO count hybrid mana differently?
|
||||||
for (int i = 0; i < tDeck.size(); i++) {
|
for (int i = 0; i < tDeck.size(); i++) {
|
||||||
String mc = tDeck.get(i).getManaCost();
|
String mc = tDeck.get(i).getManaCost();
|
||||||
|
|
||||||
@@ -292,16 +318,17 @@ public class Generate3ColorDeck {
|
|||||||
for (int j = 0; j < mc.length(); j++) {
|
for (int j = 0; j < mc.length(); j++) {
|
||||||
char c = mc.charAt(j);
|
char c = mc.charAt(j);
|
||||||
|
|
||||||
if (c == 'W')
|
if (c == 'W') {
|
||||||
ClrCnts[0].Count++;
|
ClrCnts[0].Count++;
|
||||||
else if (c == 'U')
|
} else if (c == 'U') {
|
||||||
ClrCnts[1].Count++;
|
ClrCnts[1].Count++;
|
||||||
else if (c == 'B')
|
} else if (c == 'B') {
|
||||||
ClrCnts[2].Count++;
|
ClrCnts[2].Count++;
|
||||||
else if (c == 'R')
|
} else if (c == 'R') {
|
||||||
ClrCnts[3].Count++;
|
ClrCnts[3].Count++;
|
||||||
else if (c == 'G')
|
} else if (c == 'G') {
|
||||||
ClrCnts[4].Count++;
|
ClrCnts[4].Count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,16 +342,19 @@ public class Generate3ColorDeck {
|
|||||||
tmpDeck += "totalColor:" + totalColor + "\n";
|
tmpDeck += "totalColor:" + totalColor + "\n";
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
if (ClrCnts[i].Count > 0) { // calculate number of lands for each color
|
if (ClrCnts[i].Count > 0) { // calculate number of lands for
|
||||||
|
// each color
|
||||||
p = (float) ClrCnts[i].Count / (float) totalColor;
|
p = (float) ClrCnts[i].Count / (float) totalColor;
|
||||||
int nLand = (int) ((float) numLands * p);
|
int nLand = (int) ((float) numLands * p);
|
||||||
tmpDeck += "nLand-" + ClrCnts[i].Color + ":" + nLand + "\n";
|
tmpDeck += "nLand-" + ClrCnts[i].Color + ":" + nLand + "\n";
|
||||||
|
|
||||||
// just to prevent a null exception by the deck size fixing code
|
// just to prevent a null exception by the deck size fixing
|
||||||
|
// code
|
||||||
cardCounts.put(ClrCnts[i].Color, nLand);
|
cardCounts.put(ClrCnts[i].Color, nLand);
|
||||||
|
|
||||||
for (int j = 0; j <= nLand; j++)
|
for (int j = 0; j <= nLand; j++) {
|
||||||
tDeck.add(AllZone.getCardFactory().getCard(ClrCnts[i].Color, AllZone.getComputerPlayer()));
|
tDeck.add(AllZone.getCardFactory().getCard(ClrCnts[i].Color, AllZone.getComputerPlayer()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -342,8 +372,9 @@ public class Generate3ColorDeck {
|
|||||||
c = tDeck.get(r.nextInt(tDeck.size()));
|
c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
lc++;
|
lc++;
|
||||||
}
|
}
|
||||||
if (lc > Size)
|
if (lc > Size) {
|
||||||
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- undersize");
|
throw new RuntimeException("Generate3ColorDeck : get3ColorDeck -- looped too much -- undersize");
|
||||||
|
}
|
||||||
|
|
||||||
int n = cardCounts.get(c.getName());
|
int n = cardCounts.get(c.getName());
|
||||||
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
|
||||||
@@ -356,8 +387,10 @@ public class Generate3ColorDeck {
|
|||||||
for (int i = 0; i < diff; i++) {
|
for (int i = 0; i < diff; i++) {
|
||||||
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
|
|
||||||
while (c.isBasicLand()) // don't remove basic lands
|
while (c.isBasicLand()) {
|
||||||
|
// don't remove basic lands
|
||||||
c = tDeck.get(r.nextInt(tDeck.size()));
|
c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
|
}
|
||||||
|
|
||||||
tDeck.remove(c);
|
tDeck.remove(c);
|
||||||
tmpDeck += "Removed:" + c.getName() + "\n";
|
tmpDeck += "Removed:" + c.getName() + "\n";
|
||||||
@@ -365,8 +398,9 @@ public class Generate3ColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tmpDeck += "DeckSize:" + tDeck.size() + "\n";
|
tmpDeck += "DeckSize:" + tDeck.size() + "\n";
|
||||||
if (ForgeProps.getProperty("showdeck/3color", "false").equals("true"))
|
if (ForgeProps.getProperty("showdeck/3color", "false").equals("true")) {
|
||||||
ErrorViewer.showError(tmpDeck);
|
ErrorViewer.showError(tmpDeck);
|
||||||
|
}
|
||||||
|
|
||||||
return tDeck;
|
return tDeck;
|
||||||
}
|
}
|
||||||
@@ -375,7 +409,7 @@ public class Generate3ColorDeck {
|
|||||||
public String Color;
|
public String Color;
|
||||||
public int Count;
|
public int Count;
|
||||||
|
|
||||||
public CCnt(String clr, int cnt) {
|
public CCnt(final String clr, final int cnt) {
|
||||||
Color = clr;
|
Color = clr;
|
||||||
Count = cnt;
|
Count = cnt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,10 @@ import forge.error.ErrorViewer;
|
|||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Generate5ColorDeck class.</p>
|
* <p>
|
||||||
*
|
* Generate5ColorDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -35,24 +37,30 @@ public class Generate5ColorDeck {
|
|||||||
private Map<String, Integer> cardCounts = null;
|
private Map<String, Integer> cardCounts = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Instantiates a new generate5 color deck.
|
||||||
*/
|
*/
|
||||||
public Generate5ColorDeck() {
|
public Generate5ColorDeck() {
|
||||||
this("white", "blue", "black", "red", "green");
|
this("white", "blue", "black", "red", "green");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Generate5ColorDeck.</p>
|
* <p>
|
||||||
*
|
* Constructor for Generate5ColorDeck.
|
||||||
* @param clr1 a {@link java.lang.String} object.
|
* </p>
|
||||||
* @param clr2 a {@link java.lang.String} object.
|
*
|
||||||
* @param clr3 a {@link java.lang.String} object.
|
* @param clr1
|
||||||
* @param clr4 a {@link java.lang.String} object.
|
* a {@link java.lang.String} object.
|
||||||
* @param clr5 a {@link java.lang.String} object.
|
* @param clr2
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param clr3
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param clr4
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param clr5
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public Generate5ColorDeck(final String clr1, final String clr2,
|
public Generate5ColorDeck(final String clr1, final String clr2, final String clr3, final String clr4,
|
||||||
final String clr3, final String clr4, final String clr5)
|
final String clr5) {
|
||||||
{
|
|
||||||
r = MyRandom.random;
|
r = MyRandom.random;
|
||||||
|
|
||||||
cardCounts = new HashMap<String, Integer>();
|
cardCounts = new HashMap<String, Integer>();
|
||||||
@@ -91,10 +99,14 @@ public class Generate5ColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get3ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get3ColorDeck.
|
||||||
* @param size a int.
|
* </p>
|
||||||
* @param pt a PlayerType
|
*
|
||||||
|
* @param size
|
||||||
|
* a int.
|
||||||
|
* @param pt
|
||||||
|
* a PlayerType
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public final CardList get5ColorDeck(final int size, final PlayerType pt) {
|
public final CardList get5ColorDeck(final int size, final PlayerType pt) {
|
||||||
@@ -112,8 +124,8 @@ public class Generate5ColorDeck {
|
|||||||
public boolean addCard(final Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.getSVar("RemRandomDeck").equals("True")) {
|
if (c.getSVar("RemRandomDeck").equals("True")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
return (!c.getSVar("RemAIDeck").equals("True") || (pt != null && pt.equals(PlayerType.HUMAN)));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -149,7 +161,7 @@ public class Generate5ColorDeck {
|
|||||||
CardList cr4 = cL4.getType("Creature");
|
CardList cr4 = cL4.getType("Creature");
|
||||||
CardList cr5 = cL5.getType("Creature");
|
CardList cr5 = cL5.getType("Creature");
|
||||||
|
|
||||||
String[] ise = {"Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature"};
|
String[] ise = { "Instant", "Sorcery", "Enchantment", "Planeswalker", "Artifact.nonCreature" };
|
||||||
CardList sp1 = cL1.getValidCards(ise, null, null);
|
CardList sp1 = cL1.getValidCards(ise, null, null);
|
||||||
CardList sp2 = cL2.getValidCards(ise, null, null);
|
CardList sp2 = cL2.getValidCards(ise, null, null);
|
||||||
CardList sp3 = cL3.getValidCards(ise, null, null);
|
CardList sp3 = cL3.getValidCards(ise, null, null);
|
||||||
@@ -161,8 +173,8 @@ public class Generate5ColorDeck {
|
|||||||
CardList sp12345 = new CardList();
|
CardList sp12345 = new CardList();
|
||||||
|
|
||||||
// used for mana curve in the card pool
|
// used for mana curve in the card pool
|
||||||
final int[] minCMC = {1};
|
final int[] minCMC = { 1 };
|
||||||
final int[] maxCMC = {3};
|
final int[] maxCMC = { 3 };
|
||||||
CardListFilter cmcF = new CardListFilter() {
|
CardListFilter cmcF = new CardListFilter() {
|
||||||
public boolean addCard(final Card c) {
|
public boolean addCard(final Card c) {
|
||||||
int cCMC = c.getCMC();
|
int cCMC = c.getCMC();
|
||||||
@@ -229,10 +241,11 @@ public class Generate5ColorDeck {
|
|||||||
minCMC[0] += 2;
|
minCMC[0] += 2;
|
||||||
maxCMC[0] += 2;
|
maxCMC[0] += 2;
|
||||||
// resulting mana curve of the card pool
|
// resulting mana curve of the card pool
|
||||||
//18x 1 - 3
|
// 18x 1 - 3
|
||||||
//12x 3 - 5
|
// 12x 3 - 5
|
||||||
//6x 5 - 7
|
// 6x 5 - 7
|
||||||
//=36x - card pool could support up to a 257 card deck (all 4-ofs plus basic lands)
|
// =36x - card pool could support up to a 257 card deck (all 4-ofs
|
||||||
|
// plus basic lands)
|
||||||
}
|
}
|
||||||
|
|
||||||
// shuffle card pools
|
// shuffle card pools
|
||||||
@@ -290,7 +303,8 @@ public class Generate5ColorDeck {
|
|||||||
if (landsPercentage > 0) {
|
if (landsPercentage > 0) {
|
||||||
p = (float) ((float) landsPercentage * .01);
|
p = (float) ((float) landsPercentage * .01);
|
||||||
numLands = (int) (p * (float) size);
|
numLands = (int) (p * (float) size);
|
||||||
} else { // otherwise, just fill in the rest of the deck with basic lands
|
} else { // otherwise, just fill in the rest of the deck with basic
|
||||||
|
// lands
|
||||||
numLands = size - tDeck.size();
|
numLands = size - tDeck.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,13 +331,11 @@ public class Generate5ColorDeck {
|
|||||||
|
|
||||||
numLands -= nDLands;
|
numLands -= nDLands;
|
||||||
|
|
||||||
if (numLands > 0) // attempt to optimize basic land counts according to color representation
|
if (numLands > 0) // attempt to optimize basic land counts according to
|
||||||
|
// color representation
|
||||||
{
|
{
|
||||||
CCnt[] clrCnts = {new CCnt("Plains", 0),
|
CCnt[] clrCnts = { new CCnt("Plains", 0), new CCnt("Island", 0), new CCnt("Swamp", 0),
|
||||||
new CCnt("Island", 0),
|
new CCnt("Mountain", 0), new CCnt("Forest", 0) };
|
||||||
new CCnt("Swamp", 0),
|
|
||||||
new CCnt("Mountain", 0),
|
|
||||||
new CCnt("Forest", 0)};
|
|
||||||
|
|
||||||
// count each card color using mana costs
|
// count each card color using mana costs
|
||||||
// TODO: count hybrid mana differently?
|
// TODO: count hybrid mana differently?
|
||||||
@@ -336,17 +348,13 @@ public class Generate5ColorDeck {
|
|||||||
|
|
||||||
if (c == 'W') {
|
if (c == 'W') {
|
||||||
clrCnts[0].setCount(clrCnts[0].getCount() + 1);
|
clrCnts[0].setCount(clrCnts[0].getCount() + 1);
|
||||||
}
|
} else if (c == 'U') {
|
||||||
else if (c == 'U') {
|
|
||||||
clrCnts[1].setCount(clrCnts[1].getCount() + 1);
|
clrCnts[1].setCount(clrCnts[1].getCount() + 1);
|
||||||
}
|
} else if (c == 'B') {
|
||||||
else if (c == 'B') {
|
|
||||||
clrCnts[2].setCount(clrCnts[2].getCount() + 1);
|
clrCnts[2].setCount(clrCnts[2].getCount() + 1);
|
||||||
}
|
} else if (c == 'R') {
|
||||||
else if (c == 'R') {
|
|
||||||
clrCnts[3].setCount(clrCnts[3].getCount() + 1);
|
clrCnts[3].setCount(clrCnts[3].getCount() + 1);
|
||||||
}
|
} else if (c == 'G') {
|
||||||
else if (c == 'G') {
|
|
||||||
clrCnts[4].setCount(clrCnts[4].getCount() + 1);
|
clrCnts[4].setCount(clrCnts[4].getCount() + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -362,12 +370,14 @@ public class Generate5ColorDeck {
|
|||||||
tmpDeck += "totalColor:" + totalColor + "\n";
|
tmpDeck += "totalColor:" + totalColor + "\n";
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
if (clrCnts[i].getCount() > 0) { // calculate number of lands for each color
|
if (clrCnts[i].getCount() > 0) { // calculate number of lands
|
||||||
|
// for each color
|
||||||
p = (float) clrCnts[i].getCount() / (float) totalColor;
|
p = (float) clrCnts[i].getCount() / (float) totalColor;
|
||||||
int nLand = (int) ((float) numLands * p);
|
int nLand = (int) ((float) numLands * p);
|
||||||
tmpDeck += "nLand-" + clrCnts[i].getColor() + ":" + nLand + "\n";
|
tmpDeck += "nLand-" + clrCnts[i].getColor() + ":" + nLand + "\n";
|
||||||
|
|
||||||
// just to prevent a null exception by the deck size fixing code
|
// just to prevent a null exception by the deck size fixing
|
||||||
|
// code
|
||||||
cardCounts.put(clrCnts[i].getColor(), nLand);
|
cardCounts.put(clrCnts[i].getColor(), nLand);
|
||||||
|
|
||||||
for (int j = 0; j <= nLand; j++) {
|
for (int j = 0; j <= nLand; j++) {
|
||||||
@@ -405,7 +415,7 @@ public class Generate5ColorDeck {
|
|||||||
for (int i = 0; i < diff; i++) {
|
for (int i = 0; i < diff; i++) {
|
||||||
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
Card c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
|
|
||||||
while (c.isBasicLand()) { // don't remove basic lands
|
while (c.isBasicLand()) { // don't remove basic lands
|
||||||
c = tDeck.get(r.nextInt(tDeck.size()));
|
c = tDeck.get(r.nextInt(tDeck.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardFilter;
|
import forge.CardFilter;
|
||||||
@@ -9,13 +13,12 @@ import forge.CardListUtil;
|
|||||||
import forge.CardUtil;
|
import forge.CardUtil;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>GenerateConstructedDeck class.</p>
|
* <p>
|
||||||
*
|
* GenerateConstructedDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -26,14 +29,18 @@ public class GenerateConstructedDeck {
|
|||||||
private Map<String, String> map = new HashMap<String, String>();
|
private Map<String, String> map = new HashMap<String, String>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for GenerateConstructedDeck.</p>
|
* <p>
|
||||||
|
* Constructor for GenerateConstructedDeck.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public GenerateConstructedDeck() {
|
public GenerateConstructedDeck() {
|
||||||
setupMap();
|
setupMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>setupMap.</p>
|
* <p>
|
||||||
|
* setupMap.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
private void setupMap() {
|
private void setupMap() {
|
||||||
map.put(Constant.Color.Black, "Swamp");
|
map.put(Constant.Color.Black, "Swamp");
|
||||||
@@ -44,8 +51,10 @@ public class GenerateConstructedDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>generateDeck.</p>
|
* <p>
|
||||||
*
|
* generateDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public final CardList generateDeck() {
|
public final CardList generateDeck() {
|
||||||
@@ -62,16 +71,21 @@ public class GenerateConstructedDeck {
|
|||||||
addLand(deck);
|
addLand(deck);
|
||||||
|
|
||||||
if (deck.size() != 60) {
|
if (deck.size() != 60) {
|
||||||
throw new RuntimeException("GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is " + deck.size());
|
throw new RuntimeException(
|
||||||
|
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
||||||
|
+ deck.size());
|
||||||
}
|
}
|
||||||
return deck;
|
return deck;
|
||||||
}
|
}
|
||||||
|
|
||||||
//25 lands
|
// 25 lands
|
||||||
/**
|
/**
|
||||||
* <p>addLand.</p>
|
* <p>
|
||||||
*
|
* addLand.
|
||||||
* @param list a {@link forge.CardList} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private void addLand(final CardList list) {
|
private void addLand(final CardList list) {
|
||||||
Card land;
|
Card land;
|
||||||
@@ -82,25 +96,27 @@ public class GenerateConstructedDeck {
|
|||||||
land = AllZone.getCardFactory().getCard(map.get(color2).toString(), AllZone.getComputerPlayer());
|
land = AllZone.getCardFactory().getCard(map.get(color2).toString(), AllZone.getComputerPlayer());
|
||||||
list.add(land);
|
list.add(land);
|
||||||
}
|
}
|
||||||
} //addLand()
|
} // addLand()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a CardList from the set of all cards that meets the criteria
|
* Creates a CardList from the set of all cards that meets the criteria for
|
||||||
* for color(s), type, whether the card is suitable for
|
* color(s), type, whether the card is suitable for placement in random
|
||||||
* placement in random decks and in AI decks, etc.
|
* decks and in AI decks, etc.
|
||||||
*
|
*
|
||||||
* @see #filterBadCards(Iterable)
|
* @see #filterBadCards(Iterable)
|
||||||
*
|
*
|
||||||
* @return a subset of cards <= the set of all cards; might be empty, but
|
* @return a subset of cards <= the set of all cards; might be empty, but
|
||||||
* never null
|
* never null
|
||||||
*/
|
*/
|
||||||
private CardList getCards() {
|
private CardList getCards() {
|
||||||
return filterBadCards(AllZone.getCardFactory());
|
return filterBadCards(AllZone.getCardFactory());
|
||||||
} //getCards()
|
} // getCards()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get2ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get2ColorDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get2ColorDeck() {
|
private CardList get2ColorDeck() {
|
||||||
@@ -109,7 +125,8 @@ public class GenerateConstructedDeck {
|
|||||||
CardList out = new CardList();
|
CardList out = new CardList();
|
||||||
deck.shuffle();
|
deck.shuffle();
|
||||||
|
|
||||||
//trim deck size down to 34 cards, presumes 26 land, for a total of 60 cards
|
// 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++) {
|
for (int i = 0; i < 34 && i < deck.size(); i++) {
|
||||||
out.add(deck.get(i));
|
out.add(deck.get(i));
|
||||||
}
|
}
|
||||||
@@ -117,9 +134,12 @@ public class GenerateConstructedDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get2Colors.</p>
|
* <p>
|
||||||
*
|
* get2Colors.
|
||||||
* @param in a {@link forge.CardList} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param in
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get2Colors(final CardList in) {
|
private CardList get2Colors(final CardList in) {
|
||||||
@@ -129,7 +149,7 @@ public class GenerateConstructedDeck {
|
|||||||
do {
|
do {
|
||||||
a = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
a = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
||||||
b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
||||||
} while (a == b); //do not want to get the same color twice
|
} while (a == b); // do not want to get the same color twice
|
||||||
|
|
||||||
color1 = Constant.Color.onlyColors[a];
|
color1 = Constant.Color.onlyColors[a];
|
||||||
color2 = Constant.Color.onlyColors[b];
|
color2 = Constant.Color.onlyColors[b];
|
||||||
@@ -141,8 +161,8 @@ public class GenerateConstructedDeck {
|
|||||||
|
|
||||||
CardList artifact = in.filter(new CardListFilter() {
|
CardList artifact = in.filter(new CardListFilter() {
|
||||||
public boolean addCard(final Card c) {
|
public boolean addCard(final Card c) {
|
||||||
//is this really a colorless artifact and not something
|
// is this really a colorless artifact and not something
|
||||||
//weird like Sarcomite Myr which is a colored artifact
|
// weird like Sarcomite Myr which is a colored artifact
|
||||||
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.Colorless)
|
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.Colorless)
|
||||||
&& !Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
&& !Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
||||||
}
|
}
|
||||||
@@ -164,14 +184,14 @@ public class GenerateConstructedDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a CardList from the given sequence that meets the criteria
|
* Creates a CardList from the given sequence that meets the criteria for
|
||||||
* for color(s), type, whether the card is suitable for
|
* color(s), type, whether the card is suitable for placement in random
|
||||||
* placement in random decks and in AI decks, etc.
|
* decks and in AI decks, etc.
|
||||||
*
|
|
||||||
* @param sequence an iterable over Card instances
|
|
||||||
*
|
*
|
||||||
* @return a subset of sequence <= sequence; might be empty, but never
|
* @param sequence
|
||||||
* null
|
* an iterable over Card instances
|
||||||
|
*
|
||||||
|
* @return a subset of sequence <= sequence; might be empty, but never null
|
||||||
*/
|
*/
|
||||||
private CardList filterBadCards(final Iterable<Card> sequence) {
|
private CardList filterBadCards(final Iterable<Card> sequence) {
|
||||||
|
|
||||||
@@ -185,14 +205,15 @@ public class GenerateConstructedDeck {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CardUtil.getColors(c).size() <= 2 //only dual colored gold cards
|
return CardUtil.getColors(c).size() <= 2 // only dual colored
|
||||||
&& !c.isLand() //no land
|
// gold cards
|
||||||
&& !c.getSVar("RemRandomDeck").equals("True")
|
&& !c.isLand() // no land
|
||||||
&& !c.getSVar("RemAIDeck").equals("True") //OR very important
|
&& !c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True")
|
||||||
|
// OR very important
|
||||||
|| goodLand.contains(c.getName());
|
|| goodLand.contains(c.getName());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
} //filterBadCards()
|
} // filterBadCards()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,24 @@
|
|||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|
||||||
import forge.*;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>GenerateConstructedMultiColorDeck class.</p>
|
* <p>
|
||||||
*
|
* GenerateConstructedMultiColorDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -22,7 +33,9 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
private Map<String, String[]> multiMap = new HashMap<String, String[]>();
|
private Map<String, String[]> multiMap = new HashMap<String, String[]>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for GenerateConstructedMultiColorDeck.</p>
|
* <p>
|
||||||
|
* Constructor for GenerateConstructedMultiColorDeck.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public GenerateConstructedMultiColorDeck() {
|
public GenerateConstructedMultiColorDeck() {
|
||||||
setupBasicLandMap();
|
setupBasicLandMap();
|
||||||
@@ -30,7 +43,9 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>setupBasicLandMap.</p>
|
* <p>
|
||||||
|
* setupBasicLandMap.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
private void setupBasicLandMap() {
|
private void setupBasicLandMap() {
|
||||||
map.put(Constant.Color.Black, "Swamp");
|
map.put(Constant.Color.Black, "Swamp");
|
||||||
@@ -41,38 +56,41 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>setupMultiMap.</p>
|
* <p>
|
||||||
|
* setupMultiMap.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
private void setupMultiMap() {
|
private void setupMultiMap() {
|
||||||
multiMap.put(Constant.Color.Black + Constant.Color.Blue, new String[]{"Underground Sea", "Watery Grave"});
|
multiMap.put(Constant.Color.Black + Constant.Color.Blue, new String[] { "Underground Sea", "Watery Grave" });
|
||||||
multiMap.put(Constant.Color.Black + Constant.Color.Green, new String[]{"Bayou", "Overgrown Tomb"});
|
multiMap.put(Constant.Color.Black + Constant.Color.Green, new String[] { "Bayou", "Overgrown Tomb" });
|
||||||
multiMap.put(Constant.Color.Black + Constant.Color.Red, new String[]{"Badlands", "Blood Crypt"});
|
multiMap.put(Constant.Color.Black + Constant.Color.Red, new String[] { "Badlands", "Blood Crypt" });
|
||||||
multiMap.put(Constant.Color.Black + Constant.Color.White, new String[]{"Scrubland", "Godless Shrine"});
|
multiMap.put(Constant.Color.Black + Constant.Color.White, new String[] { "Scrubland", "Godless Shrine" });
|
||||||
multiMap.put(Constant.Color.Blue + Constant.Color.Black, new String[]{"Underground Sea", "Watery Grave"});
|
multiMap.put(Constant.Color.Blue + Constant.Color.Black, new String[] { "Underground Sea", "Watery Grave" });
|
||||||
multiMap.put(Constant.Color.Blue + Constant.Color.Green, new String[]{"Tropical Island", "Breeding Pool"});
|
multiMap.put(Constant.Color.Blue + Constant.Color.Green, new String[] { "Tropical Island", "Breeding Pool" });
|
||||||
multiMap.put(Constant.Color.Blue + Constant.Color.Red, new String[]{"Volcanic Island", "Steam Vents"});
|
multiMap.put(Constant.Color.Blue + Constant.Color.Red, new String[] { "Volcanic Island", "Steam Vents" });
|
||||||
multiMap.put(Constant.Color.Blue + Constant.Color.White, new String[]{"Tundra", "Hallowed Fountain"});
|
multiMap.put(Constant.Color.Blue + Constant.Color.White, new String[] { "Tundra", "Hallowed Fountain" });
|
||||||
multiMap.put(Constant.Color.Green + Constant.Color.Black, new String[]{"Bayou", "Overgrown Tomb"});
|
multiMap.put(Constant.Color.Green + Constant.Color.Black, new String[] { "Bayou", "Overgrown Tomb" });
|
||||||
multiMap.put(Constant.Color.Green + Constant.Color.Blue, new String[]{"Tropical Island", "Breeding Pool"});
|
multiMap.put(Constant.Color.Green + Constant.Color.Blue, new String[] { "Tropical Island", "Breeding Pool" });
|
||||||
multiMap.put(Constant.Color.Green + Constant.Color.Red, new String[]{"Taiga", "Stomping Ground"});
|
multiMap.put(Constant.Color.Green + Constant.Color.Red, new String[] { "Taiga", "Stomping Ground" });
|
||||||
multiMap.put(Constant.Color.Green + Constant.Color.White, new String[]{"Savannah", "Temple Garden"});
|
multiMap.put(Constant.Color.Green + Constant.Color.White, new String[] { "Savannah", "Temple Garden" });
|
||||||
multiMap.put(Constant.Color.Red + Constant.Color.Black, new String[]{"Badlands", "Blood Crypt"});
|
multiMap.put(Constant.Color.Red + Constant.Color.Black, new String[] { "Badlands", "Blood Crypt" });
|
||||||
multiMap.put(Constant.Color.Red + Constant.Color.Blue, new String[]{"Volcanic Island", "Steam Vents"});
|
multiMap.put(Constant.Color.Red + Constant.Color.Blue, new String[] { "Volcanic Island", "Steam Vents" });
|
||||||
multiMap.put(Constant.Color.Red + Constant.Color.Green, new String[]{"Taiga", "Stomping Ground"});
|
multiMap.put(Constant.Color.Red + Constant.Color.Green, new String[] { "Taiga", "Stomping Ground" });
|
||||||
multiMap.put(Constant.Color.Red + Constant.Color.White, new String[]{"Plateau", "Sacred Foundry"});
|
multiMap.put(Constant.Color.Red + Constant.Color.White, new String[] { "Plateau", "Sacred Foundry" });
|
||||||
multiMap.put(Constant.Color.White + Constant.Color.Black, new String[]{"Scrubland", "Godless Shrine"});
|
multiMap.put(Constant.Color.White + Constant.Color.Black, new String[] { "Scrubland", "Godless Shrine" });
|
||||||
multiMap.put(Constant.Color.White + Constant.Color.Blue, new String[]{"Tundra", "Hallowed Fountain"});
|
multiMap.put(Constant.Color.White + Constant.Color.Blue, new String[] { "Tundra", "Hallowed Fountain" });
|
||||||
multiMap.put(Constant.Color.White + Constant.Color.Green, new String[]{"Savannah", "Temple Garden"});
|
multiMap.put(Constant.Color.White + Constant.Color.Green, new String[] { "Savannah", "Temple Garden" });
|
||||||
multiMap.put(Constant.Color.White + Constant.Color.Red, new String[]{"Plateau", "Sacred Foundry"});
|
multiMap.put(Constant.Color.White + Constant.Color.Red, new String[] { "Plateau", "Sacred Foundry" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>generate3ColorDeck.</p>
|
* <p>
|
||||||
*
|
* generate3ColorDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public CardList generate3ColorDeck() {
|
public final CardList generate3ColorDeck() {
|
||||||
CardList deck;
|
CardList deck;
|
||||||
|
|
||||||
int check;
|
int check;
|
||||||
@@ -85,37 +103,49 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
|
|
||||||
addLand(deck, 3);
|
addLand(deck, 3);
|
||||||
|
|
||||||
if (deck.size() != 60)
|
if (deck.size() != 60) {
|
||||||
throw new RuntimeException("GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is " + deck.size());
|
throw new RuntimeException(
|
||||||
|
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
||||||
|
+ deck.size());
|
||||||
|
}
|
||||||
|
|
||||||
return deck;
|
return deck;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>generate5ColorDeck.</p>
|
* <p>
|
||||||
*
|
* generate5ColorDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public CardList generate5ColorDeck() {
|
public final CardList generate5ColorDeck() {
|
||||||
CardList deck;
|
CardList deck;
|
||||||
|
|
||||||
deck = get5ColorDeck();
|
deck = get5ColorDeck();
|
||||||
|
|
||||||
addLand(deck, 5);
|
addLand(deck, 5);
|
||||||
|
|
||||||
if (deck.size() != 60)
|
if (deck.size() != 60) {
|
||||||
throw new RuntimeException("GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is " + deck.size());
|
throw new RuntimeException(
|
||||||
|
"GenerateConstructedDeck() : generateDeck() error, deck size it not 60, deck size is "
|
||||||
|
+ deck.size());
|
||||||
|
}
|
||||||
|
|
||||||
return deck;
|
return deck;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>addLand.</p>
|
* <p>
|
||||||
*
|
* addLand.
|
||||||
* @param list a {@link forge.CardList} object.
|
* </p>
|
||||||
* @param colors a int.
|
*
|
||||||
|
* @param list
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
|
* @param colors
|
||||||
|
* a int.
|
||||||
*/
|
*/
|
||||||
private void addLand(CardList list, int colors) {
|
private void addLand(final CardList list, final int colors) {
|
||||||
if (colors == 3) {
|
if (colors == 3) {
|
||||||
int numberBasic = 2;
|
int numberBasic = 2;
|
||||||
Card land;
|
Card land;
|
||||||
@@ -173,7 +203,6 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
list.add(land);
|
list.add(land);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int numberDual = 2;
|
int numberDual = 2;
|
||||||
for (int i = 0; i < numberDual; i++) {
|
for (int i = 0; i < numberDual; i++) {
|
||||||
land = AllZone.getCardFactory().getCard(multiMap.get(color1 + color2)[0], AllZone.getComputerPlayer());
|
land = AllZone.getCardFactory().getCard(multiMap.get(color1 + color2)[0], AllZone.getComputerPlayer());
|
||||||
@@ -208,25 +237,28 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}//addLand()
|
} // addLand()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters out cards by color and their suitability for being placed in
|
* Filters out cards by color and their suitability for being placed in a
|
||||||
* a randomly created deck.
|
* 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
|
* @param colors
|
||||||
* which might be empty, but never null
|
* 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(int colors) {
|
private CardList getCards(final int colors) {
|
||||||
return filterBadCards(AllZone.getCardFactory(), colors);
|
return filterBadCards(AllZone.getCardFactory(), colors);
|
||||||
}//getCards()
|
} // getCards()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get3ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get3ColorDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get3ColorDeck() {
|
private CardList get3ColorDeck() {
|
||||||
@@ -235,16 +267,20 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
CardList out = new CardList();
|
CardList out = new CardList();
|
||||||
deck.shuffle();
|
deck.shuffle();
|
||||||
|
|
||||||
//trim deck size down to 36 cards, presumes 24 land, for a total of 60 cards
|
// trim deck size down to 36 cards, presumes 24 land, for a total of 60
|
||||||
for (int i = 0; i < 36 && i < deck.size(); i++)
|
// cards
|
||||||
|
for (int i = 0; i < 36 && i < deck.size(); i++) {
|
||||||
out.add(deck.get(i));
|
out.add(deck.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get5ColorDeck.</p>
|
* <p>
|
||||||
*
|
* get5ColorDeck.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get5ColorDeck() {
|
private CardList get5ColorDeck() {
|
||||||
@@ -253,20 +289,25 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
CardList out = new CardList();
|
CardList out = new CardList();
|
||||||
deck.shuffle();
|
deck.shuffle();
|
||||||
|
|
||||||
//trim deck size down to 36 cards, presumes 24 land, for a total of 60 cards
|
// trim deck size down to 36 cards, presumes 24 land, for a total of 60
|
||||||
for (int i = 0; i < 36 && i < deck.size(); i++)
|
// cards
|
||||||
|
for (int i = 0; i < 36 && i < deck.size(); i++) {
|
||||||
out.add(deck.get(i));
|
out.add(deck.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get3Colors.</p>
|
* <p>
|
||||||
*
|
* get3Colors.
|
||||||
* @param in a {@link forge.CardList} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param in
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get3Colors(CardList in) {
|
private CardList get3Colors(final CardList in) {
|
||||||
int a;
|
int a;
|
||||||
int b;
|
int b;
|
||||||
int c;
|
int c;
|
||||||
@@ -275,7 +316,8 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
do {
|
do {
|
||||||
b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
||||||
c = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
c = CardUtil.getRandomIndex(Constant.Color.onlyColors);
|
||||||
} while (a == b || a == c || b == c);//do not want to get the same color thrice
|
} while (a == b || a == c || b == c); // do not want to get the same
|
||||||
|
// color thrice
|
||||||
|
|
||||||
color1 = Constant.Color.onlyColors[a];
|
color1 = Constant.Color.onlyColors[a];
|
||||||
color2 = Constant.Color.onlyColors[b];
|
color2 = Constant.Color.onlyColors[b];
|
||||||
@@ -288,21 +330,18 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
out.shuffle();
|
out.shuffle();
|
||||||
|
|
||||||
CardList artifact = in.filter(new CardListFilter() {
|
CardList artifact = in.filter(new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
//is this really a colorless artifact and not something
|
// is this really a colorless artifact and not something
|
||||||
//wierd like Sarcomite Myr which is a colored artifact
|
// wierd like Sarcomite Myr which is a colored artifact
|
||||||
return c.isArtifact() &&
|
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.Colorless)
|
||||||
CardUtil.getColors(c).contains(Constant.Color.Colorless) &&
|
&& !Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
||||||
!Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
out.addAll(artifact);
|
out.addAll(artifact);
|
||||||
|
|
||||||
out = out.filter(new CardListFilter() {
|
out = out.filter(new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.isCreature() &&
|
if (c.isCreature() && c.getNetAttack() <= 1 && Singletons.getModel().getPreferences().deckGenRmvSmall) {
|
||||||
c.getNetAttack() <= 1 &&
|
|
||||||
Singletons.getModel().getPreferences().deckGenRmvSmall) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,12 +354,15 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>get5Colors.</p>
|
* <p>
|
||||||
*
|
* get5Colors.
|
||||||
* @param in a {@link forge.CardList} object.
|
* </p>
|
||||||
|
*
|
||||||
|
* @param in
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
private CardList get5Colors(CardList in) {
|
private CardList get5Colors(final CardList in) {
|
||||||
|
|
||||||
color1 = Constant.Color.Black;
|
color1 = Constant.Color.Black;
|
||||||
color2 = Constant.Color.Blue;
|
color2 = Constant.Color.Blue;
|
||||||
@@ -330,31 +372,28 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
|
|
||||||
CardList out = new CardList();
|
CardList out = new CardList();
|
||||||
/*
|
/*
|
||||||
out.addAll(CardListUtil.getColor(in, color1));
|
* out.addAll(CardListUtil.getColor(in, color1));
|
||||||
out.addAll(CardListUtil.getColor(in, color2));
|
* out.addAll(CardListUtil.getColor(in, color2));
|
||||||
out.addAll(CardListUtil.getColor(in, color3));
|
* out.addAll(CardListUtil.getColor(in, color3));
|
||||||
out.addAll(CardListUtil.getColor(in, color4));
|
* out.addAll(CardListUtil.getColor(in, color4));
|
||||||
out.addAll(CardListUtil.getColor(in, color5));
|
* out.addAll(CardListUtil.getColor(in, color5));
|
||||||
*/
|
*/
|
||||||
out.addAll(CardListUtil.getGoldCards(in));
|
out.addAll(CardListUtil.getGoldCards(in));
|
||||||
out.shuffle();
|
out.shuffle();
|
||||||
|
|
||||||
CardList artifact = in.filter(new CardListFilter() {
|
CardList artifact = in.filter(new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
//is this really a colorless artifact and not something
|
// is this really a colorless artifact and not something
|
||||||
//wierd like Sarcomite Myr which is a colored artifact
|
// wierd like Sarcomite Myr which is a colored artifact
|
||||||
return c.isArtifact() &&
|
return c.isArtifact() && CardUtil.getColors(c).contains(Constant.Color.Colorless)
|
||||||
CardUtil.getColors(c).contains(Constant.Color.Colorless) &&
|
&& !Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
||||||
!Singletons.getModel().getPreferences().deckGenRmvArtifacts;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
out.addAll(artifact);
|
out.addAll(artifact);
|
||||||
|
|
||||||
out = out.filter(new CardListFilter() {
|
out = out.filter(new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
if (c.isCreature() &&
|
if (c.isCreature() && c.getNetAttack() <= 1 && Singletons.getModel().getPreferences().deckGenRmvSmall) {
|
||||||
c.getNetAttack() <= 1 &&
|
|
||||||
Singletons.getModel().getPreferences().deckGenRmvSmall) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,56 +405,61 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters out cards by color and their suitability for being placed in
|
* Filters out cards by color and their suitability for being placed in a
|
||||||
* a randomly created deck.
|
* randomly created deck.
|
||||||
*
|
|
||||||
* @param sequence an Iterable of Card instances
|
|
||||||
*
|
*
|
||||||
* @param colors the number of different colors the deck should have;
|
* @param sequence
|
||||||
* if this is a number other than 3 or 5, we return an empty list.
|
* an Iterable of Card instances
|
||||||
*
|
*
|
||||||
* @return a subset of sequence <= sequence which might be empty, but
|
* @param colors
|
||||||
* never null
|
* 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(Iterable<Card> sequence, int colors) {
|
private CardList filterBadCards(final Iterable<Card> sequence, final int colors) {
|
||||||
final ArrayList<Card> goodLand = new ArrayList<Card>();
|
final ArrayList<Card> goodLand = new ArrayList<Card>();
|
||||||
//goodLand.add("Faerie Conclave");
|
// goodLand.add("Faerie Conclave");
|
||||||
//goodLand.add("Forbidding Watchtower");
|
// goodLand.add("Forbidding Watchtower");
|
||||||
//goodLand.add("Treetop Village");
|
// goodLand.add("Treetop Village");
|
||||||
|
|
||||||
CardList out = new CardList();
|
CardList out = new CardList();
|
||||||
if (colors == 3) {
|
if (colors == 3) {
|
||||||
|
|
||||||
out = CardFilter.filter(sequence, new CardListFilter() {
|
out = CardFilter.filter(sequence, new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
ArrayList<String> list = CardUtil.getColors(c);
|
ArrayList<String> list = CardUtil.getColors(c);
|
||||||
|
|
||||||
if (list.size() == 3) {
|
if (list.size() == 3) {
|
||||||
if (!list.contains(color1) || !list.contains(color2) || !list.contains(color3))
|
if (!list.contains(color1) || !list.contains(color2) || !list.contains(color3)) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
} else if (list.size() == 2) {
|
} else if (list.size() == 2) {
|
||||||
if (!(list.contains(color1) && list.contains(color2)) &&
|
if (!(list.contains(color1) && list.contains(color2))
|
||||||
!(list.contains(color1) && list.contains(color3)) &&
|
&& !(list.contains(color1) && list.contains(color3))
|
||||||
!(list.contains(color2) && list.contains(color3)))
|
&& !(list.contains(color2) && list.contains(color3))) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CardUtil.getColors(c).size() <= 3 &&
|
return CardUtil.getColors(c).size() <= 3 && !c.isLand() && // no
|
||||||
!c.isLand() && //no land
|
// land
|
||||||
!c.getSVar("RemRandomDeck").equals("True") &&
|
!c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True") ||
|
||||||
!c.getSVar("RemAIDeck").equals("True") || //OR very important
|
// OR very important
|
||||||
goodLand.contains(c.getName());
|
goodLand.contains(c.getName());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (colors == 5) {
|
} else if (colors == 5) {
|
||||||
out = CardFilter.filter(sequence, new CardListFilter() {
|
out = CardFilter.filter(sequence, new CardListFilter() {
|
||||||
public boolean addCard(Card c) {
|
public boolean addCard(final Card c) {
|
||||||
return CardUtil.getColors(c).size() >= 2 && //only get multicolored cards
|
return CardUtil.getColors(c).size() >= 2 && // only get
|
||||||
!c.isLand() && //no land
|
// multicolored
|
||||||
!c.getSVar("RemRandomDeck").equals("True") &&
|
// cards
|
||||||
!c.getSVar("RemAIDeck").equals("True") || //OR very important
|
!c.isLand() && // no land
|
||||||
|
!c.getSVar("RemRandomDeck").equals("True") && !c.getSVar("RemAIDeck").equals("True") ||
|
||||||
|
// OR very important
|
||||||
goodLand.contains(c.getName());
|
goodLand.contains(c.getName());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -423,5 +467,5 @@ public class GenerateConstructedMultiColorDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}//filterBadCards()
|
} // filterBadCards()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package forge.deck.generate;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>GenerateDeckUtil class.</p>
|
* <p>
|
||||||
*
|
* GenerateDeckUtil class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id: GenerateDeckUtil.java 10011 2011-08-28 12:20:52Z Sloth $
|
* @version $Id: GenerateDeckUtil.java 10011 2011-08-28 12:20:52Z Sloth $
|
||||||
*/
|
*/
|
||||||
@@ -13,7 +15,9 @@ public class GenerateDeckUtil {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Arrays of dual and tri-land cards.
|
* Arrays of dual and tri-land cards.
|
||||||
* @param colors a String
|
*
|
||||||
|
* @param colors
|
||||||
|
* a String
|
||||||
* @return ArrayList<String>
|
* @return ArrayList<String>
|
||||||
*/
|
*/
|
||||||
public static ArrayList<String> getDualLandList(final String colors) {
|
public static ArrayList<String> getDualLandList(final String colors) {
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.Card;
|
|
||||||
import forge.CardList;
|
|
||||||
import forge.MyRandom;
|
|
||||||
import forge.error.ErrorViewer;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
@@ -15,9 +9,17 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.CardList;
|
||||||
|
import forge.MyRandom;
|
||||||
|
import forge.error.ErrorViewer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>GenerateThemeDeck class.</p>
|
* <p>
|
||||||
*
|
* GenerateThemeDeck class.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@@ -25,15 +27,19 @@ public class GenerateThemeDeck {
|
|||||||
private BufferedReader in = null;
|
private BufferedReader in = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for GenerateThemeDeck.</p>
|
* <p>
|
||||||
|
* Constructor for GenerateThemeDeck.
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public GenerateThemeDeck() {
|
public GenerateThemeDeck() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getThemeNames.</p>
|
* <p>
|
||||||
*
|
* getThemeNames.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.util.ArrayList} object.
|
* @return a {@link java.util.ArrayList} object.
|
||||||
*/
|
*/
|
||||||
public final ArrayList<String> getThemeNames() {
|
public final ArrayList<String> getThemeNames() {
|
||||||
@@ -62,13 +68,17 @@ public class GenerateThemeDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>getThemeDeck.</p>
|
* <p>
|
||||||
*
|
* getThemeDeck.
|
||||||
* @param themeName a {@link java.lang.String} object.
|
* </p>
|
||||||
* @param size a int.
|
*
|
||||||
|
* @param themeName
|
||||||
|
* a {@link java.lang.String} object.
|
||||||
|
* @param size
|
||||||
|
* a int.
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public CardList getThemeDeck(final String themeName, final int size) {
|
public final CardList getThemeDeck(final String themeName, final int size) {
|
||||||
CardList tDeck = new CardList();
|
CardList tDeck = new CardList();
|
||||||
|
|
||||||
ArrayList<Grp> groups = new ArrayList<Grp>();
|
ArrayList<Grp> groups = new ArrayList<Grp>();
|
||||||
@@ -158,7 +168,9 @@ public class GenerateThemeDeck {
|
|||||||
s = g.Cardnames.get(r.nextInt(cnSize));
|
s = g.Cardnames.get(r.nextInt(cnSize));
|
||||||
|
|
||||||
int lc = 0;
|
int lc = 0;
|
||||||
while (cardCounts.get(s) >= g.MaxCnt || lc > size) // don't keep looping forever
|
while (cardCounts.get(s) >= g.MaxCnt || lc > size) // don't keep
|
||||||
|
// looping
|
||||||
|
// forever
|
||||||
{
|
{
|
||||||
s = g.Cardnames.get(r.nextInt(cnSize));
|
s = g.Cardnames.get(r.nextInt(cnSize));
|
||||||
lc++;
|
lc++;
|
||||||
@@ -177,22 +189,21 @@ public class GenerateThemeDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int numBLands = 0;
|
int numBLands = 0;
|
||||||
if (bLandPercentage > 0) { // if theme explicitly defines this
|
if (bLandPercentage > 0) { // if theme explicitly defines this
|
||||||
float p = (float) ((float) bLandPercentage * .01);
|
float p = (float) ((float) bLandPercentage * .01);
|
||||||
numBLands = (int) (p * (float) size);
|
numBLands = (int) (p * (float) size);
|
||||||
} else { // otherwise, just fill in the rest of the deck with basic lands
|
} else { // otherwise, just fill in the rest of the deck with basic
|
||||||
|
// lands
|
||||||
numBLands = size - tDeck.size();
|
numBLands = size - tDeck.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpDeck += "numBLands:" + numBLands + "\n";
|
tmpDeck += "numBLands:" + numBLands + "\n";
|
||||||
|
|
||||||
if (numBLands > 0) // attempt to optimize basic land counts according to color representation
|
if (numBLands > 0) // attempt to optimize basic land counts according to
|
||||||
|
// color representation
|
||||||
{
|
{
|
||||||
CCnt[] clrCnts = {new CCnt("Plains", 0),
|
CCnt[] clrCnts = { new CCnt("Plains", 0), new CCnt("Island", 0), new CCnt("Swamp", 0),
|
||||||
new CCnt("Island", 0),
|
new CCnt("Mountain", 0), new CCnt("Forest", 0) };
|
||||||
new CCnt("Swamp", 0),
|
|
||||||
new CCnt("Mountain", 0),
|
|
||||||
new CCnt("Forest", 0)};
|
|
||||||
|
|
||||||
// count each instance of a color in mana costs
|
// count each instance of a color in mana costs
|
||||||
// TODO count hybrid mana differently?
|
// TODO count hybrid mana differently?
|
||||||
@@ -225,7 +236,8 @@ public class GenerateThemeDeck {
|
|||||||
tmpDeck += "totalColor:" + totalColor + "\n";
|
tmpDeck += "totalColor:" + totalColor + "\n";
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) {
|
for (int i = 0; i < 5; i++) {
|
||||||
if (clrCnts[i].Count > 0) { // calculate number of lands for each color
|
if (clrCnts[i].Count > 0) { // calculate number of lands for
|
||||||
|
// each color
|
||||||
float p = (float) clrCnts[i].Count / (float) totalColor;
|
float p = (float) clrCnts[i].Count / (float) totalColor;
|
||||||
int nLand = (int) ((float) numBLands * p);
|
int nLand = (int) ((float) numBLands * p);
|
||||||
tmpDeck += "numLand-" + clrCnts[i].Color + ":" + nLand + "\n";
|
tmpDeck += "numLand-" + clrCnts[i].Color + ":" + nLand + "\n";
|
||||||
@@ -278,12 +290,14 @@ public class GenerateThemeDeck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>readLine.</p>
|
* <p>
|
||||||
*
|
* readLine.
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
* @return a {@link java.lang.String} object.
|
* @return a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
private String readLine() {
|
private String readLine() {
|
||||||
//makes the checked exception, into an unchecked runtime exception
|
// makes the checked exception, into an unchecked runtime exception
|
||||||
try {
|
try {
|
||||||
String s = in.readLine();
|
String s = in.readLine();
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
@@ -294,18 +308,30 @@ public class GenerateThemeDeck {
|
|||||||
ErrorViewer.showError(ex);
|
ErrorViewer.showError(ex);
|
||||||
throw new RuntimeException("GenerateThemeDeck : readLine error");
|
throw new RuntimeException("GenerateThemeDeck : readLine error");
|
||||||
}
|
}
|
||||||
} //readLine(Card)
|
} // readLine(Card)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* TODO Write javadoc for this type.
|
* TODO Write javadoc for this type.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class CCnt {
|
class CCnt {
|
||||||
|
|
||||||
|
/** The Color. */
|
||||||
public String Color;
|
public String Color;
|
||||||
|
|
||||||
|
/** The Count. */
|
||||||
public int Count;
|
public int Count;
|
||||||
|
|
||||||
public CCnt(String clr, int cnt) {
|
/**
|
||||||
|
* Instantiates a new c cnt.
|
||||||
|
*
|
||||||
|
* @param clr
|
||||||
|
* the clr
|
||||||
|
* @param cnt
|
||||||
|
* the cnt
|
||||||
|
*/
|
||||||
|
public CCnt(final String clr, final int cnt) {
|
||||||
Color = clr;
|
Color = clr;
|
||||||
Count = cnt;
|
Count = cnt;
|
||||||
}
|
}
|
||||||
@@ -314,12 +340,17 @@ public class GenerateThemeDeck {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* TODO Write javadoc for this type.
|
* TODO Write javadoc for this type.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class Grp {
|
class Grp {
|
||||||
|
|
||||||
|
/** The Cardnames. */
|
||||||
public ArrayList<String> Cardnames = new ArrayList<String>();
|
public ArrayList<String> Cardnames = new ArrayList<String>();
|
||||||
|
|
||||||
|
/** The Max cnt. */
|
||||||
public int MaxCnt;
|
public int MaxCnt;
|
||||||
|
|
||||||
|
/** The Percentage. */
|
||||||
public int Percentage;
|
public int Percentage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
/** Forge Card Game */
|
/** Forge Card Game. */
|
||||||
package forge.deck.generate;
|
package forge.deck.generate;
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
/** Forge Card Game */
|
/** Forge Card Game. */
|
||||||
package forge.deck;
|
package forge.deck;
|
||||||
|
|||||||
Reference in New Issue
Block a user