From f57cb39689b7fd7e2ca245fc2ba90b4dc46dded7 Mon Sep 17 00:00:00 2001
From: jendave
Date: Mon, 15 Aug 2011 07:55:35 +0000
Subject: [PATCH] forst cut of 5 color deck generator
---
.gitattributes | 4 +
res/main.properties | 2 +
.../deck/generate/Generate5ColorDeck.java | 436 ++++++++++++++++++
.../java/forge/view/swing/OldGuiNewGame.java | 127 +++--
.../deck/generate/Generate2ColorDeckTest.java | 24 +
.../deck/generate/Generate3ColorDeckTest.java | 25 +
.../deck/generate/Generate5ColorDeckTest.java | 25 +
7 files changed, 572 insertions(+), 71 deletions(-)
create mode 100644 src/main/java/forge/deck/generate/Generate5ColorDeck.java
create mode 100644 src/test/java/forge/deck/generate/Generate2ColorDeckTest.java
create mode 100644 src/test/java/forge/deck/generate/Generate3ColorDeckTest.java
create mode 100644 src/test/java/forge/deck/generate/Generate5ColorDeckTest.java
diff --git a/.gitattributes b/.gitattributes
index 42d0a48cd48..803b8a8bc3a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -9640,6 +9640,7 @@ src/main/java/forge/deck/DeckManager.java svneol=native#text/plain
src/main/java/forge/deck/DownloadDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/plain
+src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/GenerateConstructedDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/GenerateConstructedMultiColorDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain
@@ -9784,6 +9785,9 @@ src/test/java/forge/TinyTest.java svneol=native#text/plain
src/test/java/forge/card/cardFactory/CardFactoryTest.java svneol=native#text/plain
src/test/java/forge/card/cardFactory/CardFactoryUtilTest.java svneol=native#text/plain
src/test/java/forge/card/mana/Mana_PartTest.java svneol=native#text/plain
+src/test/java/forge/deck/generate/Generate2ColorDeckTest.java svneol=native#text/plain
+src/test/java/forge/deck/generate/Generate3ColorDeckTest.java svneol=native#text/plain
+src/test/java/forge/deck/generate/Generate5ColorDeckTest.java svneol=native#text/plain
src/test/java/forge/deck/generate/GenerateConstructedDeckTest.java svneol=native#text/plain
src/test/java/forge/deck/generate/GenerateConstructedMultiColorDeckTest.java svneol=native#text/plain
src/test/java/forge/gui/ListChooserTest.java svneol=native#text/plain
diff --git a/res/main.properties b/res/main.properties
index f09f7c8b59b..0e7147c6c74 100644
--- a/res/main.properties
+++ b/res/main.properties
@@ -2,6 +2,8 @@ program/howToReportBugsURL=http://tinyurl.com/3zzrnyb
showdeck/2color=false
showdeck/3color=false
+showdeck/4color=false
+showdeck/5color=false
tokens--file=AllTokens.txt
diff --git a/src/main/java/forge/deck/generate/Generate5ColorDeck.java b/src/main/java/forge/deck/generate/Generate5ColorDeck.java
new file mode 100644
index 00000000000..643d6c12619
--- /dev/null
+++ b/src/main/java/forge/deck/generate/Generate5ColorDeck.java
@@ -0,0 +1,436 @@
+package forge.deck.generate;
+
+import forge.*;
+import forge.error.ErrorViewer;
+import forge.properties.ForgeProps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * Generate3ColorDeck class.
+ *
+ * @author Forge
+ * @version $Id$
+ */
+public class Generate5ColorDeck {
+ private String color1 = "white";
+ private String color2 = "blue";
+ private String color3 = "black";
+ private String color4 = "red";
+ private String color5 = "green";
+ private Random r = null;
+ private Map ClrMap = null;
+ private ArrayList notColors = null;
+ private ArrayList DualLands = null;
+ private ArrayList DL = null;
+ private Map CardCounts = null;
+
+ public Generate5ColorDeck() {
+ this("white", "blue", "black", "red", "green");
+ }
+
+ /**
+ * Constructor for Generate5ColorDeck.
+ *
+ * @param Clr1 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(String Clr1, String Clr2, String Clr3, String Clr4, String Clr5) {
+ r = MyRandom.random;
+
+ CardCounts = new HashMap();
+
+ ClrMap = new HashMap();
+ ClrMap.put("white", "W");
+ ClrMap.put("blue", "U");
+ ClrMap.put("black", "B");
+ ClrMap.put("red", "R");
+ ClrMap.put("green", "G");
+
+ notColors = new ArrayList();
+ notColors.add("white");
+ notColors.add("blue");
+ notColors.add("black");
+ notColors.add("red");
+ notColors.add("green");
+
+ DualLands = new ArrayList();
+ DualLands.add(new DLnd("Tundra", "WU"));
+ DualLands.add(new DLnd("Hallowed Fountain", "WU"));
+ DualLands.add(new DLnd("Underground Sea", "UB"));
+ DualLands.add(new DLnd("Watery Grave", "UB"));
+ DualLands.add(new DLnd("Badlands", "BR"));
+ DualLands.add(new DLnd("Blood Crypt", "BR"));
+ DualLands.add(new DLnd("Taiga", "RG"));
+ DualLands.add(new DLnd("Stomping Ground", "RG"));
+ DualLands.add(new DLnd("Savannah", "GW"));
+ DualLands.add(new DLnd("Temple Garden", "GW"));
+ DualLands.add(new DLnd("Scrubland", "WB"));
+ DualLands.add(new DLnd("Godless Shrine", "WB"));
+ DualLands.add(new DLnd("Volcanic Island", "UR"));
+ DualLands.add(new DLnd("Steam Vents", "UR"));
+ DualLands.add(new DLnd("Bayou", "BG"));
+ DualLands.add(new DLnd("Overgrown Tomb", "BG"));
+ DualLands.add(new DLnd("Plateau", "RW"));
+ DualLands.add(new DLnd("Sacred Foundry", "RW"));
+ DualLands.add(new DLnd("Tropical Island", "GU"));
+ DualLands.add(new DLnd("Breeding Pool", "GU"));
+
+ color1 = Clr1;
+ color2 = Clr2;
+ color3 = Clr3;
+ color4 = Clr4;
+ color5 = Clr5;
+
+ notColors.remove(color1);
+ notColors.remove(color2);
+ notColors.remove(color3);
+ notColors.remove(color4);
+ notColors.remove(color5);
+
+ DL = new ArrayList();
+ for (int i = 0; i < DualLands.size(); i++) {
+ DLnd d = DualLands.get(i);
+ DL.add(d.Name);
+ CardCounts.put(d.Name, 0);
+ }
+ }
+
+ /**
+ * get3ColorDeck.
+ *
+ * @param Size a int.
+ * @return a {@link forge.CardList} object.
+ */
+ public CardList get5ColorDeck(int Size) {
+ int lc = 0; // loop counter to prevent infinite card selection loops
+ String tmpDeck = "";
+ CardList tDeck = new CardList();
+
+ int LandsPercentage = 44;
+ int CreatPercentage = 34;
+ int SpellPercentage = 22;
+
+ // start with all cards
+ // remove cards that generated decks don't like
+ CardList AllCards = CardFilter.filter(AllZone.getCardFactory(), new CardListFilter() {
+ public boolean addCard(Card c) {
+ return !(c.getSVar("RemAIDeck").equals("True") || c.getSVar("RemRandomDeck").equals("True"));
+ }
+ });
+
+ // reduce to cards that match the colors
+ CardList CL1 = AllCards.getColor(color1);
+ CardList CL2 = AllCards.getColor(color2);
+ CardList CL3 = AllCards.getColor(color3);
+ CardList CL4 = AllCards.getColor(color4);
+ CardList CL5 = AllCards.getColor(color5);
+
+ // remove multicolor cards that don't match the colors
+ CardListFilter clrF = new CardListFilter() {
+ public boolean addCard(Card c) {
+ for (int i = 0; i < notColors.size(); i++) {
+ if (c.getManaCost().contains(ClrMap.get(notColors.get(i))))
+ return false;
+ }
+ return true;
+ }
+ };
+ CL1 = CL1.filter(clrF);
+ CL2 = CL2.filter(clrF);
+ CL3 = CL3.filter(clrF);
+ CL4 = CL4.filter(clrF);
+ CL5 = CL5.filter(clrF);
+
+ // build subsets based on type
+ CardList Cr1 = CL1.getType("Creature");
+ CardList Cr2 = CL2.getType("Creature");
+ CardList Cr3 = CL3.getType("Creature");
+ CardList Cr4 = CL4.getType("Creature");
+ CardList Cr5 = CL5.getType("Creature");
+
+ String ISE[] = {"Instant", "Sorcery", "Enchantment", "Planeswalker"};
+ CardList Sp1 = CL1.getValidCards(ISE, null, null);
+ CardList Sp2 = CL2.getValidCards(ISE, null, null);
+ CardList Sp3 = CL3.getValidCards(ISE, null, null);
+ CardList Sp4 = CL4.getValidCards(ISE, null, null);
+ CardList Sp5 = CL5.getValidCards(ISE, null, null);
+
+ // final card pools
+ CardList Cr12345 = new CardList();
+ CardList Sp12345 = new CardList();
+
+ // used for mana curve in the card pool
+ final int MinCMC[] = {1}, MaxCMC[] = {3};
+ CardListFilter cmcF = new CardListFilter() {
+ public boolean addCard(Card c) {
+ int cCMC = c.getCMC();
+ return (cCMC >= MinCMC[0]) && (cCMC <= MaxCMC[0]);
+ }
+ };
+
+ // select cards to build card pools using a mana curve
+ for (int i = 3; i > 0; i--) {
+ CardList Cr1CMC = Cr1.filter(cmcF);
+ CardList Cr2CMC = Cr2.filter(cmcF);
+ CardList Cr3CMC = Cr3.filter(cmcF);
+ CardList Cr4CMC = Cr4.filter(cmcF);
+ CardList Cr5CMC = Cr5.filter(cmcF);
+
+ CardList Sp1CMC = Sp1.filter(cmcF);
+ CardList Sp2CMC = Sp2.filter(cmcF);
+ CardList Sp3CMC = Sp3.filter(cmcF);
+ CardList Sp4CMC = Sp4.filter(cmcF);
+ CardList Sp5CMC = Sp5.filter(cmcF);
+
+ for (int j = 0; j < i; j++) {
+ Card c = Cr1CMC.get(r.nextInt(Cr1CMC.size()));
+ Cr12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Cr2CMC.get(r.nextInt(Cr2CMC.size()));
+ Cr12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Cr3CMC.get(r.nextInt(Cr3CMC.size()));
+ Cr12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Cr4CMC.get(r.nextInt(Cr4CMC.size()));
+ Cr12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Cr5CMC.get(r.nextInt(Cr5CMC.size()));
+ Cr12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Sp1CMC.get(r.nextInt(Sp1CMC.size()));
+ Sp12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Sp2CMC.get(r.nextInt(Sp2CMC.size()));
+ Sp12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Sp3CMC.get(r.nextInt(Sp3CMC.size()));
+ Sp12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Sp4CMC.get(r.nextInt(Sp4CMC.size()));
+ Sp12345.add(c);
+ CardCounts.put(c.getName(), 0);
+
+ c = Sp5CMC.get(r.nextInt(Sp5CMC.size()));
+ Sp12345.add(c);
+ CardCounts.put(c.getName(), 0);
+ }
+
+ MinCMC[0] += 2;
+ MaxCMC[0] += 2;
+ // resulting mana curve of the card pool
+ //18x 1 - 3
+ //12x 3 - 5
+ //6x 5 - 7
+ //=36x - card pool could support up to a 257 card deck (all 4-ofs plus basic lands)
+ }
+
+ // shuffle card pools
+ Cr12345.shuffle();
+ Sp12345.shuffle();
+
+ // calculate card counts
+ float p = (float) ((float) CreatPercentage * .01);
+ int CreatCnt = (int) (p * (float) Size);
+ tmpDeck += "Creature Count:" + CreatCnt + "\n";
+
+ p = (float) ((float) SpellPercentage * .01);
+ int SpellCnt = (int) (p * (float) Size);
+ tmpDeck += "Spell Count:" + SpellCnt + "\n";
+
+ // build deck from the card pools
+ for (int i = 0; i < CreatCnt; i++) {
+ Card c = Cr12345.get(r.nextInt(Cr12345.size()));
+
+ lc = 0;
+ while (CardCounts.get(c.getName()) > 3 || lc > 100) {
+ c = Cr12345.get(r.nextInt(Cr12345.size()));
+ lc++;
+ }
+ if (lc > 100)
+ throw new RuntimeException("Generate5ColorDeck : get5ColorDeck -- looped too much -- Cr123");
+
+ tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
+ int n = CardCounts.get(c.getName());
+ CardCounts.put(c.getName(), n + 1);
+ tmpDeck += c.getName() + " " + c.getManaCost() + "\n";
+ }
+
+ for (int i = 0; i < SpellCnt; i++) {
+ Card c = Sp12345.get(r.nextInt(Sp12345.size()));
+
+ lc = 0;
+ while (CardCounts.get(c.getName()) > 3 || lc > 100) {
+ c = Sp12345.get(r.nextInt(Sp12345.size()));
+ lc++;
+ }
+ if (lc > 100)
+ throw new RuntimeException("Generate5ColorDeck : get5ColorDeck -- looped too much -- Sp123");
+
+ tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
+ int n = CardCounts.get(c.getName());
+ CardCounts.put(c.getName(), n + 1);
+ tmpDeck += c.getName() + " " + c.getManaCost() + "\n";
+ }
+
+ // Add lands
+ int numLands = 0;
+ if (LandsPercentage > 0) {
+ p = (float) ((float) LandsPercentage * .01);
+ numLands = (int) (p * (float) Size);
+ } else // otherwise, just fill in the rest of the deck with basic lands
+ numLands = Size - tDeck.size();
+
+ tmpDeck += "numLands:" + numLands + "\n";
+
+ int nDLands = (numLands / 4);
+ for (int i = 0; i < nDLands; i++) {
+ String s = DL.get(r.nextInt(DL.size()));
+
+ lc = 0;
+ while (CardCounts.get(s) > 3 || lc > 20) {
+ s = DL.get(r.nextInt(DL.size()));
+ lc++;
+ }
+ if (lc > 20)
+ throw new RuntimeException("Generate5ColorDeck : get5ColorDeck -- looped too much -- DL");
+
+ tDeck.add(AllZone.getCardFactory().getCard(s, AllZone.getHumanPlayer()));
+ int n = CardCounts.get(s);
+ CardCounts.put(s, n + 1);
+ tmpDeck += s + "\n";
+ }
+
+ numLands -= nDLands;
+
+ if (numLands > 0) // attempt to optimize basic land counts according to color representation
+ {
+ CCnt ClrCnts[] = {new CCnt("Plains", 0),
+ new CCnt("Island", 0),
+ new CCnt("Swamp", 0),
+ new CCnt("Mountain", 0),
+ new CCnt("Forest", 0)};
+
+ // count each card color using mana costs
+ // TODO: count hybrid mana differently?
+ for (int i = 0; i < tDeck.size(); i++) {
+ String mc = tDeck.get(i).getManaCost();
+
+ // count each mana symbol in the mana cost
+ for (int j = 0; j < mc.length(); j++) {
+ char c = mc.charAt(j);
+
+ if (c == 'W')
+ ClrCnts[0].Count++;
+ else if (c == 'U')
+ ClrCnts[1].Count++;
+ else if (c == 'B')
+ ClrCnts[2].Count++;
+ else if (c == 'R')
+ ClrCnts[3].Count++;
+ else if (c == 'G')
+ ClrCnts[4].Count++;
+ }
+ }
+
+ // total of all ClrCnts
+ int totalColor = 0;
+ for (int i = 0; i < 5; i++) {
+ totalColor += ClrCnts[i].Count;
+ tmpDeck += ClrCnts[i].Color + ":" + ClrCnts[i].Count + "\n";
+ }
+
+ tmpDeck += "totalColor:" + totalColor + "\n";
+
+ for (int i = 0; i < 5; i++) {
+ if (ClrCnts[i].Count > 0) { // calculate number of lands for each color
+ p = (float) ClrCnts[i].Count / (float) totalColor;
+ int nLand = (int) ((float) numLands * p);
+ tmpDeck += "nLand-" + ClrCnts[i].Color + ":" + nLand + "\n";
+
+ // just to prevent a null exception by the deck size fixing code
+ CardCounts.put(ClrCnts[i].Color, nLand);
+
+ for (int j = 0; j <= nLand; j++)
+ tDeck.add(AllZone.getCardFactory().getCard(ClrCnts[i].Color, AllZone.getComputerPlayer()));
+ }
+ }
+ }
+ tmpDeck += "DeckSize:" + tDeck.size() + "\n";
+
+ // fix under-sized or over-sized decks, due to integer arithmetic
+ if (tDeck.size() < Size) {
+ int diff = Size - tDeck.size();
+
+ for (int i = 0; i < diff; i++) {
+ Card c = tDeck.get(r.nextInt(tDeck.size()));
+
+ lc = 0;
+ while (CardCounts.get(c.getName()) > 3 || lc > Size) {
+ c = tDeck.get(r.nextInt(tDeck.size()));
+ lc++;
+ }
+ if (lc > Size)
+ throw new RuntimeException("Generate5ColorDeck : get5ColorDeck -- looped too much -- undersize");
+
+ int n = CardCounts.get(c.getName());
+ tDeck.add(AllZone.getCardFactory().getCard(c.getName(), AllZone.getComputerPlayer()));
+ CardCounts.put(c.getName(), n + 1);
+ tmpDeck += "Added:" + c.getName() + "\n";
+ }
+ } else if (tDeck.size() > Size) {
+ int diff = tDeck.size() - Size;
+
+ for (int i = 0; i < diff; i++) {
+ Card c = tDeck.get(r.nextInt(tDeck.size()));
+
+ while (c.isBasicLand()) // don't remove basic lands
+ c = tDeck.get(r.nextInt(tDeck.size()));
+
+ tDeck.remove(c);
+ tmpDeck += "Removed:" + c.getName() + "\n";
+ }
+ }
+
+ tmpDeck += "DeckSize:" + tDeck.size() + "\n";
+ if (ForgeProps.getProperty("showdeck/5color", "false").equals("true"))
+ ErrorViewer.showError(tmpDeck);
+
+ return tDeck;
+ }
+
+ private class CCnt {
+ public String Color;
+ public int Count;
+
+ public CCnt(String clr, int cnt) {
+ Color = clr;
+ Count = cnt;
+ }
+ }
+
+ private class DLnd {
+ public String Name;
+ public String Mana;
+
+ public DLnd(String nm, String mn) {
+ Name = nm;
+ Mana = mn;
+ }
+ }
+}
diff --git a/src/main/java/forge/view/swing/OldGuiNewGame.java b/src/main/java/forge/view/swing/OldGuiNewGame.java
index d414d74b6c8..88617b3c7d6 100644
--- a/src/main/java/forge/view/swing/OldGuiNewGame.java
+++ b/src/main/java/forge/view/swing/OldGuiNewGame.java
@@ -1,78 +1,11 @@
package forge.view.swing;
-import static net.slightlymagic.braids.util.UtilFunctions.safeToString;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Random;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.ImageIcon;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.SwingConstants;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.UIManager.LookAndFeelInfo;
-import javax.swing.border.TitledBorder;
-
-import net.miginfocom.swing.MigLayout;
import arcane.ui.util.ManaSymbols;
-
import com.esotericsoftware.minlog.Log;
-
-import forge.AllZone;
-import forge.BoosterDraft_1;
-import forge.CardList;
-import forge.Command;
-import forge.Constant;
-import forge.Constant_StringArrayList;
-import forge.FileUtil;
-import forge.GUI_ImportPicture;
-import forge.GuiDisplay4;
-import forge.Gui_BoosterDraft;
-import forge.Gui_DeckEditor;
-import forge.Gui_DownloadPictures_LQ;
-import forge.Gui_DownloadPrices;
-import forge.Gui_DownloadSetPictures_LQ;
-import forge.Gui_QuestOptions;
-import forge.ImageCache;
-import forge.MyRandom;
-import forge.PlayerType;
-import forge.SealedDeck;
-import forge.Singletons;
+import forge.*;
import forge.deck.Deck;
import forge.deck.DeckManager;
-import forge.deck.generate.Generate2ColorDeck;
-import forge.deck.generate.Generate3ColorDeck;
-import forge.deck.generate.GenerateConstructedDeck;
-import forge.deck.generate.GenerateConstructedMultiColorDeck;
-import forge.deck.generate.GenerateThemeDeck;
+import forge.deck.generate.*;
import forge.error.BugzReporter;
import forge.error.ErrorViewer;
import forge.gui.GuiUtils;
@@ -84,6 +17,21 @@ import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.properties.NewConstants.LANG.OldGuiNewGame.MENU_BAR.MENU;
import forge.properties.NewConstants.LANG.OldGuiNewGame.MENU_BAR.OPTIONS;
+import net.miginfocom.swing.MigLayout;
+
+import javax.swing.*;
+import javax.swing.UIManager.LookAndFeelInfo;
+import javax.swing.border.TitledBorder;
+import java.awt.Color;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.*;
+import java.util.List;
+
+import static net.slightlymagic.braids.util.UtilFunctions.safeToString;
/*CHOPPIC*/
@@ -847,8 +795,8 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants.
* genDecks.
*
*
- * @param p
- * a {@link java.lang.String} object.
+ * @param playerType
+ * {@link java.lang.String} object.
*/
private void genDecks(final PlayerType playerType) {
// TODO: jendave to refactor deck generation
@@ -861,6 +809,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants.
decks.add("Semi-Random Theme Deck");
decks.add("2-Color Deck (new)");
decks.add("3-Color Deck (new)");
+ decks.add("5-Color Deck (new)");
String prompt = "Generate ";
if (playerType.equals(PlayerType.HUMAN)) {
@@ -884,6 +833,8 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants.
d = generate2ColorDeck(playerType);
} else if (o.toString().equals(decks.get(5))) {
d = generate3ColorDeck(playerType);
+ } else if (o.toString().equals(decks.get(6))) {
+ d = generate5ColorDeck(playerType);
}
if (playerType.equals(PlayerType.HUMAN)) {
@@ -1097,6 +1048,40 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants.
return deck;
+ }
+
+ /**
+ *
+ * generate3ColorDeck.
+ *
+ *
+ * @param p
+ * a {@link java.lang.String} object.
+ * @return a {@link forge.deck.Deck} object.
+ */
+ private Deck generate5ColorDeck(final PlayerType p) {
+ Random r = MyRandom.random;
+
+ ArrayList colors = new ArrayList();
+ 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");
+ CardList d = gen.get5ColorDeck(60);
+
+ Deck deck = new Deck(Constant.GameType.Constructed);
+
+ for (int i = 0; i < d.size(); i++) {
+ deck.addMain(d.get(i).getName());
+ }
+
+ return deck;
+
}
/**
diff --git a/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java b/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java
new file mode 100644
index 00000000000..9d781683ddb
--- /dev/null
+++ b/src/test/java/forge/deck/generate/Generate2ColorDeckTest.java
@@ -0,0 +1,24 @@
+package forge.deck.generate;
+
+import forge.CardList;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dhudson
+ */
+@Test(groups = {"UnitTest"}, enabled = false)
+public class Generate2ColorDeckTest {
+
+
+ /**
+ *
+ */
+ @Test(enabled = false)
+ public void Generate2ColorDeckTest1() {
+ Generate2ColorDeck gen = new Generate2ColorDeck("white", "blue");
+ CardList cardList = gen.get2ColorDeck(60);
+ Assert.assertNotNull(cardList);
+ }
+}
diff --git a/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java b/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java
new file mode 100644
index 00000000000..10787a955ae
--- /dev/null
+++ b/src/test/java/forge/deck/generate/Generate3ColorDeckTest.java
@@ -0,0 +1,25 @@
+package forge.deck.generate;
+
+import forge.CardList;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dhudson
+ */
+@Test(groups = {"UnitTest"}, timeOut = 1000, enabled = false)
+public class Generate3ColorDeckTest {
+
+
+ /**
+ *
+ */
+ @Test(timeOut = 1000, enabled = false)
+ public void Generate3ColorDeckTest1() {
+ Generate3ColorDeck gen = new Generate3ColorDeck("white", "blue", "black");
+ CardList cardList = gen.get3ColorDeck(60);
+ Assert.assertNotNull(cardList);
+ }
+}
diff --git a/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java b/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java
new file mode 100644
index 00000000000..5408a8e8660
--- /dev/null
+++ b/src/test/java/forge/deck/generate/Generate5ColorDeckTest.java
@@ -0,0 +1,25 @@
+package forge.deck.generate;
+
+import forge.CardList;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: dhudson
+ */
+@Test(groups = {"UnitTest"}, timeOut = 1000, enabled = false)
+public class Generate5ColorDeckTest {
+
+
+ /**
+ *
+ */
+ @Test(timeOut = 1000, enabled = false)
+ public void Generate5ColorDeckTest1() {
+ Generate5ColorDeck gen = new Generate5ColorDeck();
+ CardList cardList = gen.get5ColorDeck(60);
+ Assert.assertNotNull(cardList);
+ }
+}