package forge; //import java.io.BufferedReader; //import java.io.File; //import java.io.FileReader; import forge.properties.NewConstants; import java.util.ArrayList; /** * <p>ReadBoosterPack class.</p> * * @author Forge * @version $Id: $ */ public class ReadBoosterPack implements NewConstants { // final private static String comment = "//"; private CardList commonCreatureList = new CardList(); private CardList commonNonCreatureList = new CardList(); private CardList commonList = new CardList(); private CardList uncommonList = new CardList(); private CardList rareList = new CardList(); /* //average creature versus noncreature ReadBoosterPack r = new ReadBoosterPack(); double n = 0; //total int nCreature = 0; int nSpell = 0; for(int i = 0; i < 1000; i++) { CardList list = r.getBoosterPack(); int c = list.getType("Creature").size(); nCreature += c; nSpell += (15 -c); n += 15; } System.out.println(nCreature / n +" - " +nSpell / n); System.exit(0); */ /** * <p>Constructor for ReadBoosterPack.</p> */ public ReadBoosterPack() { setup(); } //returns "common", "uncommon", or "rare" /** * <p>getRarity.</p> * * @param cardName a {@link java.lang.String} object. * @return a {@link java.lang.String} object. */ public String getRarity(String cardName) { if (commonList.containsName(cardName)) return "Common"; if (uncommonList.containsName(cardName)) return "Uncommon"; if (rareList.containsName(cardName)) return "Rare"; ArrayList<String> land = new ArrayList<String>(); land.add("Forest"); land.add("Plains"); land.add("Swamp"); land.add("Mountain"); land.add("Island"); land.add("Terramorphic Expanse"); land.add("Snow-Covered Forest"); land.add("Snow-Covered Plains"); land.add("Snow-Covered Swamp"); land.add("Snow-Covered Mountain"); land.add("Snow-Covered Island"); if (land.contains(cardName)) return "Land"; return "error"; } /** * <p>getBoosterPack5.</p> * * @return a {@link forge.CardList} object. */ public CardList getBoosterPack5() { CardList list = new CardList(); for (int i = 0; i < 5; i++) list.addAll(getBoosterPack()); for (int i = 0; i < 20; i++) { list.add(AllZone.getCardFactory().getCard("Forest", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Island", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Mountain", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Swamp", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Forest", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Island", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Plains", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Mountain", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Swamp", AllZone.getHumanPlayer())); } for (int i = 0; i < 4; i++) list.add(AllZone.getCardFactory().getCard("Terramorphic Expanse", AllZone.getHumanPlayer())); return list; }//getBoosterPack5() /** * <p>getBoosterPack.</p> * * @return a {@link forge.CardList} object. */ public CardList getBoosterPack() { CardList pack = new CardList(); pack.add(getRandomCard(rareList)); for (int i = 0; i < 3; i++) pack.add(getRandomCard(uncommonList)); //11 commons, 7 creature 4 noncreature CardList variety; for (int i = 0; i < 7; i++) { variety = getVariety(commonCreatureList); pack.add(getRandomCard(variety)); } for (int i = 0; i < 4; i++) { variety = getVariety(commonNonCreatureList); pack.add(getRandomCard(variety)); } if (pack.size() != 15) throw new RuntimeException("ReadBoosterPack : getBoosterPack() error, pack is not 15 card - " + pack.size()); return pack; } /** * <p>getShopCards.</p> * * @param numberWins a int. * @param questLevel a int. * @return a {@link forge.CardList} object. */ public CardList getShopCards(int numberWins, int questLevel) { CardList list = new CardList(); // Number of Packs granted int levelPacks = questLevel > 0 ? 8 / questLevel / 2 : 4; int winPacks = numberWins / 15; int totalPacks = Math.min(levelPacks + winPacks, 6); for (int i = 0; i < totalPacks; i++) { // TODO: Balance CardPool Availability // Each "Pack" yields 1 Rare, 3 Uncommon, 7 Commons list.add(getRandomCard(rareList)); for (int j = 0; j < 7; j++) { if (j < 3) list.add(getRandomCard(uncommonList)); list.add(getRandomCard(commonList)); } } for (int i = 0; i < 10; i++) { // Add basic land availability list.add(AllZone.getCardFactory().getCard("Forest", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Island", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Mountain", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Swamp", AllZone.getHumanPlayer())); if (i < 5) { list.add(AllZone.getCardFactory().getCard("Snow-Covered Forest", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Island", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Plains", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Mountain", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Snow-Covered Swamp", AllZone.getHumanPlayer())); } } return list; } //return CardList of 5 or 6 cards, one for each color and maybe an artifact /** * <p>getVariety.</p> * * @param in a {@link forge.CardList} object. * @return a {@link forge.CardList} object. */ private CardList getVariety(CardList in) { CardList out = new CardList(); String color[] = Constant.Color.Colors; Card check; in.shuffle(); for (int i = 0; i < color.length; i++) { check = findColor(in, color[i]); if (check != null) out.add(check); } return out; }//getVariety() /** * <p>findColor.</p> * * @param in a {@link forge.CardList} object. * @param color a {@link java.lang.String} object. * @return a {@link forge.Card} object. */ private Card findColor(CardList in, String color) { for (int i = 0; i < in.size(); i++) if (CardUtil.getColors(in.get(i)).contains(color)) return in.get(i); return null; } /** * <p>getRandomCard.</p> * * @param list a {@link forge.CardList} object. * @return a {@link forge.Card} object. */ private Card getRandomCard(CardList list) { for (int i = 0; i < 10; i++) list.shuffle(); int index = MyRandom.random.nextInt(list.size()); Card c = AllZone.getCardFactory().copyCard(list.get(index)); c.setRarity("rare"); return c; }//getRandomCard() /** * <p>setup.</p> */ private void setup() { //commonList = readFile(ForgeProps.getFile(REGULAR.COMMON)); //uncommonList = readFile(ForgeProps.getFile(REGULAR.UNCOMMON)); //rareList = readFile(ForgeProps.getFile(REGULAR.RARE)); //commonCreatureList = commonList.getType("Creature"); //commonNonCreatureList = commonList.filter(new CardListFilter() { // public boolean addCard(Card c) { // return !c.isCreature(); // } //}); for (Card aCard : AllZone.getCardFactory()) { String rr = aCard.getSVar("Rarity"); if (rr.equals("Common")) { commonList.add(aCard); if (aCard.isCreature()) commonCreatureList.add(aCard); else commonNonCreatureList.add(aCard); } else if (rr.equals("Uncommon")) { uncommonList.add(aCard); } else if (rr.equals("Rare")) { rareList.add(aCard); } else if (rr.equals("Mythic")) { rareList.add(aCard); } } }//setup() /* private CardList readFile(File file) { CardList cardList = new CardList(); BufferedReader in; try { in = new BufferedReader(new FileReader(file)); String line = in.readLine(); //stop reading if end of file or blank line is read while(line != null && (line.trim().length() != 0)) { Card c; if(!line.startsWith(comment)) { c = AllZone.getCardFactory().getCard(line.trim(), AllZone.getHumanPlayer()); cardList.add(c); } line = in.readLine(); }//if } catch(Exception ex) { ErrorViewer.showError(ex); throw new RuntimeException("ReadBoosterPack : readFile error, " + ex); } return cardList; }//readFile() */ } /* import java.util.*; import java.io.*; public class ReadBoosterPack { // final private String commonFilename = Constant.IO.baseDir +"data/common.txt"; // final private String uncommonFilename = Constant.IO.baseDir +"data/uncommon.txt"; // final private String rareFilename = Constant.IO.baseDir +"data/rare.txt"; final private String commonFilename = "common.txt"; final private String uncommonFilename = "uncommon.txt"; final private String rareFilename = "rare.txt"; final private String comment = "//"; private ArrayList commonList; private ArrayList uncommonList; private ArrayList rareList; public static void main(String[] args) { ReadBoosterPack r = new ReadBoosterPack(); CardList list = r.getBoosterPack(); double n = 0; //total int nCreature = 0; int nSpell = 0; for(int i = 0; i < 2; i++) { int c = list.getType("Creature").size(); nCreature += c; nSpell += (15 -c); n += 15; } System.out.println(nCreature / n +" - " +nSpell / n); System.exit(0); }//main() public ReadBoosterPack() {setup();} //returns "common", "uncommon", or "rare" public String getRarity(String cardName) { if(commonList.contains(cardName)) return "Common"; if(uncommonList.contains(cardName)) return "Uncommon"; if(rareList.contains(cardName)) return "Rare"; ArrayList land = new ArrayList(); land.add("Forest"); land.add("Plains"); land.add("Swamp"); land.add("Mountain"); land.add("Island"); land.add("Terramorphic Expanse"); if(land.contains(cardName)) return "Land"; return "error"; } public CardList getBoosterPack5() { CardList list = new CardList(); for(int i = 0; i < 5; i++) list.addAll(getBoosterPack()); for(int i = 0; i < 40; i++) { list.add(AllZone.getCardFactory().getCard("Forest", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Island", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Mountain", AllZone.getHumanPlayer())); list.add(AllZone.getCardFactory().getCard("Swamp", AllZone.getHumanPlayer())); } for(int i = 0; i < 4; i++) list.add(AllZone.getCardFactory().getCard("Terramorphic Expanse", AllZone.getHumanPlayer())); return list; }//getBoosterPack5() public CardList getBoosterPack() { CardList pack = new CardList(); pack.add(getRandomCard(rareList)); for(int i = 0; i < 3; i++) pack.add(getRandomCard(uncommonList)); for(int i = 0; i < 11; i++) pack.add(getRandomCard(commonList)); return pack; } private Card getRandomCard(ArrayList list) { for(int i = 0; i < 10; i++) Collections.shuffle(list, MyRandom.random); int index = MyRandom.random.nextInt(list.size()); String name = list.get(index).toString(); Card c = AllZone.getCardFactory().getCard(name, AllZone.getHumanPlayer()); c.setRarity("rare"); return c; }//getRandomCard() private void setup() { commonList = readFile(commonFilename); uncommonList = readFile(uncommonFilename); rareList = readFile(rareFilename); checkName(commonList); checkName(uncommonList); checkName(rareList); } private void checkName(ArrayList name) { for(int i = 0; i < name.size(); i++) AllZone.getCardFactory().getCard(name.get(i).toString(), AllZone.getHumanPlayer()); } //returns an ArrayList of Strings, the names of the cards read private ArrayList readFile(String filename) { ArrayList cardName = new ArrayList(); BufferedReader in; try{ in = new BufferedReader(new FileReader(filename)); String line = in.readLine(); //stop reading if end of file or blank line is read while(line != null && (line.trim().length() != 0)) { if(! line.startsWith(comment)) cardName.add(line.trim()); line = in.readLine(); }//if }catch(Exception ex){throw new RuntimeException("ReadBoosterPack : readFile error, " + ex);} return cardName; }//readFile() } */