bestPlayable = rankedPlayableCards.firstEntry();
+ if (bestPlayable == null) {
+ // Nothing is playable, so just take the best card.
+ pickedCard = best.getValue();
+ System.out.println("Nothing playable, chose Best: " + "[" + best.getKey() + "] "
+ + pickedCard.getName() + " (" + pickedCard.getManaCost() + ") "
+ + pickedCard.getType().toString());
+ } else {
+ // If the best card is far better than the best playable,
+ // take the best. Otherwise, take the one that is playable.
+ if (best.getKey() + TAKE_BEST_THRESHOLD < bestPlayable.getKey()) {
+ pickedCard = best.getValue();
+ System.out.println("Best is much better than playable; chose Best: " + "[" + best.getKey()
+ + "] " + pickedCard.getName() + " (" + pickedCard.getManaCost() + ") "
+ + pickedCard.getType().toString());
+ System.out.println("Playable was: " + "[" + bestPlayable.getKey() + "] "
+ + bestPlayable.getValue().getName());
+ } else {
+ pickedCard = bestPlayable.getValue();
+ System.out.println("Chose Playable: " + "[" + bestPlayable.getKey() + "] "
+ + pickedCard.getName() + " (" + pickedCard.getManaCost() + ") "
+ + pickedCard.getType().toString());
+ System.out.println("Best was: " + "[" + best.getKey() + "] " + best.getValue().getName());
+ }
+ }
+ }
+ }
+ System.out.println("");
+ return pickedCard;
+ }
/**
*
@@ -336,9 +289,6 @@ public class BoosterDraftAI {
* @return an array of {@link forge.deck.Deck} objects.
*/
public Deck[] getDecks() {
- // check CardList[] deck for errors
- // checkDeckList(deck);
-
final Deck[] out = new Deck[this.deck.length];
for (int i = 0; i < this.deck.length; i++) {
@@ -401,6 +351,9 @@ public class BoosterDraftAI {
this.playerColors.add(new DeckColors());
}
+ // Initialize card rankings
+ this.draftRankings = new ReadDraftRankings();
+
} // BoosterDraftAI()
/**
@@ -424,6 +377,9 @@ public class BoosterDraftAI {
private final ArrayList playerColors = new ArrayList();
+ private ReadDraftRankings draftRankings;
+ private static final int TAKE_BEST_THRESHOLD = 50;
+
// all 10 two color combinations
private final String[][] deckColorChoices = { { Constant.Color.BLACK, Constant.Color.BLUE },
{ Constant.Color.BLACK, Constant.Color.GREEN }, { Constant.Color.BLACK, Constant.Color.RED },
@@ -436,12 +392,5 @@ public class BoosterDraftAI {
{ Constant.Color.RED, Constant.Color.WHITE } };
- private static void debugCreatures(CardList creatures) {
- if (Constant.Runtime.DEV_MODE[0]) {
- for (Card c : creatures) {
- System.out.println(c.toString() + ": Cost " + c.getCMC() + ", Eval " + CardFactoryUtil.evaluateCreature(c));
- }
- }
- }
} // BoosterDraftAI()
diff --git a/src/main/java/forge/game/limited/ReadDraftRankings.java b/src/main/java/forge/game/limited/ReadDraftRankings.java
index c8ac6d86621..10b73528699 100644
--- a/src/main/java/forge/game/limited/ReadDraftRankings.java
+++ b/src/main/java/forge/game/limited/ReadDraftRankings.java
@@ -3,6 +3,7 @@ package forge.game.limited;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -51,7 +52,7 @@ public class ReadDraftRankings {
* @return a {@link java.util.Map} object.
*/
private Map> readFile(final File file) {
- BufferedReader in;
+ BufferedReader in = null;
final Map> map = new HashMap>();
try {
@@ -61,9 +62,9 @@ public class ReadDraftRankings {
// stop reading if end of file or blank line is read
while ((line != null) && (line.trim().length() != 0)) {
if (!line.startsWith(ReadDraftRankings.COMMENT)) {
- final String[] s = line.split(",");
+ final String[] s = line.split("\\|");
final String rankStr = s[0].trim().substring(1);
- final String name = s[1].trim();
+ final String name = s[1].trim().replaceAll("-", " ").replaceAll("[^A-Za-z ]", "");
// final String rarity = s[2].trim();
final String edition = s[3].trim();
@@ -83,6 +84,12 @@ public class ReadDraftRankings {
} catch (final Exception ex) {
ErrorViewer.showError(ex);
throw new RuntimeException("ReadDraftRankings : readFile error, " + ex);
+ } finally {
+ try {
+ if (in != null)in.close();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
}
return map;
@@ -91,7 +98,7 @@ public class ReadDraftRankings {
public Integer getRanking(String cardName, String edition) {
Integer rank = null;
if (draftRankings.containsKey(edition)) {
- String safeName = cardName.replaceAll("[^A-Za-z ]", "");
+ String safeName = cardName.replaceAll("-", " ").replaceAll("[^A-Za-z ]", "");
rank = draftRankings.get(edition).get(safeName);
}
return rank;
diff --git a/src/test/java/forge/ReadDraftRankingsTest.java b/src/test/java/forge/ReadDraftRankingsTest.java
index 31e725d6fdb..b30c9e7b389 100644
--- a/src/test/java/forge/ReadDraftRankingsTest.java
+++ b/src/test/java/forge/ReadDraftRankingsTest.java
@@ -27,19 +27,25 @@ public class ReadDraftRankingsTest {
ReadDraftRankings rdr = new ReadDraftRankings();
Assert.assertNotNull(rdr);
- List cardLines = FileUtil
- .readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/g", "garruk_primal_hunter.txt"));
+ List cardLines = FileUtil.readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/g",
+ "garruk_primal_hunter.txt"));
Card c = CardReader.readCard(cardLines);
Assert.assertEquals(1, rdr.getRanking(c.getName(), "M13").intValue());
- cardLines = FileUtil
- .readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/c", "clone.txt"));
+ cardLines = FileUtil.readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/c", "clone.txt"));
c = CardReader.readCard(cardLines);
Assert.assertEquals(38, rdr.getRanking(c.getName(), "M13").intValue());
- cardLines = FileUtil
- .readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/t", "tamiyo_the_moon_sage.txt"));
+ cardLines = FileUtil.readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/t",
+ "tamiyo_the_moon_sage.txt"));
c = CardReader.readCard(cardLines);
Assert.assertEquals(1, rdr.getRanking(c.getName(), "AVR").intValue());
+
+ // Mikaeus, the Lunarch has a comma in its name in the rankings file
+ cardLines = FileUtil.readFile(new File(ForgeProps.getFile(NewConstants.CARDSFOLDER) + "/m",
+ "mikaeus_the_lunarch.txt"));
+ c = CardReader.readCard(cardLines);
+ Assert.assertEquals(4, rdr.getRanking(c.getName(), "ISD").intValue());
+
}
}