From 770e5673f5bd024800ca1034337c78dbeb9b44df Mon Sep 17 00:00:00 2001 From: magenoxx Date: Wed, 1 Dec 2010 21:55:37 +0000 Subject: [PATCH] Now random decks contain non basic lands. --- .../java/mage/client/cards/CardsStorage.java | 14 ++++- .../client/deck/generator/DeckGenerator.java | 52 +++++++++++++++---- Mage.Common/src/mage/utils/CardUtil.java | 4 ++ Mage/src/mage/Mana.java | 21 ++++++++ 4 files changed, 81 insertions(+), 10 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java b/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java index 2562da57c6d..e804cba9671 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsStorage.java @@ -6,17 +6,29 @@ import java.util.Set; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.sets.Sets; +import mage.utils.CardUtil; public class CardsStorage { private static Set allCards = new LinkedHashSet(); + private static Set landCards = new LinkedHashSet(); static { for (ExpansionSet set: Sets.getInstance().values()) { - allCards.addAll(set.createCards()); + Set cards = set.createCards(); + allCards.addAll(cards); + for (Card card : cards) { + if (CardUtil.isLand(card)) { + landCards.add(card); + } + } } } public static Set getAllCards() { return allCards; } + + public static Set getLandCards() { + return landCards; + } } diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java index 8f4ebfb4ef0..dedcc1ff720 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java @@ -1,6 +1,5 @@ package mage.client.deck.generator; -import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -21,10 +20,12 @@ import javax.swing.JPanel; import mage.Constants.CardType; import mage.Constants.ColoredManaSymbol; +import mage.Mana; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.ExpansionSet; import mage.cards.decks.Deck; +import mage.client.cards.CardsStorage; import mage.client.util.gui.ColorsChooser; import mage.sets.Sets; import mage.utils.CardUtil; @@ -118,11 +119,17 @@ public class DeckGenerator { } else { if (!CardUtil.isBasicLand(card)) { if (nonBasicLandCount < MAX_NON_BASIC_SOURCE) { - nonBasicLandCount++; - landCardPool.add(card); + int score = 0; + for (Mana mana : card.getMana()) { + for (ColoredManaSymbol color : allowedColors) { + score += mana.getColor(color); + } + } + if (score > 1) { + nonBasicLandCount++; + landCardPool.add(card); + } } - } else { - landCardPool.add(card); } } } @@ -130,6 +137,24 @@ public class DeckGenerator { //ignore } } + out: + while (nonBasicLandCount < MAX_NON_BASIC_SOURCE) { + for (Card card : CardsStorage.getLandCards()) { + int score = 0; + for (Mana mana : card.getMana()) { + for (ColoredManaSymbol color : allowedColors) { + score += mana.getColor(color); + } + } + if (score > 1) { + nonBasicLandCount++; + landCardPool.add(card); + } + if (nonBasicLandCount > MAX_NON_BASIC_SOURCE) { + break out; + } + } + } System.out.println("deck generator card pool: spells=" + spellCardPool.size() + ", lands=" + landCardPool.size()); final Collection remainingCards = new ArrayList(); @@ -200,15 +225,24 @@ public class DeckGenerator { } } - - // Add suitable non basic lands to deck in order of pack. final Map colorSource = new HashMap(); for (final ColoredManaSymbol color : ColoredManaSymbol.values()) { colorSource.put(color.toString(), 0); } - for (final Card card : landCardPool) { - //TODO: add non basic lands: need to get know what mana a land can produce + for (final Card landCard : landCardPool) { + deck.getCards().add(landCard); + for (Mana mana : landCard.getMana()) { + for (ColoredManaSymbol color : allowedColors) { + int amount = mana.getColor(color); + if (amount > 0) { + Integer count = colorSource.get(color.toString()); + count += amount; + colorSource.put(color.toString(), count); + } + } + } + } // Add optimal basic lands to deck. diff --git a/Mage.Common/src/mage/utils/CardUtil.java b/Mage.Common/src/mage/utils/CardUtil.java index b864a9bcae1..797c01a2ab7 100644 --- a/Mage.Common/src/mage/utils/CardUtil.java +++ b/Mage.Common/src/mage/utils/CardUtil.java @@ -44,4 +44,8 @@ public class CardUtil { public static boolean isBasicLand(Card card) { return card.getSupertype().contains("Basic"); } + + public static boolean isLand(Card card) { + return card.getCardType().contains(CardType.LAND); + } } diff --git a/Mage/src/mage/Mana.java b/Mage/src/mage/Mana.java index 9d76e625577..2ba46f9fa6a 100644 --- a/Mage/src/mage/Mana.java +++ b/Mage/src/mage/Mana.java @@ -29,6 +29,8 @@ package mage; import java.io.Serializable; + +import mage.Constants.ColoredManaSymbol; import mage.util.Copyable; /** @@ -361,5 +363,24 @@ public class Mana implements Comparable, Serializable, Copyable { return false; } + + public int getColor(ColoredManaSymbol color) { + if (color.equals(ColoredManaSymbol.G)) { + return getGreen(); + } + if (color.equals(ColoredManaSymbol.R)) { + return getRed(); + } + if (color.equals(ColoredManaSymbol.B)) { + return getBlack(); + } + if (color.equals(ColoredManaSymbol.U)) { + return getBlue(); + } + if (color.equals(ColoredManaSymbol.W)) { + return getWhite(); + } + return 0; + } }