Monocolored decks generation

This commit is contained in:
Maxmtg
2013-03-07 21:08:11 +00:00
parent 0496dca705
commit ec98a428d3
11 changed files with 132 additions and 35 deletions

1
.gitattributes vendored
View File

@@ -14125,6 +14125,7 @@ src/main/java/forge/deck/generate/Generate3ColorDeck.java svneol=native#text/pla
src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain src/main/java/forge/deck/generate/Generate5ColorDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/GenerateColoredDeckBase.java -text src/main/java/forge/deck/generate/GenerateColoredDeckBase.java -text
src/main/java/forge/deck/generate/GenerateDeckUtil.java -text src/main/java/forge/deck/generate/GenerateDeckUtil.java -text
src/main/java/forge/deck/generate/GenerateMonoColorDeck.java -text
src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plain
src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain
src/main/java/forge/deck/io/DeckFileHeader.java -text src/main/java/forge/deck/io/DeckFileHeader.java -text

View File

@@ -18,6 +18,8 @@ import forge.Singletons;
import forge.deck.generate.Generate2ColorDeck; import forge.deck.generate.Generate2ColorDeck;
import forge.deck.generate.Generate3ColorDeck; import forge.deck.generate.Generate3ColorDeck;
import forge.deck.generate.Generate5ColorDeck; import forge.deck.generate.Generate5ColorDeck;
import forge.deck.generate.GenerateColoredDeckBase;
import forge.deck.generate.GenerateMonoColorDeck;
import forge.deck.generate.GenerateThemeDeck; import forge.deck.generate.GenerateThemeDeck;
import forge.game.player.PlayerType; import forge.game.player.PlayerType;
import forge.item.CardDb; import forge.item.CardDb;
@@ -66,7 +68,7 @@ public class DeckgenUtil {
* @return {@link forge.deck.Deck} * @return {@link forge.deck.Deck}
*/ */
public static Deck buildColorDeck(final String[] selection, PlayerType pt) { public static Deck buildColorDeck(final String[] selection, PlayerType pt) {
ItemPoolView<CardPrinted> cards = null;
final Deck deck; final Deck deck;
// Replace "random" with "AI" for deck generation code // Replace "random" with "AI" for deck generation code
@@ -74,22 +76,20 @@ public class DeckgenUtil {
selection[i] = COLOR_VALS.get(selection[i]); selection[i] = COLOR_VALS.get(selection[i]);
} }
// 2, 3, and 5 colors. GenerateColoredDeckBase gen = null;
if (selection.length == 2) {
final Generate2ColorDeck gen = new Generate2ColorDeck( if (selection.length == 1) {
selection[0], selection[1]); gen = new GenerateMonoColorDeck(selection[0]);
cards = gen.get2ColorDeck(60, pt); } else if (selection.length == 2) {
} gen = new Generate2ColorDeck(selection[0], selection[1]);
else if (selection.length == 3) { } else if (selection.length == 3) {
final Generate3ColorDeck gen = new Generate3ColorDeck( gen = new Generate3ColorDeck(selection[0], selection[1], selection[2]);
selection[0], selection[1], selection[2]); } else {
cards = gen.get3ColorDeck(60, pt); gen = new Generate5ColorDeck();
}
else {
final Generate5ColorDeck gen = new Generate5ColorDeck();
cards = gen.get5ColorDeck(60, pt);
} }
ItemPoolView<CardPrinted> cards = gen == null ? null : gen.getDeck(60, pt);
// After generating card lists, build deck. // After generating card lists, build deck.
deck = new Deck(); deck = new Deck();
deck.getMain().addAll(cards); deck.getMain().addAll(cards);
@@ -131,8 +131,8 @@ public class DeckgenUtil {
/** @return {@link forge.deck.Deck} */ /** @return {@link forge.deck.Deck} */
public static Deck getRandomColorDeck(PlayerType pt) { public static Deck getRandomColorDeck(PlayerType pt) {
final int[] colorCount = new int[] {2, 3, 5}; final int[] colorCount = new int[] {1, 2, 3, 5};
final int count = colorCount[(int) (Math.round(Math.random() * 2))]; final int count = colorCount[MyRandom.getRandom().nextInt(colorCount.length)];
final String[] selection = new String[count]; final String[] selection = new String[count];
// A simulated selection of "random 1" will trigger the AI selection process. // A simulated selection of "random 1" will trigger the AI selection process.
@@ -287,14 +287,7 @@ public class DeckgenUtil {
public static boolean colorCheck(final String[] colors0) { public static boolean colorCheck(final String[] colors0) {
boolean result = true; boolean result = true;
if (colors0.length == 1) { if (colors0.length == 4) {
JOptionPane.showMessageDialog(null,
"Sorry, single color generated decks aren't supported yet."
+ "\n\rPlease choose at least one more color for this deck.",
"Generate deck: 1 color", JOptionPane.ERROR_MESSAGE);
result = false;
}
else if (colors0.length == 4) {
JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null,
"Sorry, four color generated decks aren't supported yet." "Sorry, four color generated decks aren't supported yet."
+ "\n\rPlease use 2, 3, or 5 colors for this deck.", + "\n\rPlease use 2, 3, or 5 colors for this deck.",

View File

@@ -78,7 +78,7 @@ public class Generate2ColorDeck extends GenerateColoredDeckBase {
} }
public final ItemPoolView<CardPrinted> get2ColorDeck(final int size, final PlayerType pt) { public final ItemPoolView<CardPrinted> getDeck(final int size, final PlayerType pt) {
addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt); addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt);
// Add lands // Add lands

View File

@@ -77,7 +77,7 @@ public class Generate3ColorDeck extends GenerateColoredDeckBase {
* the pt * the pt
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
public final ItemPoolView<CardPrinted> get3ColorDeck(final int size, final PlayerType pt) { public final ItemPoolView<CardPrinted> getDeck(final int size, final PlayerType pt) {
addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt); addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt);
// Add lands // Add lands

View File

@@ -66,7 +66,7 @@ public class Generate5ColorDeck extends GenerateColoredDeckBase {
* a PlayerType * a PlayerType
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
public final ItemPoolView<CardPrinted> get5ColorDeck(final int size, final PlayerType pt) { public final ItemPoolView<CardPrinted> getDeck(final int size, final PlayerType pt) {
addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt); addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt);
// Add lands // Add lands

View File

@@ -39,6 +39,7 @@ import forge.game.player.PlayerType;
import forge.item.CardDb; import forge.item.CardDb;
import forge.item.CardPrinted; import forge.item.CardPrinted;
import forge.item.ItemPool; import forge.item.ItemPool;
import forge.item.ItemPoolView;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.MyRandom; import forge.util.MyRandom;
@@ -100,6 +101,9 @@ public abstract class GenerateColoredDeckBase {
addCmcAdjusted(spells, spellCnt, cmcLevels, cmcAmounts); addCmcAdjusted(spells, spellCnt, cmcLevels, cmcAmounts);
} }
public ItemPoolView<CardPrinted> getDeck(final int size, final PlayerType pt) {
return null; // all but theme deck do override this method
}
protected void addSome(int cnt, List<CardPrinted> source) { protected void addSome(int cnt, List<CardPrinted> source) {
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {

View File

@@ -0,0 +1,99 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.deck.generate;
import java.util.Arrays;
import java.util.List;
import forge.card.MagicColor;
import forge.card.ColorSet;
import forge.deck.generate.GenerateDeckUtil.FilterCMC;
import forge.error.BugReporter;
import forge.game.player.PlayerType;
import forge.item.CardPrinted;
import forge.item.ItemPoolView;
import forge.properties.ForgeProps;
/**
* <p>
* Generate2ColorDeck class.
* </p>
*
* @author Forge
* @version $Id: Generate2ColorDeck.java 19765 2013-02-20 03:01:37Z myk $
*/
public class GenerateMonoColorDeck extends GenerateColoredDeckBase {
@Override protected final float getLandsPercentage() { return 0.39f; }
@Override protected final float getCreatPercentage() { return 0.36f; }
@Override protected final float getSpellPercentage() { return 0.25f; }
final List<FilterCMC> cmcLevels = Arrays.asList(
new GenerateDeckUtil.FilterCMC(0, 2),
new GenerateDeckUtil.FilterCMC(3, 4),
new GenerateDeckUtil.FilterCMC(5, 6),
new GenerateDeckUtil.FilterCMC(7, 20));
final int[] cmcAmounts = {10, 8, 5, 3};
// mana curve of the card pool
// 20x 0 - 2
// 16x 3 - 4
// 12x 5 - 6
// 4x 7 - 20
// = 52x - card pool (before further random filtering)
/**
* <p>
* Constructor for Generate2ColorDeck.
* </p>
*
* @param clr1
* a {@link java.lang.String} object.
* @param clr2
* a {@link java.lang.String} object.
*/
public GenerateMonoColorDeck(final String clr1) {
if (clr1.equals("AI")) {
int color1 = r.nextInt(5);
colors = ColorSet.fromMask(MagicColor.WHITE << color1);
} else {
colors = ColorSet.fromNames(clr1);
}
}
public final ItemPoolView<CardPrinted> getDeck(final int size, final PlayerType pt) {
addCreaturesAndSpells(size, cmcLevels, cmcAmounts, pt);
// Add lands
int numLands = (int) (getLandsPercentage() * size);
tmpDeck.append("numLands:").append(numLands).append("\n");
addBasicLand(numLands);
tmpDeck.append("DeckSize:").append(tDeck.countAll()).append("\n");
adjustDeckSize(size);
tmpDeck.append("DeckSize:").append(tDeck.countAll()).append("\n");
if (ForgeProps.getProperty("showdeck/1color", "false").equals("true")) {
BugReporter.reportBug(tmpDeck.toString());
}
return tDeck;
}
}

View File

@@ -106,15 +106,15 @@ public enum CDeckgen implements ICDoc {
switch (colorCount0) { switch (colorCount0) {
case 2: case 2:
genConstructed.getMain().addAll( genConstructed.getMain().addAll(
(new Generate2ColorDeck("AI", "AI")).get2ColorDeck(60, PlayerType.HUMAN)); (new Generate2ColorDeck("AI", "AI")).getDeck(60, PlayerType.HUMAN));
break; break;
case 3: case 3:
genConstructed.getMain().addAll( genConstructed.getMain().addAll(
(new Generate3ColorDeck("AI", "AI", "AI")).get3ColorDeck(60, PlayerType.HUMAN)); (new Generate3ColorDeck("AI", "AI", "AI")).getDeck(60, PlayerType.HUMAN));
break; break;
case 5: case 5:
genConstructed.getMain().addAll( genConstructed.getMain().addAll(
(new Generate5ColorDeck()).get5ColorDeck(60, PlayerType.HUMAN)); (new Generate5ColorDeck()).getDeck(60, PlayerType.HUMAN));
break; break;
default: default:
} }

View File

@@ -18,7 +18,7 @@ public class Generate2ColorDeckTest {
@Test(enabled = false) @Test(enabled = false)
public void generate2ColorDeckTest1() { public void generate2ColorDeckTest1() {
final Generate2ColorDeck gen = new Generate2ColorDeck("white", "blue"); final Generate2ColorDeck gen = new Generate2ColorDeck("white", "blue");
final ItemPoolView<CardPrinted> cardList = gen.get2ColorDeck(60, null); final ItemPoolView<CardPrinted> cardList = gen.getDeck(60, null);
Assert.assertNotNull(cardList); Assert.assertNotNull(cardList);
} }
} }

View File

@@ -18,7 +18,7 @@ public class Generate3ColorDeckTest {
@Test(timeOut = 1000, enabled = false) @Test(timeOut = 1000, enabled = false)
public void generate3ColorDeckTest1() { public void generate3ColorDeckTest1() {
final Generate3ColorDeck gen = new Generate3ColorDeck("white", "blue", "black"); final Generate3ColorDeck gen = new Generate3ColorDeck("white", "blue", "black");
final ItemPoolView<CardPrinted> cardList = gen.get3ColorDeck(60, null); final ItemPoolView<CardPrinted> cardList = gen.getDeck(60, null);
Assert.assertNotNull(cardList); Assert.assertNotNull(cardList);
} }
} }

View File

@@ -18,7 +18,7 @@ public class Generate5ColorDeckTest {
@Test(timeOut = 1000, enabled = false) @Test(timeOut = 1000, enabled = false)
public void generate5ColorDeckTest1() { public void generate5ColorDeckTest1() {
final Generate5ColorDeck gen = new Generate5ColorDeck(); final Generate5ColorDeck gen = new Generate5ColorDeck();
final ItemPoolView<CardPrinted> cardList = gen.get5ColorDeck(60, null); final ItemPoolView<CardPrinted> cardList = gen.getDeck(60, null);
Assert.assertNotNull(cardList); Assert.assertNotNull(cardList);
} }
} }