mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
removed player's picks map from boosterDraft interface (interface should not hold static data)
removed the getCardsNumber function from BoosterGenerator (it doesn't know in advance how many cards caller will ask to generate) moved upload picks from draft deckeditor to boosterDraft class added an enum to describe limited game type tests may start failing - they would need an initialized CardDb
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -9822,6 +9822,7 @@ src/main/java/forge/game/limited/BoosterDraft.java svneol=native#text/plain
|
|||||||
src/main/java/forge/game/limited/BoosterDraftAI.java svneol=native#text/plain
|
src/main/java/forge/game/limited/BoosterDraftAI.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/BoosterDraft_1.java svneol=native#text/plain
|
src/main/java/forge/game/limited/BoosterDraft_1.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/CCnt.java svneol=native#text/plain
|
src/main/java/forge/game/limited/CCnt.java svneol=native#text/plain
|
||||||
|
src/main/java/forge/game/limited/CardPoolLimitation.java -text
|
||||||
src/main/java/forge/game/limited/CustomLimited.java svneol=native#text/plain
|
src/main/java/forge/game/limited/CustomLimited.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
|
src/main/java/forge/game/limited/DeckColors.java svneol=native#text/plain
|
||||||
src/main/java/forge/game/limited/SealedDeck.java svneol=native#text/plain
|
src/main/java/forge/game/limited/SealedDeck.java svneol=native#text/plain
|
||||||
|
|||||||
@@ -215,15 +215,6 @@ public class BoosterGenerator {
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>getBoosterPackSize.</p>
|
|
||||||
*
|
|
||||||
* @return a int.
|
|
||||||
*/
|
|
||||||
public final int getBoosterPackSize() {
|
|
||||||
return numCommons + numUncommons + numRareSlots + numSpecials;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addToRarity(final CardPrinted c) {
|
private void addToRarity(final CardPrinted c) {
|
||||||
switch(c.getRarity()) {
|
switch(c.getRarity()) {
|
||||||
case Common: commons.add(c); break;
|
case Common: commons.add(c); break;
|
||||||
|
|||||||
@@ -4,9 +4,6 @@ import forge.deck.Deck;
|
|||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.item.ItemPoolView;
|
import forge.item.ItemPoolView;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>BoosterDraft interface.</p>
|
* <p>BoosterDraft interface.</p>
|
||||||
*
|
*
|
||||||
@@ -44,12 +41,12 @@ public interface BoosterDraft {
|
|||||||
|
|
||||||
/** Constant <code>LandSetCode="{}"</code>. */
|
/** Constant <code>LandSetCode="{}"</code>. */
|
||||||
public String LandSetCode[] = {""};
|
public String LandSetCode[] = {""};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when drafting is over - to upload picks.
|
||||||
|
*/
|
||||||
|
void finishedDrafting();
|
||||||
|
|
||||||
/** Constant <code>draftFormat="{}"</code>. */
|
|
||||||
public String draftFormat[] = {""};
|
|
||||||
|
|
||||||
/** Constant <code>draftPicks="{}"</code>. */
|
|
||||||
public Map<String,Float> draftPicks = new TreeMap<String,Float>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import forge.Card;
|
|||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.FileUtil;
|
import forge.FileUtil;
|
||||||
|
import forge.HttpUtil;
|
||||||
import forge.SetUtils;
|
import forge.SetUtils;
|
||||||
import forge.card.BoosterGenerator;
|
import forge.card.BoosterGenerator;
|
||||||
import forge.card.CardBlock;
|
import forge.card.CardBlock;
|
||||||
@@ -20,9 +21,14 @@ import forge.item.ItemPoolView;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
import net.slightlymagic.braids.util.lambda.Lambda1;
|
import net.slightlymagic.braids.util.lambda.Lambda1;
|
||||||
import net.slightlymagic.maxmtg.Closure1;
|
import net.slightlymagic.maxmtg.Closure1;
|
||||||
|
|
||||||
@@ -31,113 +37,96 @@ import net.slightlymagic.maxmtg.Closure1;
|
|||||||
* TODO Write javadoc for this type.
|
* TODO Write javadoc for this type.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BoosterDraft_1 implements BoosterDraft {
|
public final class BoosterDraft_1 implements BoosterDraft {
|
||||||
private final BoosterDraftAI draftAI = new BoosterDraftAI();
|
private final BoosterDraftAI draftAI = new BoosterDraftAI();
|
||||||
private static final int nPlayers = 8;
|
private static final int nPlayers = 8;
|
||||||
//private static int boosterPackSize = 14; // 10 com + 3 unc + 1 rare/myth
|
|
||||||
private static int stopCount = 42; //boosterPackSize * 3;//should total of 42 - because you don't draft lands
|
|
||||||
|
|
||||||
private int currentCount = 0;
|
private int nextBoosterGroup = 0;
|
||||||
|
private int currentBoosterSize = 0;
|
||||||
|
private int currentBoosterPick = 0;
|
||||||
private List<List<CardPrinted>> pack; //size 8
|
private List<List<CardPrinted>> pack; //size 8
|
||||||
//private BoosterGenerator packs[] = {new BoosterGenerator(), new BoosterGenerator(), new BoosterGenerator()};
|
|
||||||
|
public Map<String,Float> draftPicks = new TreeMap<String,Float>();
|
||||||
|
private CardPoolLimitation draftFormat;
|
||||||
|
|
||||||
private ArrayList<Closure1<List<CardPrinted>, BoosterGenerator>> packs = new ArrayList<Closure1<List<CardPrinted>, BoosterGenerator>>();
|
private ArrayList<Closure1<List<CardPrinted>, BoosterGenerator>> packs = new ArrayList<Closure1<List<CardPrinted>, BoosterGenerator>>();
|
||||||
private int currentBoosterPack = 0;
|
|
||||||
|
|
||||||
//helps the computer choose which booster packs to pick from
|
|
||||||
//the first row says "pick from boosters 1-7, skip 0" since the players picks from 0
|
|
||||||
//the second row says "pick from 0 and 2-7 boosters, skip 1" - player chooses from 1
|
|
||||||
private final int[][] computerChoose = {
|
|
||||||
{1, 2, 3, 4, 5, 6, 7},
|
|
||||||
{0, 2, 3, 4, 5, 6, 7},
|
|
||||||
{0, 1, 3, 4, 5, 6, 7},
|
|
||||||
{0, 1, 2, 4, 5, 6, 7},
|
|
||||||
{0, 1, 2, 3, 5, 6, 7},
|
|
||||||
{0, 1, 2, 3, 4, 6, 7},
|
|
||||||
{0, 1, 2, 3, 4, 5, 7},
|
|
||||||
{0, 1, 2, 3, 4, 5, 6}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* TODO Write javadoc for Constructor.
|
|
||||||
*/
|
|
||||||
public BoosterDraft_1() {
|
|
||||||
pack = get8BoosterPack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for BoosterDraft_1.</p>
|
* <p>Constructor for BoosterDraft_1.</p>
|
||||||
*
|
*
|
||||||
* @param draftType a {@link java.lang.String} object.
|
* @param draftType a {@link java.lang.String} object.
|
||||||
*/
|
*/
|
||||||
public BoosterDraft_1(String draftType) {
|
public BoosterDraft_1(CardPoolLimitation draftType) {
|
||||||
draftAI.bd = this;
|
draftAI.bd = this;
|
||||||
draftFormat[0] = draftType;
|
draftFormat = draftType;
|
||||||
|
|
||||||
if (draftType.equals("Full")) { // Draft from all cards in Forge
|
switch (draftType) {
|
||||||
BoosterGenerator bpFull = new BoosterGenerator(CardDb.instance().getAllUniqueCards());
|
case Full: // Draft from all cards in Forge
|
||||||
Closure1<List<CardPrinted>, BoosterGenerator> picker = BoosterGenerator.getSimplePicker(bpFull);
|
BoosterGenerator bpFull = new BoosterGenerator(CardDb.instance().getAllUniqueCards());
|
||||||
for (int i = 0; i < 3; i++) {
|
Closure1<List<CardPrinted>, BoosterGenerator> picker = BoosterGenerator.getSimplePicker(bpFull);
|
||||||
packs.add(picker);
|
for (int i = 0; i < 3; i++) {
|
||||||
}
|
|
||||||
|
|
||||||
LandSetCode[0] = AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer()).getMostRecentSet();
|
|
||||||
} else if (draftType.equals("Block")) { // Draft from cards by block or set
|
|
||||||
List<CardBlock> blocks = SetUtils.getBlocks();
|
|
||||||
|
|
||||||
Object o = GuiUtils.getChoice("Choose Block", blocks.toArray());
|
|
||||||
CardBlock block = (CardBlock) o;
|
|
||||||
|
|
||||||
CardSet[] cardSets = block.getSets();
|
|
||||||
String[] sets = new String[cardSets.length];
|
|
||||||
for (int k = cardSets.length - 1; k >= 0 ; --k) { sets[k] = cardSets[k].getCode();}
|
|
||||||
|
|
||||||
int nPacks = block.getCntBoostersDraft();
|
|
||||||
|
|
||||||
ArrayList<String> setCombos = new ArrayList<String>();
|
|
||||||
if (sets.length >= 2) {
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[0], sets[0], sets[0]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[1], sets[0], sets[0]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[0]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[1]));
|
|
||||||
}
|
|
||||||
if (sets.length >= 3) {
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[2], sets[1], sets[0]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[0]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[1]));
|
|
||||||
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[2]));
|
|
||||||
}
|
|
||||||
|
|
||||||
int sumCards = 0;
|
|
||||||
if (sets.length > 1) {
|
|
||||||
Object p = GuiUtils.getChoice("Choose Set Combination", setCombos.toArray());
|
|
||||||
String[] pp = p.toString().split("/");
|
|
||||||
for (int i = 0; i < nPacks; i++) {
|
|
||||||
BoosterGenerator bpMulti = new BoosterGenerator(pp[i]);
|
|
||||||
Closure1<List<CardPrinted>, BoosterGenerator> picker = BoosterGenerator.getSimplePicker(bpMulti);
|
|
||||||
packs.add(picker);
|
packs.add(picker);
|
||||||
sumCards += bpMulti.getBoosterPackSize();
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
BoosterGenerator bpOne = new BoosterGenerator(sets[0]);
|
LandSetCode[0] = CardDb.instance().getCard("Plains").getSet();
|
||||||
Closure1<List<CardPrinted>, BoosterGenerator> picker = BoosterGenerator.getSimplePicker(bpOne);
|
break;
|
||||||
for (int i = 0; i < nPacks; i++) {
|
|
||||||
packs.add(picker);
|
case Block: // Draft from cards by block or set
|
||||||
sumCards += bpOne.getBoosterPackSize();
|
List<CardBlock> blocks = SetUtils.getBlocks();
|
||||||
|
|
||||||
|
Object o = GuiUtils.getChoice("Choose Block", blocks.toArray());
|
||||||
|
CardBlock block = (CardBlock) o;
|
||||||
|
|
||||||
|
CardSet[] cardSets = block.getSets();
|
||||||
|
String[] sets = new String[cardSets.length];
|
||||||
|
for (int k = cardSets.length - 1; k >= 0 ; --k) { sets[k] = cardSets[k].getCode();}
|
||||||
|
|
||||||
|
int nPacks = block.getCntBoostersDraft();
|
||||||
|
|
||||||
|
ArrayList<String> setCombos = new ArrayList<String>();
|
||||||
|
if (sets.length >= 2) {
|
||||||
|
setCombos.add(String.format("%s/%s/%s", sets[0], sets[0], sets[0]));
|
||||||
|
setCombos.add(String.format("%s/%s/%s", sets[1], sets[0], sets[0]));
|
||||||
|
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[0]));
|
||||||
|
setCombos.add(String.format("%s/%s/%s", sets[1], sets[1], sets[1]));
|
||||||
}
|
}
|
||||||
}
|
if (sets.length >= 3) {
|
||||||
stopCount = sumCards;
|
setCombos.add(String.format("%s/%s/%s", sets[2], sets[1], sets[0]));
|
||||||
LandSetCode[0] = block.getLandSet().getCode();
|
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[0]));
|
||||||
|
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[1]));
|
||||||
} else if (draftType.equals("Custom")) { // Draft from user-defined cardpools
|
setCombos.add(String.format("%s/%s/%s", sets[2], sets[2], sets[2]));
|
||||||
List<CustomLimited> myDrafts = loadCustomDrafts("res/draft/", ".draft");
|
}
|
||||||
|
|
||||||
if (myDrafts.size() < 1) {
|
|
||||||
JOptionPane.showMessageDialog(null, "No custom draft files found.", "", JOptionPane.INFORMATION_MESSAGE);
|
if (sets.length > 1) {
|
||||||
} else {
|
Object p = GuiUtils.getChoice("Choose Set Combination", setCombos.toArray());
|
||||||
CustomLimited draft = (CustomLimited) GuiUtils.getChoice("Choose Custom Draft", myDrafts.toArray());
|
String[] pp = p.toString().split("/");
|
||||||
setupCustomDraft(draft);
|
for (int i = 0; i < nPacks; i++) {
|
||||||
}
|
BoosterGenerator bpMulti = new BoosterGenerator(pp[i]);
|
||||||
|
packs.add(BoosterGenerator.getSimplePicker(bpMulti));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
BoosterGenerator bpOne = new BoosterGenerator(sets[0]);
|
||||||
|
Closure1<List<CardPrinted>, BoosterGenerator> pick1 = BoosterGenerator.getSimplePicker(bpOne);
|
||||||
|
for (int i = 0; i < nPacks; i++) { packs.add(pick1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
LandSetCode[0] = block.getLandSet().getCode();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Custom:
|
||||||
|
List<CustomLimited> myDrafts = loadCustomDrafts("res/draft/", ".draft");
|
||||||
|
|
||||||
|
if (myDrafts.size() < 1) {
|
||||||
|
JOptionPane.showMessageDialog(null, "No custom draft files found.", "", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
CustomLimited draft = (CustomLimited) GuiUtils.getChoice("Choose Custom Draft", myDrafts.toArray());
|
||||||
|
setupCustomDraft(draft);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new NoSuchElementException("Draft for mode " + draftType + " has not been set up!");
|
||||||
}
|
}
|
||||||
|
|
||||||
pack = get8BoosterPack();
|
pack = get8BoosterPack();
|
||||||
@@ -162,13 +151,7 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Closure1<List<CardPrinted>, BoosterGenerator> picker = new Closure1<List<CardPrinted>, BoosterGenerator>(fnPick, bpCustom);
|
Closure1<List<CardPrinted>, BoosterGenerator> picker = new Closure1<List<CardPrinted>, BoosterGenerator>(fnPick, bpCustom);
|
||||||
|
for (int i = 0; i < draft.NumPacks; i++) { packs.add(picker); }
|
||||||
int n = 0;
|
|
||||||
for (int i = 0; i < draft.NumPacks; i++) {
|
|
||||||
packs.add(picker);
|
|
||||||
n += draft.NumCards; //bpCustom.getBoosterPackSize();
|
|
||||||
}
|
|
||||||
stopCount = n;
|
|
||||||
|
|
||||||
LandSetCode[0] = draft.LandSetCode;
|
LandSetCode[0] = draft.LandSetCode;
|
||||||
}
|
}
|
||||||
@@ -206,7 +189,7 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
*
|
*
|
||||||
* @return a {@link forge.CardList} object.
|
* @return a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public final ItemPoolView<CardPrinted> nextChoice() {
|
public ItemPoolView<CardPrinted> nextChoice() {
|
||||||
if (pack.get(getCurrentBoosterIndex()).size() == 0) {
|
if (pack.get(getCurrentBoosterIndex()).size() == 0) {
|
||||||
pack = get8BoosterPack();
|
pack = get8BoosterPack();
|
||||||
}
|
}
|
||||||
@@ -220,19 +203,17 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
*
|
*
|
||||||
* @return an array of {@link forge.CardList} objects.
|
* @return an array of {@link forge.CardList} objects.
|
||||||
*/
|
*/
|
||||||
public final List<List<CardPrinted>> get8BoosterPack() {
|
public List<List<CardPrinted>> get8BoosterPack() {
|
||||||
|
if (nextBoosterGroup >= packs.size()) { return null; }
|
||||||
|
|
||||||
List<List<CardPrinted>> list = new ArrayList<List<CardPrinted>>();
|
List<List<CardPrinted>> list = new ArrayList<List<CardPrinted>>();
|
||||||
|
for (int i = 0; i < 8; i++) { list.add(packs.get(nextBoosterGroup).apply()); }
|
||||||
if (currentBoosterPack < packs.size()) {
|
|
||||||
for (int i = 0; i < 8; i++) {
|
nextBoosterGroup++;
|
||||||
list.add(packs.get(currentBoosterPack).apply());
|
currentBoosterSize = list.get(0).size();
|
||||||
}
|
currentBoosterPick = 0;
|
||||||
}
|
|
||||||
|
|
||||||
currentBoosterPack++;
|
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
} //get8BoosterPack()
|
}
|
||||||
|
|
||||||
//size 7, all the computers decks
|
//size 7, all the computers decks
|
||||||
|
|
||||||
@@ -241,21 +222,24 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
*
|
*
|
||||||
* @return an array of {@link forge.deck.Deck} objects.
|
* @return an array of {@link forge.deck.Deck} objects.
|
||||||
*/
|
*/
|
||||||
public final Deck[] getDecks() {
|
public Deck[] getDecks() {
|
||||||
return draftAI.getDecks();
|
return draftAI.getDecks();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void computerChoose() {
|
private void computerChoose() {
|
||||||
int[] row = computerChoose[getCurrentBoosterIndex()];
|
|
||||||
|
|
||||||
for (int i = 0; i < row.length; i++) {
|
int iHumansBooster = getCurrentBoosterIndex();
|
||||||
|
int iPlayer = 0;
|
||||||
|
for (int i = 0; i < pack.size(); i++) {
|
||||||
|
if (iHumansBooster == i) { continue; } // don't touch player's booster
|
||||||
|
|
||||||
CardList forAi = new CardList();
|
CardList forAi = new CardList();
|
||||||
List<CardPrinted> booster = pack.get(row[i]);
|
List<CardPrinted> booster = pack.get(i);
|
||||||
for (CardPrinted cr : booster) {
|
for (CardPrinted cr : booster) {
|
||||||
forAi.add(cr.toForgeCard());
|
forAi.add(cr.toForgeCard());
|
||||||
}
|
}
|
||||||
// TODO Please write this drafting code to work without heavy cards
|
// TODO: Please write this drafting code to work without heavy card objects
|
||||||
Card aiPick = draftAI.choose(forAi, i);
|
Card aiPick = draftAI.choose(forAi, iPlayer++);
|
||||||
String pickedName = aiPick.getName();
|
String pickedName = aiPick.getName();
|
||||||
|
|
||||||
for (int pick = booster.size() - 1; pick >= 0; pick--) {
|
for (int pick = booster.size() - 1; pick >= 0; pick--) {
|
||||||
@@ -269,7 +253,7 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
} //computerChoose()
|
} //computerChoose()
|
||||||
|
|
||||||
private int getCurrentBoosterIndex() {
|
private int getCurrentBoosterIndex() {
|
||||||
return currentCount % nPlayers;
|
return currentBoosterPick % nPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -277,12 +261,15 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
*
|
*
|
||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public final boolean hasNextChoice() {
|
public boolean hasNextChoice() {
|
||||||
return currentCount < stopCount;
|
boolean isLastGroup = nextBoosterGroup >= packs.size();
|
||||||
|
boolean isBoosterDepleted = currentBoosterPick >= currentBoosterSize;
|
||||||
|
boolean noMoreCards = isLastGroup && isBoosterDepleted;
|
||||||
|
return !noMoreCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
public final void setChoice(final CardPrinted c) {
|
public void setChoice(final CardPrinted c) {
|
||||||
List<CardPrinted> thisBooster = pack.get(getCurrentBoosterIndex());
|
List<CardPrinted> thisBooster = pack.get(getCurrentBoosterIndex());
|
||||||
|
|
||||||
if (!thisBooster.contains(c)) {
|
if (!thisBooster.contains(c)) {
|
||||||
@@ -296,7 +283,7 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
|
|
||||||
float pickValue = 0;
|
float pickValue = 0;
|
||||||
if (cc.equals(c)) {
|
if (cc.equals(c)) {
|
||||||
pickValue = thisBooster.size() * (1f - ((float) currentCount) / stopCount) * 2f;
|
pickValue = thisBooster.size() * (1f - ((float) currentBoosterPick / currentBoosterSize) * 2f);
|
||||||
} else {
|
} else {
|
||||||
pickValue = 0;
|
pickValue = 0;
|
||||||
}
|
}
|
||||||
@@ -312,6 +299,26 @@ public class BoosterDraft_1 implements BoosterDraft {
|
|||||||
}
|
}
|
||||||
|
|
||||||
thisBooster.remove(c);
|
thisBooster.remove(c);
|
||||||
currentCount++;
|
currentBoosterPick++;
|
||||||
} //setChoice()
|
} //setChoice()
|
||||||
|
|
||||||
|
/** This will upload drafting picks to cardforge HQ */
|
||||||
|
@Override public void finishedDrafting() {
|
||||||
|
if (Constant.Runtime.UpldDrft[0]) {
|
||||||
|
if (draftPicks.size() > 1) {
|
||||||
|
ArrayList<String> outDraftData = new ArrayList<String>();
|
||||||
|
|
||||||
|
String[] keys = draftPicks.keySet().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
|
||||||
|
|
||||||
|
for (int i = 0; i < keys.length; i++) {
|
||||||
|
outDraftData.add(keys[i] + "|" + draftPicks.get(keys[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
FileUtil.writeFile("res/draft/tmpDraftData.txt", outDraftData);
|
||||||
|
|
||||||
|
HttpUtil poster = new HttpUtil();
|
||||||
|
poster.upload("http://cardforge.org/draftAI/submitDraftData.php?fmt=" + draftFormat, "res/draft/tmpDraftData.txt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/main/java/forge/game/limited/CardPoolLimitation.java
Normal file
11
src/main/java/forge/game/limited/CardPoolLimitation.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package forge.game.limited;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CardPoolLimitation {
|
||||||
|
Full,
|
||||||
|
Block,
|
||||||
|
Custom
|
||||||
|
}
|
||||||
@@ -2,8 +2,6 @@ package forge.gui.deckeditor;
|
|||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.FileUtil;
|
|
||||||
import forge.HttpUtil;
|
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckManager;
|
import forge.deck.DeckManager;
|
||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
@@ -19,17 +17,26 @@ import forge.properties.ForgeProps;
|
|||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.view.swing.OldGuiNewGame;
|
import forge.view.swing.OldGuiNewGame;
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
import net.slightlymagic.maxmtg.Predicate;
|
import net.slightlymagic.maxmtg.Predicate;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.Rectangle;
|
||||||
import java.awt.event.*;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.InputEvent;
|
||||||
|
import java.awt.event.KeyAdapter;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JTable;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Gui_BoosterDraft class.</p>
|
* <p>Gui_BoosterDraft class.</p>
|
||||||
@@ -169,7 +176,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
|
|||||||
jButtonPick.setBounds(new Rectangle(238, 418, 147, 44));
|
jButtonPick.setBounds(new Rectangle(238, 418, 147, 44));
|
||||||
jButtonPick.setFont(new java.awt.Font("Dialog", 0, 16));
|
jButtonPick.setFont(new java.awt.Font("Dialog", 0, 16));
|
||||||
jButtonPick.setText("Choose Card");
|
jButtonPick.setText("Choose Card");
|
||||||
jButtonPick.addActionListener(new java.awt.event.ActionListener() {
|
jButtonPick.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
jButtonPickClicked(e);
|
jButtonPickClicked(e);
|
||||||
}
|
}
|
||||||
@@ -200,22 +207,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
|
|||||||
if (boosterDraft.hasNextChoice()) {
|
if (boosterDraft.hasNextChoice()) {
|
||||||
showChoices(boosterDraft.nextChoice());
|
showChoices(boosterDraft.nextChoice());
|
||||||
} else {
|
} else {
|
||||||
if (Constant.Runtime.UpldDrft[0]) {
|
boosterDraft.finishedDrafting();
|
||||||
if (BoosterDraft.draftPicks.size() > 1) {
|
|
||||||
ArrayList<String> outDraftData = new ArrayList<String>();
|
|
||||||
|
|
||||||
String[] keys = BoosterDraft.draftPicks.keySet().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
|
|
||||||
|
|
||||||
for (int i = 0; i < keys.length; i++) {
|
|
||||||
outDraftData.add(keys[i] + "|" + BoosterDraft.draftPicks.get(keys[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
FileUtil.writeFile("res/draft/tmpDraftData.txt", outDraftData);
|
|
||||||
|
|
||||||
HttpUtil poster = new HttpUtil();
|
|
||||||
poster.upload("http://cardforge.org/draftAI/submitDraftData.php?fmt=" + BoosterDraft.draftFormat[0], "res/draft/tmpDraftData.txt");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//quit
|
//quit
|
||||||
saveDraft();
|
saveDraft();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import forge.error.BugzReporter;
|
|||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.limited.BoosterDraft_1;
|
import forge.game.limited.BoosterDraft_1;
|
||||||
|
import forge.game.limited.CardPoolLimitation;
|
||||||
import forge.game.limited.SealedDeck;
|
import forge.game.limited.SealedDeck;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.gui.ListChooser;
|
import forge.gui.ListChooser;
|
||||||
@@ -392,15 +393,15 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants.
|
|||||||
Object o = GuiUtils.getChoice(prompt, draftTypes.toArray());
|
Object o = GuiUtils.getChoice(prompt, draftTypes.toArray());
|
||||||
|
|
||||||
if (o.toString().equals(draftTypes.get(0))) {
|
if (o.toString().equals(draftTypes.get(0))) {
|
||||||
draft.showGui(new BoosterDraft_1("Full"));
|
draft.showGui(new BoosterDraft_1(CardPoolLimitation.Full));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (o.toString().equals(draftTypes.get(1))) {
|
else if (o.toString().equals(draftTypes.get(1))) {
|
||||||
draft.showGui(new BoosterDraft_1("Block"));
|
draft.showGui(new BoosterDraft_1(CardPoolLimitation.Block));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (o.toString().equals(draftTypes.get(2))) {
|
else if (o.toString().equals(draftTypes.get(2))) {
|
||||||
draft.showGui(new BoosterDraft_1("Custom"));
|
draft.showGui(new BoosterDraft_1(CardPoolLimitation.Custom));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,4 +72,9 @@ public class BoosterDraftTest implements BoosterDraft {
|
|||||||
public CardList getUnchosenCards() {
|
public CardList getUnchosenCards() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void finishedDrafting() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import org.testng.annotations.Test;
|
|||||||
|
|
||||||
|
|
||||||
import forge.game.limited.BoosterDraft_1;
|
import forge.game.limited.BoosterDraft_1;
|
||||||
|
import forge.game.limited.CardPoolLimitation;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.item.ItemPoolView;
|
import forge.item.ItemPoolView;
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ public class BoosterDraft_1Test {
|
|||||||
*/
|
*/
|
||||||
@Test(groups = {"UnitTest", "fast"}, timeOut = 1000)
|
@Test(groups = {"UnitTest", "fast"}, timeOut = 1000)
|
||||||
public void BoosterDraft_1Test1() throws Exception {
|
public void BoosterDraft_1Test1() throws Exception {
|
||||||
BoosterDraft_1 draft = new BoosterDraft_1();
|
BoosterDraft_1 draft = new BoosterDraft_1(CardPoolLimitation.Full);
|
||||||
while (draft.hasNextChoice()) {
|
while (draft.hasNextChoice()) {
|
||||||
ItemPoolView<CardPrinted> list = draft.nextChoice();
|
ItemPoolView<CardPrinted> list = draft.nextChoice();
|
||||||
System.out.println(list.countAll());
|
System.out.println(list.countAll());
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package forge;
|
|||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.limited.BoosterDraft_1;
|
import forge.game.limited.BoosterDraft_1;
|
||||||
|
import forge.game.limited.CardPoolLimitation;
|
||||||
import forge.gui.deckeditor.DeckEditorDraft;
|
import forge.gui.deckeditor.DeckEditorDraft;
|
||||||
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
@@ -25,7 +26,7 @@ public class GuiBoosterDraftTest {
|
|||||||
Constant.Runtime.HumanDeck[0] = new Deck(GameType.Sealed);
|
Constant.Runtime.HumanDeck[0] = new Deck(GameType.Sealed);
|
||||||
|
|
||||||
DeckEditorDraft g = new DeckEditorDraft();
|
DeckEditorDraft g = new DeckEditorDraft();
|
||||||
g.showGui(new BoosterDraft_1());
|
g.showGui(new BoosterDraft_1(CardPoolLimitation.Full));
|
||||||
Assert.assertNotNull(g);
|
Assert.assertNotNull(g);
|
||||||
g.dispose();
|
g.dispose();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user