Advertisement
Guest User

How probable is a Thought-Knot Seer on turn 2?

a guest
Feb 27th, 2016
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.56 KB | None | 0 0
  1. package transgressthemind;
  2.  
  3. import java.util.Arrays.*;
  4. import java.util.Random;
  5.  
  6. public class TransgressTheMind {
  7.  
  8.     public static void main(String[] args) {
  9.        
  10.         Deck deck=new Deck();
  11.  
  12.         //CardType 1 is a Thought-Knot Seer
  13.         //CardType 2 is a Temple
  14.         //CardType 3 is a Eye
  15.         //CardType 4-6 are other (irrelevant) cards
  16.        
  17.         deck.SetDeck(4,4,4,48,0,0);
  18.         double Probability;
  19.        
  20.         Probability=ProbabilityForRandomHand(deck,7,10000000);
  21.         System.out.println(Probability);
  22.                
  23.     }//end of main
  24.  
  25.     public static double ProbabilityForRandomHand(Deck deck, int StartingCards, int NumberOfIterations){
  26.         Deck remainingdeck=new Deck();
  27.         int NumberOfGamesWithfavorableOutcome=0;
  28.         for (int IterationCounter=1; IterationCounter<=NumberOfIterations; IterationCounter++){
  29.             OpeningHand openinghand=GiveOpeningHandAfterMulls(deck, StartingCards);
  30.             remainingdeck.SetDeck(deck.NumberOfCardType1-openinghand.NumberOfCardType1,deck.NumberOfCardType2-openinghand.NumberOfCardType2,deck.NumberOfCardType3-openinghand.NumberOfCardType3,deck.NumberOfCardType4-openinghand.NumberOfCardType4,deck.NumberOfCardType5-openinghand.NumberOfCardType5,deck.NumberOfCardType6-openinghand.NumberOfCardType6);
  31.             int Outcome=SimulateGame(remainingdeck,openinghand);
  32.             if (Outcome==0) {NumberOfGamesWithfavorableOutcome++;}
  33.         }
  34.         return NumberOfGamesWithfavorableOutcome/(NumberOfIterations+0.0);
  35.     }//end of AverageKillTurnForRandomHand
  36.    
  37.     static OpeningHand GiveOpeningHandAfterMulls (Deck deck, int StartingCards) {
  38.        
  39.         Deck remainingdeck=new Deck();
  40.         OpeningHand openinghand=new OpeningHand();
  41.         int TypeOfCardDrawn;
  42.         boolean KeepHand=false;
  43.        
  44.         for (int OpeningHandSize=7; OpeningHandSize>=1; OpeningHandSize--){
  45.             if (KeepHand==false){
  46.                 int AncientTomb=0;
  47.                 openinghand.SetHand(0,0,0,0,0,0);
  48.                 remainingdeck.SetDeck(deck.NumberOfCardType1,deck.NumberOfCardType2,deck.NumberOfCardType3,deck.NumberOfCardType4,deck.NumberOfCardType5,deck.NumberOfCardType6);
  49.                 for (int CardsDrawn=0; CardsDrawn<OpeningHandSize; CardsDrawn++){
  50.                     TypeOfCardDrawn=remainingdeck.DrawCard();
  51.                     if (TypeOfCardDrawn==1) {openinghand.NumberOfCardType1++;}
  52.                     if (TypeOfCardDrawn==2) {openinghand.NumberOfCardType2++; AncientTomb++;}
  53.                     if (TypeOfCardDrawn==3) {openinghand.NumberOfCardType3++; AncientTomb++;}
  54.                     if (TypeOfCardDrawn==4) {openinghand.NumberOfCardType4++;}
  55.                 }
  56.                 if (AncientTomb>=1) {KeepHand=true;}
  57.             }
  58.         }
  59.        
  60.         return openinghand;
  61.     }//end of GiveOpeningHandAfterMulls
  62.    
  63.    
  64.     static int SimulateGame(Deck remainingdeck, OpeningHand openinghand) {
  65.        
  66.         //Initializing
  67.         int TypeOfCardDrawn=0;
  68.         int Outcome=2;
  69.  
  70.         //CardType 1 is a Thought-Knot Seer
  71.         //CardType 2 is a Temple
  72.         //CardType 3 is a Eye
  73.         //CardType 4-6 are other (irrelevant) cards
  74.        
  75.         int SeerInHand=openinghand.NumberOfCardType1;
  76.         int TempleInHand=openinghand.NumberOfCardType2;
  77.         int EyeInHand=openinghand.NumberOfCardType3;
  78.        
  79.         //We draw a card at the beginning of our second turn
  80.         TypeOfCardDrawn=remainingdeck.DrawCard();
  81.         if (TypeOfCardDrawn==1) {SeerInHand++;}
  82.         if (TypeOfCardDrawn==2) {TempleInHand++;}
  83.         if (TypeOfCardDrawn==3) {EyeInHand++;}
  84.  
  85.         boolean EnoughMana=false;
  86.         if (TempleInHand>=2) {EnoughMana=true;}
  87.         if (TempleInHand>=1 && EyeInHand>=1) {EnoughMana=true;}
  88.        
  89.         if (SeerInHand>=1 && EnoughMana) {Outcome=0;}
  90.            
  91.        
  92.         return Outcome;
  93.        
  94.     }//end of SimulateGame
  95.    
  96. }
  97.  
  98. class OpeningHand {
  99.     int NumberOfCardType1;
  100.     int NumberOfCardType2;
  101.     int NumberOfCardType3;
  102.     int NumberOfCardType4;
  103.     int NumberOfCardType5;
  104.     int NumberOfCardType6;
  105.    
  106.  
  107.     int NrOfCards(){
  108.         return NumberOfCardType1+NumberOfCardType2+NumberOfCardType3+NumberOfCardType4+NumberOfCardType5+NumberOfCardType6;
  109.     }
  110.  
  111.     void SetHand (int Nr1, int Nr2, int Nr3, int Nr4, int Nr5, int Nr6) {
  112.         NumberOfCardType1=Nr1;
  113.         NumberOfCardType2=Nr2;
  114.         NumberOfCardType3=Nr3;
  115.         NumberOfCardType4=Nr4;
  116.         NumberOfCardType5=Nr5;
  117.         NumberOfCardType6=Nr6;
  118.     }
  119.  
  120. }//end of OpeningHand
  121.  
  122. class Deck {
  123.     int NumberOfCardType1;
  124.     int NumberOfCardType2;
  125.     int NumberOfCardType3;
  126.     int NumberOfCardType4;
  127.     int NumberOfCardType5;
  128.     int NumberOfCardType6;
  129.    
  130.     void SetDeck (int Nr1, int Nr2, int Nr3, int Nr4, int Nr5, int Nr6) {
  131.         NumberOfCardType1=Nr1;
  132.         NumberOfCardType2=Nr2;
  133.         NumberOfCardType3=Nr3;
  134.         NumberOfCardType4=Nr4;
  135.         NumberOfCardType5=Nr5;
  136.         NumberOfCardType6=Nr6;
  137.     }
  138.    
  139.     int NrOfCards(){
  140.         return NumberOfCardType1+NumberOfCardType2+NumberOfCardType3+NumberOfCardType4+NumberOfCardType5+NumberOfCardType6;
  141.     }
  142.    
  143.     int DrawCard (){
  144.         Random generator = new Random();
  145.         int CardType=0;
  146.         int RandomIntegerBetweenOneAndDeckSize=generator.nextInt( this.NrOfCards() )+1;
  147.         int OneCutoff=NumberOfCardType1;
  148.         int TwoCutoff=OneCutoff+NumberOfCardType2;
  149.         int ThreeCutoff=TwoCutoff+NumberOfCardType3;
  150.         int FourCutoff=ThreeCutoff+NumberOfCardType4;
  151.         int FiveCutoff=FourCutoff+NumberOfCardType5;
  152.         int SixCutoff=FiveCutoff+NumberOfCardType6;
  153.        
  154.  
  155.         if (RandomIntegerBetweenOneAndDeckSize<=OneCutoff) {CardType=1; this.NumberOfCardType1--;}
  156.         if (RandomIntegerBetweenOneAndDeckSize>OneCutoff && RandomIntegerBetweenOneAndDeckSize<=TwoCutoff) {CardType=2; this.NumberOfCardType2--;}
  157.         if (RandomIntegerBetweenOneAndDeckSize>TwoCutoff && RandomIntegerBetweenOneAndDeckSize<=ThreeCutoff) {CardType=3; this.NumberOfCardType3--;}
  158.         if (RandomIntegerBetweenOneAndDeckSize>ThreeCutoff && RandomIntegerBetweenOneAndDeckSize<=FourCutoff) {CardType=4; this.NumberOfCardType4--;}
  159.         if (RandomIntegerBetweenOneAndDeckSize>FourCutoff && RandomIntegerBetweenOneAndDeckSize<=FiveCutoff) {CardType=5; this.NumberOfCardType5--;}
  160.         if (RandomIntegerBetweenOneAndDeckSize>FiveCutoff && RandomIntegerBetweenOneAndDeckSize<=SixCutoff) {CardType=6; this.NumberOfCardType6--;}
  161.        
  162.         return CardType;
  163.     }
  164.    
  165. }//end of Deck
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement