Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package hexplategolemformat;
- import java.util.Arrays.*;
- import java.util.Random;
- public class HexplateGolemFormat {
- public static void main(String[] args) {
- //Note: 1-drop means Fierce Empath!!!
- //Note: 2-drop means Hexplate Golem!!!
- //Note: Bolt means Kessig Wolf Run!!!
- //Note: land means Gruul Turf!!!
- Deck deck=new Deck();
- boolean[][][][][][] KeepOpeningHand = new boolean[8][8][8][8][8][8];
- boolean TakeTimeToFindOptimalMulliganStrategy = false;
- if (TakeTimeToFindOptimalMulliganStrategy==false) {KeepOpeningHand=GiveLooseMulliganStrategy();}
- int NumberOfSimulationsPerDeck=2000;
- double FastestTurn=50;
- double KillTurn;
- int OptimalOneDrops=0;
- int OptimalTwoDrops=0;
- int OptimalThreeDrops=0;
- int OptimalBolts=0;
- int OptimalLands=0;
- for (int TripleOneDropCount=0; TripleOneDropCount<=10; TripleOneDropCount++){
- for (int TripleTwoDropCount=0; TripleTwoDropCount<=3; TripleTwoDropCount++){
- for (int TripleThreeDropCount=0; TripleThreeDropCount<=0; TripleThreeDropCount++){
- for (int TripleBoltCount=0; TripleBoltCount<=10; TripleBoltCount++){
- int TripleLandCount=20-TripleOneDropCount-TripleTwoDropCount-TripleThreeDropCount-TripleBoltCount;
- if (TripleLandCount>=0 && TripleLandCount<=10) {
- deck.SetDeck(3*TripleOneDropCount,3*TripleTwoDropCount,3*TripleThreeDropCount,3*TripleBoltCount,3*TripleLandCount);
- deck.PrintDeckBrief();
- KillTurn=AverageKillTurnForRandomHand(deck,7,KeepOpeningHand,NumberOfSimulationsPerDeck);
- System.out.println(" "+KillTurn);
- if (KillTurn<FastestTurn){
- FastestTurn=KillTurn;
- OptimalOneDrops=3*TripleOneDropCount;
- OptimalTwoDrops=3*TripleTwoDropCount;
- OptimalThreeDrops=3*TripleThreeDropCount;
- OptimalBolts=3*TripleBoltCount;
- OptimalLands=3*TripleLandCount;
- }
- }
- }
- }
- }
- }
- System.out.println("----------------");
- System.out.print("The optimal deck after the grid-enumeration at a small number of simulations per deck was:");
- deck.SetDeck(OptimalOneDrops,OptimalTwoDrops,OptimalThreeDrops,OptimalBolts,OptimalLands);
- deck.PrintDeckBrief();
- System.out.println();
- System.out.println("----------------");
- NumberOfSimulationsPerDeck=10000;
- int NewOptimalOneDrops=0;
- int NewOptimalTwoDrops=0;
- int NewOptimalThreeDrops=0;
- int NewOptimalBolts=0;
- int NewOptimalLands=0;
- boolean ContinueLocalSearch=true;
- do {
- FastestTurn=50;
- for (int OneDropCount=Math.max(0,OptimalOneDrops-3); OneDropCount<=Math.min(60,OptimalOneDrops+3); OneDropCount++){
- for (int TwoDropCount=Math.max(0,OptimalTwoDrops-3); TwoDropCount<=Math.min(60,OptimalTwoDrops+3); TwoDropCount++){
- for (int ThreeDropCount=0; ThreeDropCount<=0; ThreeDropCount++){
- for (int BoltCount=Math.max(0,OptimalBolts-3); BoltCount<=Math.min(60,OptimalBolts+3); BoltCount++){
- int LandCount=60-OneDropCount-TwoDropCount-ThreeDropCount-BoltCount;
- if (LandCount>=Math.max(0,OptimalLands-3) && LandCount<=Math.min(60,OptimalLands+3)) {
- deck.SetDeck(OneDropCount,TwoDropCount,ThreeDropCount,BoltCount,LandCount);
- deck.PrintDeckBrief();
- KillTurn=AverageKillTurnForRandomHand(deck,7,KeepOpeningHand,NumberOfSimulationsPerDeck);
- System.out.println(" "+KillTurn);
- if (KillTurn<FastestTurn){
- FastestTurn=KillTurn;
- NewOptimalOneDrops=OneDropCount;
- NewOptimalTwoDrops=TwoDropCount;
- NewOptimalThreeDrops=ThreeDropCount;
- NewOptimalBolts=BoltCount;
- NewOptimalLands=LandCount;
- }
- }
- }
- }
- }
- }
- if (Math.abs(NewOptimalOneDrops-OptimalOneDrops)+Math.abs(NewOptimalTwoDrops-OptimalTwoDrops)+Math.abs(NewOptimalThreeDrops-OptimalThreeDrops)+Math.abs(NewOptimalBolts-OptimalBolts)+Math.abs(NewOptimalLands-OptimalLands)<=2) {ContinueLocalSearch=false;}
- OptimalOneDrops=NewOptimalOneDrops;
- OptimalTwoDrops=NewOptimalTwoDrops;
- OptimalThreeDrops=NewOptimalThreeDrops;
- OptimalBolts=NewOptimalBolts;
- OptimalLands=NewOptimalLands;
- System.out.println("----------------");
- System.out.print("The optimal deck after the local search was:");
- deck.SetDeck(OptimalOneDrops,OptimalTwoDrops,OptimalThreeDrops,OptimalBolts,OptimalLands);
- deck.PrintDeckBrief();
- System.out.println();
- System.out.println("----------------");
- } while (ContinueLocalSearch);
- TakeTimeToFindOptimalMulliganStrategy=true;
- NumberOfSimulationsPerDeck=50000;
- FastestTurn=50;
- ContinueLocalSearch=true;
- do {
- for (int OneDropCount=Math.max(0,OptimalOneDrops-2); OneDropCount<=Math.min(60,OptimalOneDrops+2); OneDropCount++){
- for (int TwoDropCount=Math.max(0,OptimalTwoDrops-2); TwoDropCount<=Math.min(60,OptimalTwoDrops+2); TwoDropCount++){
- for (int ThreeDropCount=0; ThreeDropCount<=0; ThreeDropCount++){
- for (int BoltCount=Math.max(0,OptimalBolts-2); BoltCount<=Math.min(60,OptimalBolts+2); BoltCount++){
- int LandCount=60-OneDropCount-TwoDropCount-ThreeDropCount-BoltCount;
- if (LandCount>=Math.max(0,OptimalLands-2) && LandCount<=Math.min(60,OptimalLands+2)) {
- deck.SetDeck(OneDropCount,TwoDropCount,ThreeDropCount,BoltCount,LandCount);
- deck.PrintDeckBrief();
- if (TakeTimeToFindOptimalMulliganStrategy==true) {KeepOpeningHand=GiveOptimalMulliganStrategy(deck);}
- KillTurn=AverageKillTurnForRandomHand(deck,7,KeepOpeningHand,NumberOfSimulationsPerDeck);
- System.out.println(" "+KillTurn);
- if (KillTurn<FastestTurn){
- FastestTurn=KillTurn;
- NewOptimalOneDrops=OneDropCount;
- NewOptimalTwoDrops=TwoDropCount;
- NewOptimalThreeDrops=ThreeDropCount;
- NewOptimalBolts=BoltCount;
- NewOptimalLands=LandCount;
- }
- }
- }
- }
- }
- }
- if (Math.abs(NewOptimalOneDrops-OptimalOneDrops)+Math.abs(NewOptimalTwoDrops-OptimalTwoDrops)+Math.abs(NewOptimalThreeDrops-OptimalThreeDrops)+Math.abs(NewOptimalBolts-OptimalBolts)+Math.abs(NewOptimalLands-OptimalLands)==0) {ContinueLocalSearch=false;}
- OptimalOneDrops=NewOptimalOneDrops;
- OptimalTwoDrops=NewOptimalTwoDrops;
- OptimalThreeDrops=NewOptimalThreeDrops;
- OptimalBolts=NewOptimalBolts;
- OptimalLands=NewOptimalLands;
- System.out.println("----------------");
- System.out.print("The final optimal deck:");
- deck.SetDeck(OptimalOneDrops,OptimalTwoDrops,OptimalThreeDrops,OptimalBolts,OptimalLands);
- deck.PrintDeckBrief();
- System.out.println();
- System.out.println("----------------");
- } while (ContinueLocalSearch);
- }//end of main
- public static boolean[][][][][][] GiveOptimalMulliganStrategy(Deck deck) {
- boolean[][][][][][] KeepOpeningHand = new boolean[8][8][8][8][8][8];
- OpeningHand openinghand=new OpeningHand();
- int NumberOfSimulationsPerOpeningHandSize=1000;
- int OriginalNr1Cost=deck.NumberOf1Cost;
- int OriginalNr2Cost=deck.NumberOf2Cost;
- int OriginalNr3Cost=deck.NumberOf3Cost;
- int OriginalNrBolts=deck.NumberOfBolts;
- int OriginalNrLands=deck.NumberOfLands;
- double CutOffTurn = AverageKillTurnForRandomHand(deck,1,KeepOpeningHand,NumberOfSimulationsPerOpeningHandSize);
- for (int StartingCards=2; StartingCards<=7; StartingCards++){
- System.out.print(".");
- for (int OneDropCount=0; OneDropCount<=OriginalNr1Cost && OneDropCount<=StartingCards; OneDropCount++){
- for (int TwoDropCount=0; TwoDropCount<=OriginalNr2Cost && TwoDropCount+OneDropCount<=StartingCards; TwoDropCount++){
- for (int ThreeDropCount=0; ThreeDropCount<=OriginalNr3Cost && ThreeDropCount+TwoDropCount+OneDropCount<=StartingCards; ThreeDropCount++){
- for (int BoltCount=0; BoltCount<=OriginalNrBolts && BoltCount+ThreeDropCount+TwoDropCount+OneDropCount<=StartingCards; BoltCount++){
- int LandCount=StartingCards-OneDropCount-TwoDropCount-ThreeDropCount-BoltCount;
- if (LandCount<=OriginalNrLands){
- openinghand.SetHand(OneDropCount, TwoDropCount, ThreeDropCount, BoltCount, LandCount);
- deck.SetDeck(OriginalNr1Cost,OriginalNr2Cost,OriginalNr3Cost,OriginalNrBolts,OriginalNrLands);
- double AvgKillTurn=AverageKillTurnForSpecificHand(deck,openinghand);
- if (AvgKillTurn<=CutOffTurn) { KeepOpeningHand[StartingCards][OneDropCount][TwoDropCount][ThreeDropCount][BoltCount][LandCount]=true;}
- if (AvgKillTurn>CutOffTurn) { KeepOpeningHand[StartingCards][OneDropCount][TwoDropCount][ThreeDropCount][BoltCount][LandCount]=false;}
- }
- }
- }
- }
- }
- deck.SetDeck(OriginalNr1Cost,OriginalNr2Cost,OriginalNr3Cost,OriginalNrBolts,OriginalNrLands);
- if (StartingCards<7) {CutOffTurn=AverageKillTurnForRandomHand(deck,StartingCards,KeepOpeningHand,NumberOfSimulationsPerOpeningHandSize);}
- }
- return KeepOpeningHand;
- }
- public static boolean[][][][][][] GiveLooseMulliganStrategy() {
- boolean[][][][][][] KeepOpeningHand = new boolean[8][8][8][8][8][8];
- for (int StartingCards=2; StartingCards<=7; StartingCards++){
- for (int OneDropCount=0; OneDropCount<=StartingCards; OneDropCount++){
- for (int TwoDropCount=0; TwoDropCount+OneDropCount<=StartingCards; TwoDropCount++){
- for (int ThreeDropCount=0; ThreeDropCount+TwoDropCount+OneDropCount<=StartingCards; ThreeDropCount++){
- for (int BoltCount=0; BoltCount+ThreeDropCount+TwoDropCount+OneDropCount<=StartingCards; BoltCount++){
- int LandCount=StartingCards-OneDropCount-TwoDropCount-ThreeDropCount-BoltCount;
- KeepOpeningHand[StartingCards][OneDropCount][TwoDropCount][ThreeDropCount][BoltCount][LandCount]=false;
- if (LandCount>=1 && BoltCount>=1) {KeepOpeningHand[StartingCards][OneDropCount][TwoDropCount][ThreeDropCount][BoltCount][LandCount]=true;}
- }
- }
- }
- }
- }
- return KeepOpeningHand;
- }
- public static double AverageKillTurnForSpecificHand(Deck deck, OpeningHand openinghand){
- int NumberOfIterations=200;
- Deck remainingdeck=new Deck();
- double AverageKillTurn=0;
- for (int IterationCounter=1; IterationCounter<=NumberOfIterations; IterationCounter++){
- remainingdeck.SetDeck(deck.NumberOf1Cost-openinghand.NumberOf1Cost,deck.NumberOf2Cost-openinghand.NumberOf2Cost,deck.NumberOf3Cost-openinghand.NumberOf3Cost,deck.NumberOfBolts-openinghand.NumberOfBolts,deck.NumberOfLands-openinghand.NumberOfLands);
- AverageKillTurn=AverageKillTurn+TurnKill(remainingdeck,openinghand);
- }
- return (AverageKillTurn/(NumberOfIterations+0.0));
- }//end of AverageKillTurnForSpecificHand
- public static double AverageKillTurnForRandomHand(Deck deck, int StartingCards, boolean[][][][][][] KeepOpeningHand, int NumberOfIterations){
- Deck remainingdeck=new Deck();
- double AverageKillTurn=0;
- for (int IterationCounter=1; IterationCounter<=NumberOfIterations; IterationCounter++){
- OpeningHand openinghand=GiveOpeningHandAfterMulls(deck, StartingCards, KeepOpeningHand);
- remainingdeck.SetDeck(deck.NumberOf1Cost-openinghand.NumberOf1Cost,deck.NumberOf2Cost-openinghand.NumberOf2Cost,deck.NumberOf3Cost-openinghand.NumberOf3Cost,deck.NumberOfBolts-openinghand.NumberOfBolts,deck.NumberOfLands-openinghand.NumberOfLands);
- AverageKillTurn=AverageKillTurn+TurnKill(remainingdeck,openinghand);
- if ( IterationCounter % 200000 == 0) {System.out.print(".");}
- }
- return AverageKillTurn/(NumberOfIterations+0.0);
- }//end of AverageKillTurnForRandomHand
- static OpeningHand GiveOpeningHandAfterMulls (Deck deck, int StartingCards, boolean[][][][][][] KeepOpeningHand) {
- Deck remainingdeck=new Deck();
- OpeningHand openinghand=new OpeningHand();
- int TypeOfCardDrawn;
- boolean KeepHand=false;
- for (int OpeningHandSize=7; OpeningHandSize>=1; OpeningHandSize--){
- if (KeepHand==false && StartingCards>=OpeningHandSize){
- openinghand.ResetHand();
- remainingdeck.SetDeck(deck.NumberOf1Cost,deck.NumberOf2Cost,deck.NumberOf3Cost,deck.NumberOfBolts,deck.NumberOfLands);
- for (int CardsDrawn=0; CardsDrawn<OpeningHandSize; CardsDrawn++){
- TypeOfCardDrawn=remainingdeck.DrawCard();
- if (TypeOfCardDrawn==1) {openinghand.NumberOf1Cost++;}
- if (TypeOfCardDrawn==2) {openinghand.NumberOf2Cost++;}
- if (TypeOfCardDrawn==3) {openinghand.NumberOf3Cost++;}
- if (TypeOfCardDrawn==4) {openinghand.NumberOfBolts++;}
- if (TypeOfCardDrawn==5) {openinghand.NumberOfLands++;}
- }
- KeepHand=true;
- if (OpeningHandSize>1) {
- if (KeepOpeningHand[OpeningHandSize][openinghand.NumberOf1Cost][openinghand.NumberOf2Cost][openinghand.NumberOf3Cost][openinghand.NumberOfBolts][openinghand.NumberOfLands]==false) {KeepHand=false;}
- }
- }
- }
- return openinghand;
- }//end of GiveOpeningHandAfterMulls
- static int TurnKill(Deck remainingdeck, OpeningHand openinghand) {
- int EmpathPower=1;
- int HexplatePower=5;
- int Turn=0;
- int OppLife=20;
- int ManaLeft;
- int TurfsLeft;
- int TypeOfCardDrawn;
- int EmpathsInPlay=0;
- int HexplatesInPlay=0;
- int WolfRunsInPlay=0;
- int TurfsInPlay=0;
- int TotalPower;
- int TotalPump;
- boolean LandPlayed;
- int EmpathsInHand=openinghand.NumberOf1Cost;
- int HexplatesInHand=openinghand.NumberOf2Cost;
- int WolfRunsInHand=openinghand.NumberOfBolts;
- int TurfsInHand=openinghand.NumberOfLands;
- do {
- Turn++;
- if (Turn>1) {
- TypeOfCardDrawn=remainingdeck.DrawCard();
- if (TypeOfCardDrawn==1) {EmpathsInHand++;}
- if (TypeOfCardDrawn==2) {HexplatesInHand++;}
- if (TypeOfCardDrawn==4) {WolfRunsInHand++;}
- if (TypeOfCardDrawn==5) {TurfsInHand++;}
- }
- LandPlayed=false;
- //Start by attacking with all creatures; we can pump later
- TotalPower=EmpathsInPlay*EmpathPower+HexplatesInPlay*HexplatePower;
- OppLife=OppLife-TotalPower;
- //Play a Wolf Run if we already have a Turf
- if (WolfRunsInHand>=1 && TurfsInPlay>=1) {
- WolfRunsInPlay++; WolfRunsInHand--;
- LandPlayed=true;
- }
- //Check to see if pumping all-in is lethal
- TotalPump=0;
- if (WolfRunsInPlay>=1 && TurfsInPlay>=1 && TotalPower>=1) {
- TotalPump=TotalPump+(WolfRunsInPlay-1)+(TurfsInPlay*2-2);
- }
- if (TotalPump>=OppLife) {OppLife=OppLife-TotalPump;}
- //If we already won, then whatever. Otherwise, check to see if we can play a Hexplate Golem
- ManaLeft=WolfRunsInPlay+TurfsInPlay*2;
- if (ManaLeft>=7 && HexplatesInHand>=1) {
- HexplatesInHand--;
- HexplatesInPlay++;
- ManaLeft=ManaLeft-7;
- }
- //Otherwise, on turns 3-5, check to see if we can play a Fierce Empath
- TurfsLeft=TurfsInPlay;
- if (ManaLeft>=3 && ManaLeft<=5 && TurfsLeft>=1 && EmpathsInHand>=1) {
- EmpathsInHand--;
- EmpathsInPlay++;
- ManaLeft=ManaLeft-3;
- TurfsLeft--;
- if (remainingdeck.NumberOf2Cost>=1) {
- remainingdeck.NumberOf2Cost--;
- HexplatesInHand++;
- }
- }
- //On turns 6+, if we don't already have an Empth, then cast one
- if (ManaLeft>=6 && EmpathsInPlay==0 && EmpathsInHand>=1) {
- EmpathsInHand=EmpathsInHand--;
- EmpathsInPlay++;
- ManaLeft=ManaLeft-3;
- TurfsLeft--;
- if (remainingdeck.NumberOf2Cost>=1) {
- remainingdeck.NumberOf2Cost--;
- HexplatesInHand++;
- }
- }
- //If we have six mana left and can cast two Empaths, then do so (otherwise, spend mana to pump)
- if (ManaLeft==6 && TurfsLeft>=2 && EmpathsInHand>=2) {
- EmpathsInHand=EmpathsInHand--;
- EmpathsInPlay++;
- ManaLeft=ManaLeft-3;
- TurfsLeft--;
- if (remainingdeck.NumberOf2Cost>=1) {
- remainingdeck.NumberOf2Cost--;
- HexplatesInHand++;
- }
- EmpathsInHand=EmpathsInHand--;
- EmpathsInPlay++;
- ManaLeft=ManaLeft-3;
- TurfsLeft--;
- if (remainingdeck.NumberOf2Cost>=1) {
- remainingdeck.NumberOf2Cost--;
- HexplatesInHand++;
- }
- }
- //Pump remaining mana into Wolf Run
- if (WolfRunsInPlay>=1 && TurfsLeft>=1 && TotalPower>=1 && ManaLeft>=4) {
- TotalPump=ManaLeft-3;
- OppLife=OppLife-TotalPump;
- }
- //Play a Gruul Turf if possible
- if (TurfsInHand>=1 && WolfRunsInPlay>=1 && !LandPlayed) {
- TurfsInPlay++;
- TurfsInHand--;
- WolfRunsInPlay--;
- WolfRunsInHand++;
- LandPlayed=true;
- }
- //Otherwise, play a Kessig Wolf Run if possible
- if (WolfRunsInHand>=1 && !LandPlayed) {
- WolfRunsInPlay++;
- WolfRunsInHand--;
- LandPlayed=true;
- }
- //System.out.println("At the end of Turn "+Turn+" with the opponent at "+OppLife+" life, the situation is as follows:");
- // System.out.println("Hand: "+EmpathsInHand+ " Empaths, "+HexplatesInHand+" Hexplates, "+TurfsInHand+" Turfs, "+WolfRunsInHand+" Wolf Runs");
- // System.out.println("Board: "+EmpathsInPlay+ " Empaths, "+HexplatesInPlay+" Hexplates, "+TurfsInPlay+" Turfs, and "+WolfRunsInPlay+" Wolf Runs.");
- } while (OppLife>0 &&Turn<=50);
- return Turn;
- }//end of TurnKill
- }//end of OptimalAggroGoldfishDeck
- class OpeningHand {
- int NumberOf1Cost;
- int NumberOf2Cost;
- int NumberOf3Cost;
- int NumberOfBolts;
- int NumberOfLands;
- void ResetHand(){
- NumberOf1Cost=0;
- NumberOf2Cost=0;
- NumberOf3Cost=0;
- NumberOfBolts=0;
- NumberOfLands=0;
- }
- void SetHand (int Nr1Cost, int Nr2Cost, int Nr3Cost, int NrBolts, int NrLands) {
- NumberOf1Cost=Nr1Cost;
- NumberOf2Cost=Nr2Cost;
- NumberOf3Cost=Nr3Cost;
- NumberOfBolts=NrBolts;
- NumberOfLands=NrLands;
- }
- }//end of OpeningHand
- class Deck {
- int NumberOf1Cost;
- int NumberOf2Cost;
- int NumberOf3Cost;
- int NumberOfBolts;
- int NumberOfLands;
- void PrintDeckBrief () {
- if(NumberOf1Cost<10) {System.out.print("0");}
- System.out.print(NumberOf1Cost+" ");
- if(NumberOf2Cost<10) {System.out.print("0");}
- System.out.print(NumberOf2Cost+" ");
- if(NumberOf3Cost<10) {System.out.print("0");}
- System.out.print(NumberOf3Cost+" ");
- if(NumberOfBolts<10) {System.out.print("0");}
- System.out.print(NumberOfBolts+" ");
- if(NumberOfLands<10) {System.out.print("0");}
- System.out.print(NumberOfLands);
- System.out.print(" ");
- }
- void SetDeck (int Nr1Cost, int Nr2Cost, int Nr3Cost, int NrBolts, int NrLands) {
- NumberOf1Cost=Nr1Cost;
- NumberOf2Cost=Nr2Cost;
- NumberOf3Cost=Nr3Cost;
- NumberOfBolts=NrBolts;
- NumberOfLands=NrLands;
- }
- int NrOfCards(){
- return NumberOf1Cost+NumberOf2Cost+NumberOf3Cost+NumberOfBolts+NumberOfLands;
- }
- int DrawCard (){
- Random generator = new Random();
- int RandomIntegerBetweenOneAndDeckSize=generator.nextInt( this.NrOfCards() )+1;
- int CardType=0;
- int OneCostCutoff=NumberOf1Cost;
- int TwoCostCutoff=OneCostCutoff+NumberOf2Cost;
- int ThreeCostCutoff=TwoCostCutoff+NumberOf3Cost;
- int BoltCutoff=ThreeCostCutoff+NumberOfBolts;
- int LandCutoff=BoltCutoff+NumberOfLands;
- if (RandomIntegerBetweenOneAndDeckSize<=OneCostCutoff) {CardType=1; this.NumberOf1Cost--;}
- if (RandomIntegerBetweenOneAndDeckSize>OneCostCutoff && RandomIntegerBetweenOneAndDeckSize<=TwoCostCutoff) {CardType=2; this.NumberOf2Cost--;}
- if (RandomIntegerBetweenOneAndDeckSize>TwoCostCutoff && RandomIntegerBetweenOneAndDeckSize<=ThreeCostCutoff) {CardType=3; this.NumberOf3Cost--;}
- if (RandomIntegerBetweenOneAndDeckSize>ThreeCostCutoff && RandomIntegerBetweenOneAndDeckSize<=BoltCutoff) {CardType=4; this.NumberOfBolts--;}
- if (RandomIntegerBetweenOneAndDeckSize>BoltCutoff && RandomIntegerBetweenOneAndDeckSize<=LandCutoff) {CardType=5; this.NumberOfLands--;}
- return CardType;
- }
- }//end of Deck
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement