Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package collected.company;
- import java.util.Random;
- public class CollectedCompany {
- public static void main(String[] args) {
- Deck deck=new Deck();
- int NrSims=10000000;
- //CardType1=1-cost creature
- //CardType2=2-cost creature
- //CardType3=3-cost creature
- //CardType4=Collected Company
- //CardType5=Other spell
- //CardType6=Land
- double TotalCreatures=0;
- double TotalMana=0;
- double TotalCCs=0;
- double TotalZeroCreatures=0;
- double TotalOneCreature=0;
- double TotalTwoCreatures=0;
- for (int i=1; i<=NrSims; i++){
- deck.SetDeck(9,10,8,4,29,0);
- CollectedCompanyOutcome CCO=Simulate(deck);
- //Here, I condition on drawing at least one CC in the top 10 cards before casting it. I don't check available mana.
- if (CCO.CCDrawnInTop10){
- TotalCreatures=TotalCreatures+CCO.TotalNumberOfCreatures;
- TotalMana=TotalMana+1*CCO.Number1Cost+2*CCO.Number2Cost+3*CCO.Number3Cost;
- TotalCCs++;
- if (CCO.TotalNumberOfCreatures==0) {TotalZeroCreatures++;}
- if (CCO.TotalNumberOfCreatures==1) {TotalOneCreature++;}
- if (CCO.TotalNumberOfCreatures==2) {TotalTwoCreatures++;}
- }
- }
- System.out.println("E[Mana]="+TotalMana/TotalCCs);
- System.out.println("E[Creatures]="+TotalCreatures/TotalCCs);
- System.out.println("P[0 creatures]="+TotalZeroCreatures/TotalCCs);
- System.out.println("P[1 creature]="+TotalOneCreature/TotalCCs);
- System.out.println("P[2 creatures]="+TotalTwoCreatures/TotalCCs);
- }//end of main
- static CollectedCompanyOutcome Simulate(Deck remainingdeck) {
- CollectedCompanyOutcome CCO=new CollectedCompanyOutcome();
- int TypeOfCardDrawn;
- CCO.Number1Cost=0;
- CCO.Number2Cost=0;
- CCO.Number3Cost=0;
- CCO.TotalNumberOfCreatures=0;
- CCO.CCDrawnInTop10=false;
- for (int i=1; i<=10; i++){
- TypeOfCardDrawn=remainingdeck.DrawCard();
- if (TypeOfCardDrawn==4) {CCO.CCDrawnInTop10=true;}
- }
- if (CCO.CCDrawnInTop10){
- for (int i=1; i<=6; i++){
- TypeOfCardDrawn=remainingdeck.DrawCard();
- if (TypeOfCardDrawn==2 && CCO.TotalNumberOfCreatures==2 && CCO.Number1Cost>=1) {CCO.Number2Cost++; CCO.Number1Cost--;}
- boolean CardReplaced=false;
- if (TypeOfCardDrawn==3 && CCO.TotalNumberOfCreatures==2 && CCO.Number1Cost>=1) {CCO.Number3Cost++; CCO.Number1Cost--; CardReplaced=true;}
- if (TypeOfCardDrawn==3 && CCO.TotalNumberOfCreatures==2 && CCO.Number2Cost>=1 && CardReplaced==false) {CCO.Number3Cost++; CCO.Number2Cost--;}
- if (TypeOfCardDrawn==1 && CCO.TotalNumberOfCreatures<2) {CCO.Number1Cost++; CCO.TotalNumberOfCreatures++;}
- if (TypeOfCardDrawn==2 && CCO.TotalNumberOfCreatures<2) {CCO.Number2Cost++; CCO.TotalNumberOfCreatures++;}
- if (TypeOfCardDrawn==3 && CCO.TotalNumberOfCreatures<2) {CCO.Number3Cost++; CCO.TotalNumberOfCreatures++;}
- }
- }
- return CCO;
- }
- static class CollectedCompanyOutcome {
- int Number1Cost;
- int Number2Cost;
- int Number3Cost;
- int TotalNumberOfCreatures;
- boolean CCDrawnInTop10;
- void PrintOutcome() {
- System.out.println("NumberOf1Cost:"+Number1Cost+", NumberOf2Cost:"+Number2Cost+", NumberOf3Cost:"+Number3Cost+", Total:"+TotalNumberOfCreatures);
- }
- }
- static class Deck {
- int NrCardType1;
- int NrCardType2;
- int NrCardType3;
- int NrCardType4;
- int NrCardType5;
- int NrCardType6;
- void PrintDeckBrief () {
- if(NrCardType1<10) {System.out.print("0");}
- System.out.print(NrCardType1+" ");
- if(NrCardType2<10) {System.out.print("0");}
- System.out.print(NrCardType2+" ");
- if(NrCardType3<10) {System.out.print("0");}
- System.out.print(NrCardType3+" ");
- if(NrCardType4<10) {System.out.print("0");}
- System.out.print(NrCardType4+" ");
- if(NrCardType5<10) {System.out.print("0");}
- System.out.print(NrCardType5+" ");
- if(NrCardType6<10) {System.out.print("0");}
- System.out.print(NrCardType6);
- System.out.print(" ");
- }
- void SetDeck (int Nr1, int Nr2, int Nr3, int Nr4, int Nr5, int Nr6) {
- NrCardType1=Nr1;
- NrCardType2=Nr2;
- NrCardType3=Nr3;
- NrCardType4=Nr4;
- NrCardType5=Nr5;
- NrCardType6=Nr6;
- }
- int NrOfCards(){
- return NrCardType1+NrCardType2+NrCardType3+NrCardType4+NrCardType5+NrCardType6;
- }
- int DrawCard (){
- Random generator = new Random();
- int RandomIntegerBetweenOneAndDeckSize=generator.nextInt( this.NrOfCards() )+1;
- int CardType=0;
- int OneCutoff=NrCardType1;
- int TwoCutoff=OneCutoff+NrCardType2;
- int ThreeCutoff=TwoCutoff+NrCardType3;
- int FourCutoff=ThreeCutoff+NrCardType4;
- int FiveCutoff=FourCutoff+NrCardType5;
- int SixCutoff=FiveCutoff+NrCardType6;
- if (RandomIntegerBetweenOneAndDeckSize<=OneCutoff) {CardType=1; this.NrCardType1--;}
- if (RandomIntegerBetweenOneAndDeckSize>OneCutoff && RandomIntegerBetweenOneAndDeckSize<=TwoCutoff) {CardType=2; this.NrCardType2--;}
- if (RandomIntegerBetweenOneAndDeckSize>TwoCutoff && RandomIntegerBetweenOneAndDeckSize<=ThreeCutoff) {CardType=3; this.NrCardType3--;}
- if (RandomIntegerBetweenOneAndDeckSize>ThreeCutoff && RandomIntegerBetweenOneAndDeckSize<=FourCutoff) {CardType=4; this.NrCardType4--;}
- if (RandomIntegerBetweenOneAndDeckSize>FourCutoff && RandomIntegerBetweenOneAndDeckSize<=FiveCutoff) {CardType=5; this.NrCardType5--;}
- if (RandomIntegerBetweenOneAndDeckSize>FiveCutoff) {CardType=6; this.NrCardType6--;}
- return CardType;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement