package forge;
import forge.error.ErrorViewer;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
/**
* <p>ReadDraftBoosterPack class.</p>
*
* @author Forge
* @version $Id: $
*/
public class ReadDraftBoosterPack implements NewConstants {
/** Constant <code>comment="//"</code> */
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();
/**
* <p>Constructor for ReadDraftBoosterPack.</p>
*/
public ReadDraftBoosterPack() {
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("ReadDraftBoosterPack : getBoosterPack() error, pack is not 15 cards - "
+ pack.size());
return pack;
}
/**
* <p>getShopCards.</p>
*
* @param numberWins a int.
* @return a {@link forge.CardList} object.
*/
public CardList getShopCards(int numberWins) {
CardList list = new CardList();
int numberRares = 1 + numberWins / 15;
if (numberRares > 10)
numberRares = 10;
for (int i = 0; i < numberRares; i++)
list.add(getRandomCard(rareList));
int numberUncommons = 3 + numberWins / 10;
if (numberUncommons > 20)
numberUncommons = 20;
for (int i = 0; i < numberUncommons; i++)
list.add(getRandomCard(uncommonList));
int numberCommons = 5 + numberWins / 5;
if (numberCommons > 35)
numberCommons = 35;
for (int i = 0; i < numberCommons; i++)
list.add(getRandomCard(commonList));
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(DRAFT.COMMON));
uncommonList = readFile(ForgeProps.getFile(DRAFT.UNCOMMON));
rareList = readFile(ForgeProps.getFile(DRAFT.RARE));
System.out.println("commonList size:" + commonList.size());
System.out.println("ucommonList size:" + uncommonList.size());
System.out.println("rareList size:" + rareList.size());
commonCreatureList = commonList.getType("Creature");
commonNonCreatureList = commonList.filter(new CardListFilter() {
public boolean addCard(Card c) {
return !c.isCreature();
}
});
/* CardList AllCards = AllZone.getCardFactory().getAllCards();
for (int i=0; i<AllCards.size(); i++)
{
Card aCard = AllCards.get(i);
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()
/**
* <p>readFile.</p>
*
* @param file a {@link java.io.File} object.
* @return a {@link forge.CardList} object.
*/
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("ReadDraftBoosterPack : readFile error, " + ex);
}
return cardList;
}//readFile()
}