/// <summary> /// Initialize Deck, deal the player and dealer hands, and display them. /// </summary> static void InitializeHands() { deck.Initialize(); player.Hand = deck.DealHand(); Dealer.HiddenCards = deck.DealHand(); Dealer.RevealedCards = new List <Card>(); // If hand contains two aces, make one Hard. if (player.Hand[0].Face == Face.Ace && player.Hand[1].Face == Face.Ace) { player.Hand[1].Value = 1; } if (Dealer.HiddenCards[0].Face == Face.Ace && Dealer.HiddenCards[1].Face == Face.Ace) { Dealer.HiddenCards[1].Value = 1; } Dealer.RevealCard(); player.WriteHand(); Dealer.WriteHand(); }
/// <summary> /// Handles everything for the round. /// </summary> static void StartRound() { Console.Clear(); if (!TakeBet()) { EndRound(RoundResult.INVALID_BET); return; } Console.Clear(); InitializeHands(); TakeActions(); Dealer.RevealCard(); Console.Clear(); player.WriteHand(); Dealer.WriteHand(); player.HandsCompleted++; if (player.Hand.Count == 0) { EndRound(RoundResult.SURRENDER); return; } else if (player.GetHandValue() > 21) { EndRound(RoundResult.PLAYER_BUST); return; } while (Dealer.GetHandValue() <= 16) { Thread.Sleep(1000); Dealer.RevealedCards.Add(deck.DrawCard()); Console.Clear(); player.WriteHand(); Dealer.WriteHand(); } if (player.GetHandValue() > Dealer.GetHandValue()) { player.Wins++; if (Casino.IsHandBlackjack(player.Hand)) { EndRound(RoundResult.PLAYER_BLACKJACK); } else { EndRound(RoundResult.PLAYER_WIN); } } else if (Dealer.GetHandValue() > 21) { player.Wins++; EndRound(RoundResult.PLAYER_WIN); } else if (Dealer.GetHandValue() > player.GetHandValue()) { EndRound(RoundResult.DEALER_WIN); } else { EndRound(RoundResult.PUSH); } }
/// <summary> /// Ask user for action and perform that action until they stay, double, or bust. /// </summary> static void TakeActions() { string action; do { Console.Clear(); player.WriteHand(); Dealer.WriteHand(); Console.Write("Enter Action (? for help): "); Console.ForegroundColor = ConsoleColor.Cyan; action = Console.ReadLine(); Casino.ResetColor(); switch (action.ToUpper()) { case "HIT": player.Hand.Add(deck.DrawCard()); break; case "STAY": break; case "SURRENDER": player.Hand.Clear(); break; case "DOUBLE": if (player.Chips <= player.Bet) { player.AddBet(player.Chips); } else { player.AddBet(player.Bet); } player.Hand.Add(deck.DrawCard()); break; default: Console.WriteLine("Valid Moves:"); Console.WriteLine("Hit, Stay, Surrender, Double"); Console.WriteLine("Press any key to continue."); Console.ReadKey(); break; } if (player.GetHandValue() > 21) { foreach (Card card in player.Hand) { if (card.Value == 11) // Only a soft ace can have a value of 11 { card.Value = 1; break; } } } } while (!action.ToUpper().Equals("STAY") && !action.ToUpper().Equals("DOUBLE") && !action.ToUpper().Equals("SURRENDER") && player.GetHandValue() <= 21); }