Esempio n. 1
0
 private void initializeHand()
 {
     playerHands = new List<CardCollection>();
     dealerHand = new CardCollection(random);
     CardCollection playerHand = new CardCollection(random);
     playerBalance -= playerBetSize;
     playerHand.CashBalance += playerBetSize;
     playerHands.Add(playerHand);
 }
Esempio n. 2
0
 private void initializeGame()
 {
     dealerHand = new CardCollection(random);
     playerHands = new List<CardCollection>();
     playerBalances = new List<double>();
     playerBalances.Add(playerBalance);
     gameDeck = BJUtility.CreateDeck(random);
     gameDeck.Shuffle();
     gameDeck.Shuffle();
     gameDeck.Shuffle();
 }
Esempio n. 3
0
        public static CardCollection CreateDeck(Random random)
        {
            CardCollection cards = new CardCollection(random);

            // populate the deck 8 times
            for (int i = 0; i < 8; i++)
            {
                foreach (CardName cardSuit in Enum.GetValues(typeof(CardSuit)))
                    foreach (CardName cardName in Enum.GetValues(typeof(CardName)))
                        cards.AddCard(new Card((CardName)cardName, (CardSuit)cardSuit));
            }

            return cards;
        }
Esempio n. 4
0
        public static HandOutcome DetermineHandOutcome(CardCollection playerHand, CardCollection dealerHand)
        {
            if (playerHand == null || playerHand.Count() == 0) return HandOutcome.DealerWins;
            if (dealerHand == null || dealerHand.Count() == 0) return HandOutcome.PlayerWins;

            List<int> nonBustedPlayerValues = playerHand.GetValues().Where(v => v <= 21).ToList();
            List<int> nonBustedDealerValues = dealerHand.GetValues().Where(v => v <= 21).ToList();

            // check for player bust
            if (nonBustedPlayerValues.Count() == 0) return HandOutcome.DealerWins;
            // check for dealer bust
            if (nonBustedDealerValues.Count() == 0) return HandOutcome.PlayerWins;

            // get player high value
            int playerValue = nonBustedPlayerValues.Last();
            // get dealer high value
            int dealerValue = nonBustedDealerValues.Last();

            if (dealerValue == playerValue) return HandOutcome.Push;
            else if (dealerValue > playerValue) return HandOutcome.DealerWins;
            else if (dealerValue < playerValue) return HandOutcome.PlayerWins;

            return HandOutcome.Push;
        }
Esempio n. 5
0
        public static PlayerAction DetermineDealerAction(CardCollection dealerHand)
        {
            // if the dealer has no cards, just hit
            if (dealerHand == null || dealerHand.Count() == 0)
                return PlayerAction.Hit;

            // if none of the dealer hand values are below 21, just stand
            if (dealerHand.GetValues().Where(v => v < 21).Count() == 0)
                return PlayerAction.Stand;

            List<int> dealerValues = dealerHand.GetValues();
            int dealerValue = dealerValues[0];

            // if the dealer has only a hard valued hand
            if (dealerHand.GetValues().Where(v => v < 21).Count() == 1)
            {
                // set the dealerValue equal to the one and only available value below 21
                dealerValue = dealerValues[0];

                if (dealerValue < 17)
                    return PlayerAction.Hit;
                else
                    return PlayerAction.Stand;
            }
            // if the dealer has a soft value available
            else
            {
                // set the dealerValue equal to the highest available value below 21
                dealerValue = dealerValues[dealerValues.Where(v => v < 21).Count() - 1];

                if (dealerValue < 17)
                    return PlayerAction.Hit;
                else // In AC, dealer stands on all 17's
                    return PlayerAction.Stand;
            }
        }
Esempio n. 6
0
        public static bool TransferCard(CardCollection from, CardCollection to)
        {
            if (from == null || to == null || from.Count() == 0)
                return false;

            to.AddCard(from.PopCard());

            return true;
        }
Esempio n. 7
0
 public static void PlayPlayerHand(PlayerAction playerAction, CardCollection playerHand, List<CardCollection> playerHands,
     CardCollection dealerHand, CardCollection gameDeck, int splitCount, ref double playerBalance, double playerBetSize)
 {
     if (playerAction == PlayerAction.Hit || (playerHand.Count() > 2 && playerAction == PlayerAction.DoubleOrHit))
     {
         Console.WriteLine("Hit");
         BJUtility.TransferCard(gameDeck, playerHand);
         if (playerHand.ContainsAce() && splitCount == 1 && playerHand.Count() == 2)
             Console.WriteLine("Stand");
         else
             PlayPlayerHand(DeterminePlayerAction(playerHand, dealerHand.PeekCard(), splitCount < 3 ? true : false),
                 playerHand, playerHands, dealerHand, gameDeck, splitCount, ref playerBalance, playerBetSize);
     }
     else if (playerAction == PlayerAction.Split)
     {
         Console.WriteLine("Split");
         if (playerHand.Count() != 2) return;
         CardCollection hand1 = new CardCollection(null);
         CardCollection hand2 = new CardCollection(null);
         hand1.CashBalance = playerHand.CashBalance;
         playerBalance -= playerBetSize;
         hand2.CashBalance += playerBetSize;
         BJUtility.TransferCard(playerHand, hand1);
         BJUtility.TransferCard(playerHand, hand2);
         playerHands.Add(hand1);
         playerHands.Add(hand2);
         playerHands.RemoveAt(playerHands.Count() - 3);
         int newSplitCount = splitCount + 1;
         PlayPlayerHand(
             BJUtility.DeterminePlayerAction(playerHands[playerHands.Count() - 1], dealerHand.PeekCard(), (newSplitCount < 3 && !playerHands[0].ContainsAce()) ? true : false),
             playerHands[playerHands.Count() - 1], playerHands, dealerHand, gameDeck, newSplitCount, ref playerBalance, playerBetSize);
         PlayPlayerHand(
             BJUtility.DeterminePlayerAction(playerHands[playerHands.Count() - 2], dealerHand.PeekCard(), (newSplitCount < 3 && !playerHands[0].ContainsAce()) ? true : false),
             playerHands[playerHands.Count() - 2], playerHands, dealerHand, gameDeck, newSplitCount, ref playerBalance, playerBetSize);
     }
     else if (playerAction == PlayerAction.Stand || (playerHand.Count() > 2 && playerAction == PlayerAction.DoubleOrStand))
     {
         Console.WriteLine("Stand");
     }
     else if ((playerAction == PlayerAction.DoubleOrStand || playerAction == PlayerAction.DoubleOrHit) && playerHand.Count() <= 2)
     {
         Console.WriteLine("Double");
         playerBalance -= playerBetSize;
         playerHand.CashBalance += playerBetSize;
         BJUtility.TransferCard(gameDeck, playerHand);
     }
 }
Esempio n. 8
0
 public static void PlayDealerHand(PlayerAction dealerAction, CardCollection dealerHand, CardCollection gameDeck)
 {
     if (dealerAction == PlayerAction.Hit)
     {
         Console.WriteLine("Hit");
         BJUtility.TransferCard(gameDeck, dealerHand);
         PlayDealerHand(BJUtility.DetermineDealerAction(dealerHand), dealerHand, gameDeck);
     }
     else if (dealerAction == PlayerAction.Stand)
     {
         Console.WriteLine("Stand");
     }
 }
Esempio n. 9
0
        public static PlayerAction DeterminePlayerAction(CardCollection playerHand, Card dealerCard, bool canSplit)
        {
            // if the player has no cards, just hit
            if (playerHand == null || playerHand.Count() == 0)
                return PlayerAction.Hit;

            // if none of the player hand values are below 21, just stand
            if (playerHand.GetValues().Where(v => v < 21).Count() == 0 || playerHand.GetValues().Contains(21))
                return PlayerAction.Stand;

            List<int> playerValues = playerHand.GetValues();
            int playerValue = playerValues[0];
            int dealerValue = new CardCollection(null, new List<Card>() { dealerCard }).GetValues()[0];

            // if the player hand is a pair
            if (playerHand.IsPair() && canSplit)
            {
                // set the playerValue equal to the value of just one of their cards
                playerValue = new CardCollection(null, new List<Card>() { playerHand.PeekCard() }).GetValues()[0];

                // if the dealer shows an ace
                if (dealerCard.IsAce())
                {
                    if (playerValue <= 7) return PlayerAction.Hit;
                    if (playerValue == 8 || playerHand.ContainsAce()) return PlayerAction.Split;
                    return PlayerAction.Stand;
                }
                // if the dealer shows hard value (no ace)
                if (playerValue <= 3 && dealerValue <= 7) return PlayerAction.Split;
                if (playerValue <= 3 && dealerValue >= 8) return PlayerAction.Hit;
                if (playerValue == 4 && (dealerValue == 5 || dealerValue == 6)) return PlayerAction.Split;
                if (playerValue == 4 && (dealerValue <= 4 || dealerValue >= 7)) return PlayerAction.Hit;
                if (playerValue == 5 && dealerValue <= 9) return PlayerAction.DoubleOrHit;
                if (playerValue == 5 && dealerValue == 10) return PlayerAction.Hit;
                if (playerValue == 6 && dealerValue <= 6) return PlayerAction.Split;
                if (playerValue == 6 && dealerValue >= 7) return PlayerAction.Hit;
                if (playerValue == 7 && dealerValue <= 7) return PlayerAction.Split;
                if (playerValue == 7 && dealerValue >= 8) return PlayerAction.Hit;
                if (playerValue == 8) return PlayerAction.Split;
                if (playerValue == 9 && (dealerValue == 7 || dealerValue == 10)) return PlayerAction.Stand;
                if (playerValue == 9 && (dealerValue <= 6 || dealerValue == 8 || dealerValue == 9)) return PlayerAction.Split;
                if (playerValue == 10) return PlayerAction.Stand;
                if (playerHand.ContainsAce()) return PlayerAction.Split;
            }
            // if the player has only a hard valued hand
            else if (playerValues.Where(v => v < 21).Count() == 1)
            {
                // set the playerValue equal to the one and only available value below 21
                playerValue = playerValues[0];

                // if the dealer shows an ace
                if (dealerCard.IsAce())
                {
                    if ((playerValue >= 5 && playerValue <= 10) || (playerValue >= 12 && playerValue <= 16)) return PlayerAction.Hit;
                    if (playerValue == 11) return PlayerAction.DoubleOrHit;
                    if (playerValue >= 17) return PlayerAction.Stand;
                }
                // if the dealer shows hard value (no ace)
                if (playerValue <= 8) return PlayerAction.Hit;
                if (playerValue == 9 && (dealerValue == 2 || dealerValue >= 7)) return PlayerAction.Hit;
                if (playerValue == 9 && (dealerValue >= 3 && dealerValue <= 6)) return PlayerAction.DoubleOrHit;
                if (playerValue == 10 && dealerValue <= 9) return PlayerAction.DoubleOrHit;
                if (playerValue == 10 && dealerValue == 10) return PlayerAction.Hit;
                if (playerValue == 11) return PlayerAction.DoubleOrHit;
                if (playerValue == 12 && (dealerValue == 2 || dealerValue == 3 || dealerValue >= 7)) return PlayerAction.Hit;
                if (playerValue == 12 && (dealerValue >= 4 && dealerValue <= 6)) return PlayerAction.Stand;
                if (playerValue >= 13 && playerValue <= 16 && dealerValue >= 2 && dealerValue <= 6) return PlayerAction.Stand;
                if (playerValue >= 13 && playerValue <= 16 && dealerValue >= 7) return PlayerAction.Hit;
            }
            // if the player has a soft value available
            else
            {
                // set the playerValue equal to the highest available value below 21
                playerValue = playerValues[playerValues.Where(v => v < 21).Count() - 1];

                if (dealerCard.IsAce())
                {
                    if (playerValue <= 18) return PlayerAction.Hit;
                    if (playerValue >= 19) return PlayerAction.Stand;
                }

                if (playerValue == 11) return PlayerAction.DoubleOrHit;
                if ((playerValue == 13 || playerValue == 14) && (dealerValue == 5 || dealerValue == 6)) return PlayerAction.DoubleOrHit;
                if ((playerValue == 13 || playerValue == 14) && !(dealerValue == 5 || dealerValue == 6)) return PlayerAction.Hit;
                if ((playerValue == 15 || playerValue == 16) && (dealerValue >= 4 && dealerValue <= 6)) return PlayerAction.DoubleOrHit;
                if ((playerValue == 15 || playerValue == 16) && !(dealerValue >= 4 && dealerValue <= 6)) return PlayerAction.Hit;
                if (playerValue == 17 && (dealerValue == 2 || dealerValue >= 7)) return PlayerAction.Hit;
                if (playerValue == 17 && (dealerValue >= 3 && dealerValue <= 6)) return PlayerAction.DoubleOrHit;
                if (playerValue == 18 && dealerValue <= 6) return PlayerAction.DoubleOrStand;
                if (playerValue == 18 && (dealerValue == 7 || dealerValue == 8)) return PlayerAction.Stand;
                if (playerValue == 18 && dealerValue >= 9) return PlayerAction.Hit;
                if (playerValue == 19 && dealerValue == 6) return PlayerAction.DoubleOrStand;
                if (playerValue == 19 && dealerValue != 6) return PlayerAction.Stand;
                if (playerValue == 20) return PlayerAction.Stand;
            }

            return PlayerAction.Stand;
        }