1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-12 09:11:05 -09:00

[CardRepository] Replaced findCard methods from Sets and ExpansionSet

This commit is contained in:
North 2012-10-22 23:48:52 +03:00
parent 042e4baa1f
commit 08815ffb88
12 changed files with 165 additions and 129 deletions
Mage.Client/src/main/java/mage/client
Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai
Mage.Server/src/main/java/mage/server
Mage.Tests/src/test/java/org/mage/test

View file

@ -43,7 +43,6 @@ public class DeckGenerator {
private static final int DECK_LANDS = 16;
private static final int MAX_NON_BASIC_SOURCE = DECK_LANDS / 2;
private static final boolean GENERATE_RANDOM_BASIC_LAND = true;
private static final int MAX_TRIES = 4096;
private static Deck deck = new Deck();
@ -341,19 +340,24 @@ public class DeckGenerator {
*/
private static Card getBestBasicLand(ColoredManaSymbol color) {
if (color.equals(ColoredManaSymbol.G)) {
return Sets.findCard("Forest", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Forest");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.R)) {
return Sets.findCard("Mountain", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Mountain");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.B)) {
return Sets.findCard("Swamp", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Swamp");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.U)) {
return Sets.findCard("Island", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Island");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.W)) {
return Sets.findCard("Plains", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Plains");
return cardInfo != null ? cardInfo.getCard() : null;
}
return null;

View file

@ -34,10 +34,14 @@
package mage.client.dialog;
import java.util.List;
import java.util.Random;
import javax.swing.JLayeredPane;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.sets.Sets;
/**
*
@ -59,6 +63,19 @@ public class AddLandDialog extends MageDialog {
this.setVisible(true);
}
private void addLands(String landName, int number) {
Random random = new Random();
List<CardInfo> cards = CardRepository.instance.findCards(landName);
if (cards.isEmpty()) {
return;
}
for (int i = 0; i < number; i++) {
Card land = cards.get(random.nextInt(cards.size())).getCard();
deck.getCards().add(land);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
@ -194,25 +211,16 @@ public class AddLandDialog extends MageDialog {
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed
int nForest = ((Number)spnForest.getValue()).intValue();
for (int i = 0; i < nForest; i++) {
deck.getCards().add(Sets.findCard("Forest", true));
}
int nIsland = ((Number)spnIsland.getValue()).intValue();
for (int i = 0; i < nIsland; i++) {
deck.getCards().add(Sets.findCard("Island", true));
}
int nMountain = ((Number)spnMountain.getValue()).intValue();
for (int i = 0; i < nMountain; i++) {
deck.getCards().add(Sets.findCard("Mountain", true));
}
int nPlains = ((Number)spnPlains.getValue()).intValue();
for (int i = 0; i < nPlains; i++) {
deck.getCards().add(Sets.findCard("Plains", true));
}
int nSwamp = ((Number)spnSwamp.getValue()).intValue();
for (int i = 0; i < nSwamp; i++) {
deck.getCards().add(Sets.findCard("Swamp", true));
}
addLands("Forest", nForest);
addLands("Island", nIsland);
addLands("Mountain", nMountain);
addLands("Plains", nPlains);
addLands("Swamp", nSwamp);
this.hideDialog();
}//GEN-LAST:event_btnAddActionPerformed

View file

@ -37,6 +37,7 @@ package mage.client.game;
import mage.cards.MageCard;
import mage.cards.action.ActionCallback;
import mage.cards.decks.importer.DckDeckImporter;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.client.cards.BigCard;
import mage.client.components.HoverButton;
@ -50,7 +51,6 @@ import mage.client.util.ImageHelper;
import mage.client.util.gui.BufferedImageBuilder;
import mage.components.ImagePanel;
import mage.remote.Session;
import mage.sets.Sets;
import mage.view.CardView;
import mage.view.ManaPoolView;
import mage.view.PlayerView;
@ -202,7 +202,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
// Avatar
Image image = ImageHelper.getImageFromResources("/avatars/unknown.jpg");
topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true);
topCardPanel = Plugins.getInstance().getMageCard(new CardView(CardRepository.instance.findCard("Forest").getCard()), bigCard, topCardDimension, gameId, true);
topCardPanel.setVisible(false);
panelBackground.add(topCardPanel);

View file

@ -29,9 +29,9 @@
package mage.client.util;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.sets.Sets;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.view.DeckView;
import mage.view.SimpleCardView;
import org.apache.log4j.Logger;
@ -51,25 +51,21 @@ public class DeckUtil {
public static Deck construct(DeckView view) {
Deck deck = new Deck();
for (SimpleCardView cardView : view.getCards().values()) {
ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode());
if (set != null) {
Card card = set.findCard(cardView.getCardNumber());
if (card != null) {
deck.getCards().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getCards().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
}
for (SimpleCardView cardView : view.getSideboard().values()) {
ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode());
if (set != null) {
Card card = set.findCard(cardView.getCardNumber());
if (card != null) {
deck.getSideboard().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getSideboard().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
}
return deck;

View file

@ -51,6 +51,8 @@ import mage.abilities.mana.ManaOptions;
import mage.cards.Card;
import mage.cards.Cards;
import mage.cards.decks.Deck;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.choices.Choice;
import mage.filter.FilterPermanent;
import mage.filter.common.*;
@ -72,7 +74,6 @@ import mage.players.Player;
import mage.players.PlayerImpl;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.sets.Sets;
import mage.target.*;
import mage.target.common.*;
import mage.util.Copier;
@ -1096,6 +1097,19 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
match.submitDeck(playerId, deck);
}
private static void addBasicLands(Deck deck, String landName, int number) {
Random random = new Random();
List<CardInfo> cards = CardRepository.instance.findCards(landName);
if (cards.isEmpty()) {
return;
}
for (int i = 0; i < number; i++) {
Card land = cards.get(random.nextInt(cards.size())).getCard();
deck.getCards().add(land);
}
}
public static Deck buildDeck(List<Card> cardPool, final List<Constants.ColoredManaSymbol> colors) {
Deck deck = new Deck();
List<Card> sortedCards = new ArrayList<Card>(cardPool);
@ -1124,46 +1138,29 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
}
double total = mana.getBlack() + mana.getBlue() + mana.getGreen() + mana.getRed() + mana.getWhite();
if (mana.getGreen() > 0) {
int numGreen = (int) Math.round(mana.getGreen() / total * 17);
for (int i = 0; i < numGreen; i++) {
Card land = Sets.findCard("Forest", true);
deck.getCards().add(land);
}
int number = (int) Math.round(mana.getGreen() / total * 17);
addBasicLands(deck, "Forest", number);
}
if (mana.getBlack() > 0) {
int numBlack = (int) Math.round(mana.getBlack() / total * 17);
for (int i = 0; i < numBlack; i++) {
Card land = Sets.findCard("Swamp", true);
deck.getCards().add(land);
}
int number = (int) Math.round(mana.getBlack() / total * 17);
addBasicLands(deck, "Swamp", number);
}
if (mana.getBlue() > 0) {
int numBlue = (int) Math.round(mana.getBlue() / total * 17);
for (int i = 0; i < numBlue; i++) {
Card land = Sets.findCard("Island", true);
deck.getCards().add(land);
}
int number = (int) Math.round(mana.getBlue() / total * 17);
addBasicLands(deck, "Island", number);
}
if (mana.getWhite() > 0) {
int numWhite = (int) Math.round(mana.getWhite() / total * 17);
for (int i = 0; i < numWhite; i++) {
Card land = Sets.findCard("Plains", true);
deck.getCards().add(land);
}
int number = (int) Math.round(mana.getWhite() / total * 17);
addBasicLands(deck, "Plains", number);
}
if (mana.getRed() > 0) {
int numRed = (int) Math.round(mana.getRed() / total * 17);
for (int i = 0; i < numRed; i++) {
Card land = Sets.findCard("Mountain", true);
deck.getCards().add(land);
}
}
while (deck.getCards().size() < 40) {
//TODO: improve this
Card land = Sets.findCard("Forest", true);
deck.getCards().add(land);
int number = (int) Math.round(mana.getRed() / total * 17);
addBasicLands(deck, "Mountain", number);
}
//TODO: improve this
addBasicLands(deck, "Forest", 40 - deck.getCards().size());
return deck;
}

View file

@ -35,6 +35,8 @@ import mage.cards.Card;
import mage.cards.Cards;
import mage.cards.decks.Deck;
import mage.cards.decks.DeckCardLists;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.game.Game;
import mage.game.GameException;
import mage.game.events.Listener;
@ -46,7 +48,6 @@ import mage.server.*;
import mage.server.util.Splitter;
import mage.server.util.SystemUtil;
import mage.server.util.ThreadExecutor;
import mage.sets.Sets;
import mage.view.AbilityPickerView;
import mage.view.CardsView;
import mage.view.ChatMessage.MessageColor;
@ -273,7 +274,8 @@ public class GameController implements GameCallback {
}
public boolean cheat(UUID userId, UUID playerId, String cardName) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
Set<Card> cards = new HashSet<Card>();
cards.add(card);

View file

@ -2,12 +2,15 @@ package mage.server.util;
import mage.Constants;
import mage.cards.Card;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.game.Game;
import mage.players.Player;
import mage.sets.Sets;
import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Matcher;
@ -48,46 +51,59 @@ public class SystemUtil {
try {
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.trim().length() == 0 || line.startsWith("#")) continue;
if (line.trim().length() == 0 || line.startsWith("#")) {
continue;
}
Matcher m = pattern.matcher(line);
if (m.matches()) {
String zone = m.group(1);
String nickname = m.group(2);
Player player = findPlayer(game, nickname);
if (player != null) {
Constants.Zone gameZone;
if ("hand".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.HAND;
} else if ("battlefield".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.BATTLEFIELD;
} else if ("graveyard".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.GRAVEYARD;
} else if ("library".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.LIBRARY;
} else {
continue; // go parse next line
}
String cardName = m.group(3);
Integer amount = Integer.parseInt(m.group(4));
for (int i = 0; i < amount; i++) {
Card card = Sets.findCard(cardName, true);
if (card != null) {
Set<Card> cards = new HashSet<Card>();
cards.add(card);
game.loadCards(cards, player.getId());
swapWithAnyCard(game, player, card, gameZone);
} else {
logger.fatal("Couldn't find a card: " + cardName);
}
}
} else {
logger.warn("Was skipped: " + line);
}
} else {
if (!m.matches()) {
logger.warn("Init string wasn't parsed: " + line);
continue;
}
String zone = m.group(1);
String nickname = m.group(2);
Player player = findPlayer(game, nickname);
if (player == null) {
logger.warn("Was skipped: " + line);
continue;
}
Constants.Zone gameZone;
if ("hand".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.HAND;
} else if ("battlefield".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.BATTLEFIELD;
} else if ("graveyard".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.GRAVEYARD;
} else if ("library".equalsIgnoreCase(zone)) {
gameZone = Constants.Zone.LIBRARY;
} else {
continue; // go parse next line
}
String cardName = m.group(3);
Integer amount = Integer.parseInt(m.group(4));
List<CardInfo> cards = CardRepository.instance.findCards(cardName);
if (cards.isEmpty()) {
logger.warn("Couldn't find a card: " + cardName);
continue;
}
Random random = new Random();
Set<Card> cardsToLoad = new HashSet<Card>();
for (int i = 0; i < amount; i++) {
CardInfo cardInfo = cards.get(random.nextInt(cards.size()));
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
cardsToLoad.add(card);
}
}
game.loadCards(cardsToLoad, player.getId());
for (Card card : cardsToLoad) {
swapWithAnyCard(game, player, card, gameZone);
}
}
}
@ -126,8 +142,9 @@ public class SystemUtil {
*/
private static Player findPlayer(Game game, String name) {
for (Player player: game.getPlayers().values()) {
if (player.getName().equals(name))
if (player.getName().equals(name)) {
return player;
}
}
return null;
}

View file

@ -2,9 +2,10 @@ package org.mage.test.load;
import mage.Constants;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.cards.decks.DeckCardLists;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.game.match.MatchOptions;
import mage.player.ai.ComputerPlayer;
import mage.remote.Connection;
@ -247,9 +248,10 @@ public class LoadTest {
DeckCardLists deckList = new DeckCardLists();
Deck deck = generateRandomDeck();
for (Card card : deck.getCards()) {
ExpansionSet set = Sets.findSet(card.getExpansionSetCode());
String cardName = set.findCardName(card.getCardNumber());
deckList.getCards().add(cardName);
CardInfo cardInfo = CardRepository.instance.findCard(card.getExpansionSetCode(), card.getCardNumber());
if (cardInfo != null) {
deckList.getCards().add(cardInfo.getClassName());
}
}
return deckList;
}

View file

@ -3,6 +3,8 @@ package org.mage.test.serverside.base;
import mage.Constants;
import mage.Constants.PhaseStep;
import mage.cards.Card;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.game.Game;
import mage.game.match.MatchType;
import mage.game.permanent.PermanentCard;
@ -15,7 +17,6 @@ import mage.server.util.ConfigSettings;
import mage.server.util.PluginClassLoader;
import mage.server.util.config.GamePlugin;
import mage.server.util.config.Plugin;
import mage.sets.Sets;
import mage.util.Copier;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@ -253,7 +254,8 @@ public abstract class MageTestBase {
}
} else {
for (int i = 0; i < amount; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
if (gameZone.equals(Constants.Zone.BATTLEFIELD)) {
PermanentCard p = new PermanentCard(card, null);

View file

@ -3,6 +3,8 @@ package org.mage.test.serverside.base;
import mage.Constants;
import mage.Constants.PhaseStep;
import mage.cards.Card;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.game.Game;
import mage.game.match.MatchType;
import mage.game.permanent.PermanentCard;
@ -13,7 +15,6 @@ import mage.server.util.ConfigSettings;
import mage.server.util.PluginClassLoader;
import mage.server.util.config.GamePlugin;
import mage.server.util.config.Plugin;
import mage.sets.Sets;
import mage.util.Copier;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
@ -230,7 +231,8 @@ public abstract class MageTestPlayerBase {
getCommands(getPlayer(nickname)).put(gameZone, "clear");
} else {
for (int i = 0; i < amount; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
if (gameZone.equals(Constants.Zone.BATTLEFIELD)) {
PermanentCard p = new PermanentCard(card, null);

View file

@ -4,11 +4,12 @@ import mage.Constants;
import mage.Constants.PhaseStep;
import mage.abilities.Ability;
import mage.cards.Card;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.filter.Filter;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.players.Player;
import mage.sets.Sets;
import org.junit.Assert;
import org.mage.test.player.TestPlayer;
import org.mage.test.serverside.base.CardTestAPI;
@ -118,7 +119,8 @@ public abstract class CardTestAPIImpl extends MageTestBase implements CardTestAP
if (gameZone.equals(Constants.Zone.BATTLEFIELD)) {
for (int i = 0; i < count; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card == null) {
throw new IllegalArgumentException("[TEST] Couldn't find a card: " + cardName);
}
@ -136,7 +138,8 @@ public abstract class CardTestAPIImpl extends MageTestBase implements CardTestAP
}
List<Card> cards = getCardList(gameZone, player);
for (int i = 0; i < count; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
cards.add(card);
}
}

View file

@ -7,6 +7,8 @@ import mage.abilities.Ability;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.cards.decks.importer.DeckImporterUtil;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.counters.CounterType;
import mage.filter.Filter;
import mage.game.ExileZone;
@ -16,7 +18,6 @@ import mage.game.command.CommandObject;
import mage.game.permanent.Permanent;
import mage.game.permanent.PermanentCard;
import mage.players.Player;
import mage.sets.Sets;
import org.junit.Assert;
import org.mage.test.player.TestPlayer;
import org.mage.test.serverside.base.CardTestAPI;
@ -150,7 +151,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
if (gameZone.equals(Constants.Zone.BATTLEFIELD)) {
for (int i = 0; i < count; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card == null) {
throw new IllegalArgumentException("[TEST] Couldn't find a card: " + cardName);
}
@ -164,7 +166,8 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement
}
List<Card> cards = getCardList(gameZone, player);
for (int i = 0; i < count; i++) {
Card card = Sets.findCard(cardName, true);
CardInfo cardInfo = CardRepository.instance.findCard(cardName);
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card == null) {
throw new AssertionError("Couldn't find a card: " + cardName);
}