Beispiel #1
0
        /// <summary>
        /// Write player's hand to console.
        /// </summary>
        public void WriteHand()
        {
            // Write Bet, Chip, Win, Amount with color, and write Round #
            Console.Write("Bet: ");
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.Write(Bet + "  ");
            Casino.ResetColor();
            Console.Write("Chips: ");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write(Chips + "  ");
            Casino.ResetColor();
            Console.Write("Wins: ");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(Wins);
            Casino.ResetColor();
            Console.WriteLine("Round #" + HandsCompleted);

            Console.WriteLine();
            Console.WriteLine("Your Hand (" + GetHandValue() + "):");
            foreach (Card card in Hand)
            {
                card.WriteDescription();
            }
            Console.WriteLine();
        }
Beispiel #2
0
        /// <summary>
        /// Take player's bet
        /// </summary>
        /// <returns>Was the bet valid</returns>
        static bool TakeBet()
        {
            Console.Write("Current Chip Count: ");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(player.Chips);
            Casino.ResetColor();

            Console.Write("Minimum Bet: ");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(Casino.MinimumBet);
            Casino.ResetColor();

            Console.Write("Enter bet to begin hand " + player.HandsCompleted + ": ");
            Console.ForegroundColor = ConsoleColor.Magenta;
            string s = Console.ReadLine();

            Casino.ResetColor();

            if (Int32.TryParse(s, out int bet) && bet >= Casino.MinimumBet && player.Chips >= bet)
            {
                player.AddBet(bet);
                return(true);
            }
            return(false);
        }
Beispiel #3
0
        /// <summary>
        /// Print out the description of the card, marking Aces as Soft or Hard.
        /// </summary>
        public void WriteDescription()
        {
            if (Suit == Suit.Diamonds || Suit == Suit.Hearts)
            {
                Console.ForegroundColor = ConsoleColor.Red;
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.White;
            }

            if (Face == Ace)
            {
                if (Value == 11)
                {
                    Console.WriteLine(Symbol + " Soft " + Face + " of " + Suit);
                }
                else
                {
                    Console.WriteLine(Symbol + " Hard " + Face + " of " + Suit);
                }
            }
            else
            {
                Console.WriteLine(Symbol + " " + Face + " of " + Suit);
            }
            Casino.ResetColor();
        }
Beispiel #4
0
        // Perform action based on result of round and starts next round
        /// <param name="result">The result of the round</param>
        static void EndRound(RoundResult result)
        {
            switch (result)
            {
            case RoundResult.PUSH:
                Casino.ColorReset();
                player.ReturnBet();
                WriteLine("Player and Dealer Push.");
                break;

            case RoundResult.PLAYER_WIN:
                Casino.ColorReset();
                WriteLine("Player Wins " + player.WinBet(false) + " chips");
                break;

            case RoundResult.PLAYER_BUST:
                Casino.ColorReset();
                player.ClearBet();
                WriteLine("Player Busts");
                break;

            case RoundResult.PLAYER_BLACKJACK:
                Casino.ColorReset();
                WriteLine("Player Wins " + player.WinBet(true) + " chips with Blackjack.");
                break;

            case RoundResult.DEALER_WIN:
                Casino.ColorReset();
                player.ClearBet();
                WriteLine("Dealer Wins.");
                break;

            case RoundResult.FOLD:
                Casino.ColorReset();
                WriteLine("Player Folds " + (player.Bet / 2) + " chips");
                player.Chips += player.Bet / 2;
                player.ClearBet();
                break;

            case RoundResult.INVALID_BET:
                Casino.ColorReset();
                WriteLine("Invalid Bet.");
                break;
            }

            if (player.Chips <= 0)
            {
                WriteLine();
                WriteLine("You ran out of Chips after " + (player.HandsCompleted - 1) + " rounds.");
                WriteLine("500 Chips will be added and your statistics have been reset.");

                player = new Player();
            }

            Casino.ColorReset();
            WriteLine("Press any key to continue");
            ReadKey();

            StartRound();
        }
Beispiel #5
0
        static void Main(string[] args)
        {
            // Console cannot render unicode characters without this line
            Console.OutputEncoding = Encoding.UTF8;

            Casino.ResetColor();
            Console.Title = "♠♥♣♦ Blackjack";

            Console.WriteLine("♠♥♣♦ Welcome to Blackjack v" + Casino.GetVersionCode());
            Console.WriteLine("Press any key to play.");
            Console.ReadKey();
            StartRound();
        }
Beispiel #6
0
 /// <summary>
 /// Write Dealer's RevealedCards to Console.
 /// </summary>
 public static void WriteHand()
 {
     Console.WriteLine("Dealer's Hand (" + GetHandValue() + "):");
     foreach (Card card in RevealedCards)
     {
         card.WriteDescription();
     }
     for (int i = 0; i < HiddenCards.Count; i++)
     {
         Console.ForegroundColor = ConsoleColor.DarkRed;
         Console.WriteLine("<hidden>");
         Casino.ResetColor();
     }
     Console.WriteLine();
 }
Beispiel #7
0
        // Take player's bet and checks to see if bet is valid
        static bool TakeBet()
        {
            Write("Current Chip Count: ");
            WriteLine(player.Chips);
            Casino.ColorReset();


            Write("Minimum Bet: ");
            WriteLine(Casino.MinimumBet);
            Casino.ColorReset();

            Write("Enter bet to begin hand " + player.HandsCompleted + ": ");
            string s = ReadLine();

            Casino.ColorReset();

            if (Int32.TryParse(s, out int bet) && bet >= Casino.MinimumBet && player.Chips >= bet)
            {
                player.AddBet(bet);
                return(true);
            }
            return(false);
        }
Beispiel #8
0
        /// <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);
            }
        }
Beispiel #9
0
        /// <summary>
        /// Perform action based on result of round and start next round.
        /// </summary>
        /// <param name="result">The result of the round</param>
        static void EndRound(RoundResult result)
        {
            switch (result)
            {
            case RoundResult.PUSH:
                player.ReturnBet();
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine("Player and Dealer Push.");
                break;

            case RoundResult.PLAYER_WIN:
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Player Wins " + player.WinBet(false) + " chips");
                break;

            case RoundResult.PLAYER_BUST:
                player.ClearBet();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Player Busts");
                break;

            case RoundResult.PLAYER_BLACKJACK:
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("Player Wins " + player.WinBet(true) + " chips with Blackjack.");
                break;

            case RoundResult.DEALER_WIN:
                player.ClearBet();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Dealer Wins.");
                break;

            case RoundResult.SURRENDER:
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Player Surrenders " + (player.Bet / 2) + " chips");
                player.Chips += player.Bet / 2;
                player.ClearBet();
                break;

            case RoundResult.INVALID_BET:
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Invalid Bet.");
                break;
            }

            if (player.Chips <= 0)
            {
                Console.ForegroundColor = ConsoleColor.Red;

                Console.WriteLine();
                Console.WriteLine("You ran out of Chips after " + (player.HandsCompleted - 1) + " rounds.");
                Console.WriteLine("500 Chips will be added and your statistics have been reset.");

                player = new Player();
            }

            Casino.ResetColor();
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
            StartRound();
        }
Beispiel #10
0
        /// <summary>
        /// Ask user for action and perform that action until they stand, 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 "STAND":
                    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, Stand, 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("STAND") && !action.ToUpper().Equals("DOUBLE") &&
                     !action.ToUpper().Equals("SURRENDER") && player.GetHandValue() <= 21);
        }
Beispiel #11
0
        // How we start the game
        static void StartRound()
        {
            Clear();

            if (!TakeBet())
            {
                EndRound(RoundResult.INVALID_BET);
                return;
            }
            Clear();

            StartHands();
            Actions();

            Dealer.ShowCard();

            Clear();
            player.WriteHand();
            Dealer.WriteHand();

            player.HandsCompleted++;

            if (player.Hand.Count == 0)
            {
                EndRound(RoundResult.FOLD);
                return;
            }
            else if (player.GetHandValue() > 21)
            {
                EndRound(RoundResult.PLAYER_BUST);
                return;
            }

            while (Dealer.GetHandValue() <= 16)
            {
                Dealer.RevealedCards.Add(deck.DrawCard());

                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);
            }
        }
Beispiel #12
0
        // Ask user for action and perform that action until they stay, double, or bust
        static void Actions()
        {
            string action;

            do
            {
                Clear();
                player.WriteHand();
                Dealer.WriteHand();

                Write("Enter Action (? for help): ");
                action = ReadLine();
                Casino.ColorReset();


                switch (action.ToUpper())
                {
                case "HIT":
                    player.Hand.Add(deck.DrawCard());
                    break;

                case "STAY":
                    break;

                case "FOLD":
                    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:
                    WriteLine("Valid Moves:");
                    WriteLine("Hit, Stay, Fold, Double");
                    WriteLine("Press any key to continue.");
                    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("FOLD") && player.GetHandValue() <= 21);
        }