public override void Play()
        {
            Dealer = new TwentyOneDealer();

            //Set up Players
            foreach (Player player in Players)
            {
                player.Hand = new List <Card>();
                player.Stay = false;
            }

            //Set up Dealer
            Dealer.Hand = new List <Card>();
            Dealer.Stay = false;
            Dealer.Deck = new Deck();
            Dealer.Deck.Shuffle();



            //Place Bet
            foreach (Player player in Players)
            {
                bool validAnswer = false;
                int  bet         = 0;
                while (!validAnswer)
                {
                    Console.Write("Place your Bet!");
                    validAnswer = int.TryParse(Console.ReadLine(), out bet);
                    if (!validAnswer)
                    {
                        Console.WriteLine("please enter digits only, no decimals.");
                    }
                }
                if (bet < 0)
                {
                    throw new FraudException();
                }

                bool successfullybet = player.Bet(bet);
                if (!successfullybet)
                {
                    return;
                }
                Bets[player] = bet;
            }

            // Shuffle


            //  Deal Round
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Dealing...");
                foreach (Player player in Players)
                {
                    Console.Write("{0} ", player.Name);
                    Dealer.Deal(player.Hand);
                    if (i == 1)
                    {
                        bool blackJack = TwentyOneRules.CheckForBlackJack(player.Hand);
                        if (blackJack)
                        {
                            Console.WriteLine("Blackjack! {0} wins {1}", player.Name, Bets[player]);
                            player.Balance += Convert.ToInt32((Bets[player] * 1.5) + Bets[player]);
                            return;
                        }
                    }
                }
                Console.WriteLine("Dealer");
                Dealer.Deal(Dealer.Hand);
                if (i == 1)
                {
                    bool blackJack = TwentyOneRules.CheckForBlackJack(Dealer.Hand);
                    if (blackJack)
                    {
                        Console.WriteLine("Dealer has BlackJack! Everyone loses!");
                        foreach (KeyValuePair <Player, int> entry in Bets)
                        {
                            Dealer.Balance -= entry.Value;
                        }
                    }
                }
            }
            foreach (Player player in Players)
            {
                while (!player.Stay)
                {
                    Console.WriteLine("Your cards are: ");
                    foreach (Card card in player.Hand)
                    {
                        Console.Write("{0}-", card.ToString());
                    }
                    Console.WriteLine("\n\nHit or stay? ");
                    string answer = Console.ReadLine().ToLower();
                    if (answer == "stay")
                    {
                        player.Stay = true;
                        break;
                    }
                    else if (answer == "hit")
                    {
                        Dealer.Deal(player.Hand);
                    }
                    bool busted = TwentyOneRules.isBusted(player.Hand);
                    if (busted)
                    {
                        Dealer.Balance += Bets[player];
                        Console.WriteLine("{0} Busted! You lose your bet of {1}. Your balance is now {2}.", player.Name, Bets[player], player.Balance);
                        Console.WriteLine("Do you want to play again?");
                        answer = Console.ReadLine().ToLower();
                        if (answer == "yes" || answer == "yeah")
                        {
                            player.isActivelyPlaying = true;
                        }
                        else
                        {
                            player.isActivelyPlaying = false;
                        }
                    }
                }
            }
            Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
            Dealer.Stay     = TwentyOneRules.shouldDealerStay(Dealer.Hand);
            while (!Dealer.Stay && !Dealer.isBusted)
            {
                Console.WriteLine("dealer is hitting..");
                Dealer.Deal(Dealer.Hand);
                Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
                Dealer.Stay     = TwentyOneRules.shouldDealerStay(Dealer.Hand);
            }
            if (Dealer.Stay)
            {
                Console.WriteLine("Dealer is staying.");
            }
            if (Dealer.isBusted)
            {
                Console.WriteLine("Dealer Busted!");
                foreach (KeyValuePair <Player, int> entry in Bets)
                {
                    Console.WriteLine("{0} won {1}!", entry.Key.Name, entry.Value);
                    Players.Where(x => x.Name == entry.Key.Name).First().Balance += (entry.Value * 2);
                }
                return;
            }
            foreach (Player player in Players)
            {
                bool?playerWon = TwentyOneRules.CompareHands(player.Hand, Dealer.Hand);
                if (playerWon == null)
                {
                    Console.WriteLine("Push! No one wins.");
                    player.Balance += Bets[player];
                }
                else if (playerWon == true)
                {
                    Console.WriteLine("{0} won {1}!", player.Name, Bets[player]);
                    player.Balance += (Bets[player] * 2);
                    Dealer.Balance -= Bets[player];
                }
                else
                {
                    Console.WriteLine("Dealer wins {0}!", Bets[player]);
                    Dealer.Balance += Bets[player];
                }
                Console.WriteLine("Play again?");
                string answer = Console.ReadLine().ToLower();
                if (answer == "yes" || answer == "yeah")
                {
                    player.isActivelyPlaying = true;
                }
                else
                {
                    player.isActivelyPlaying = false;
                }
                return;
            }
        }
        public override void Play()
        {
            Dealer = new TwentyOneDealer();
            foreach (Player player in Players)
            {
                player.Hand = new List <Card>();
                player.Stay = false;
            }
            Dealer.Hand = new List <Card>();
            Dealer.Stay = false;
            Dealer.Deck = new Deck();
            Console.WriteLine("Place your bet!");

            foreach (Player player in Players)
            {
                int  bet             = Convert.ToInt32(Console.ReadLine());
                bool successfullyBet = player.Bet(bet);
                if (!successfullyBet)
                {
                    return;
                }
                Bets[player] = bet;
            }
            for (int i = 0; 1 < 2; i++)
            {
                Console.WriteLine("Dealing....");
                foreach (Player player in Players)
                {
                    Console.Write("{0}: ", player.Name);
                    Dealer.Deal(player.Hand);
                    if (i == 1)
                    {
                        bool blackJack = TwentyOneRules.CheckForBlackJack(player.Hand);
                        if (blackJack)
                        {
                            Console.WriteLine("Blackjack! {0} wins {1}", player.Name, Bets[player]);
                            player.Balance += Convert.ToInt32((Bets[player] * 1.5) + Bets[player]);
                            Bets.Remove(player);
                            return;
                        }
                    }
                }
                Console.Write("Dealer: ");
                Dealer.Deal(Dealer.Hand);
                if (i == 1)
                {
                    bool blackJack = TwentyOneRules.CheckForBlackJack(Dealer.Hand);
                    if (blackJack)
                    {
                        Console.WriteLine("Dealer has BlackJack! Everyone loses!");
                        foreach (KeyValuePair <Player, int> entry in Bets)
                        {
                            Dealer.Balance += entry.Value;
                        }
                    }
                }
                foreach (Player player in Players)
                {
                    while (!player.Stay)
                    {
                        Console.WriteLine("Your cards are: ");
                        foreach (Card card in player.Hand)
                        {
                            Console.Write("{0} ", card.ToString());
                        }
                        Console.WriteLine("\nHit or stay?\n");
                        string answer = Console.ReadLine().ToLower();
                        if (answer == "stay")
                        {
                            player.Stay = true;
                            break;
                        }
                        else if (answer == "hit")
                        {
                            Dealer.Deal(player.Hand);
                        }
                        bool busted = TwentyOneRules.isBusted(player.Hand);
                        if (busted)
                        {
                            Dealer.Balance += Bets[player];
                            Console.WriteLine("{0} Busted! You lose bet of {1}. Your balance is now  {2}.", player.Name, Bets[player], player.Balance);
                            Console.WriteLine("Do you want to play again?");
                            answer = Console.ReadLine().ToLower();
                            if (answer == "yes" || answer == "yeah")
                            {
                                player.isActivelyPlaying = true;
                            }
                        }
                    }
                }
                Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
                Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand);
                while (!Dealer.Stay && !Dealer.isBusted)
                {
                    Console.WriteLine("Dealer is hitting...");
                    Dealer.Deal(Dealer.Hand);
                    Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
                    Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand);
                }
                if (Dealer.Stay)
                {
                    Console.WriteLine("Dealer is staying.");
                }
                if (Dealer.isBusted)
                {
                    Console.WriteLine("Dealer Busted!");
                    foreach (KeyValuePair <Player, int> entry in Bets)
                    {
                        Console.WriteLine("{0} won {1}!", entry.Key.Name, entry.Value);
                        Players.Where(x => x.Name == entry.Key.Name).First().Balance += (entry.Value * 2);
                        Dealer.Balance -= entry.Value;
                    }
                    return;
                }
                foreach (Player player in Players)
                {
                    bool?playerWon = TwentyOneRules.CompareHands(player.Hand, Dealer.Hand);
                    if (playerWon == null)
                    {
                        Console.WriteLine("Push! No one wins.");
                        player.Balance += Bets[player];
                        Bets.Remove(player);
                    }
                    else if (playerWon == true)
                    {
                        Console.WriteLine("{0} won {1}!", player.Name, Bets[player]);
                        player.Balance += (Bets[player] * 2);
                        Dealer.Balance -= Bets[player];
                    }
                    else
                    {
                        Console.WriteLine("Dealer wins {0}!", Bets[player]);
                        Dealer.Balance += Bets[player];
                    }

                    Console.WriteLine("Play again?");
                    string answer = Console.ReadLine().ToLower();
                    if (answer == "yes" || answer == "yeah")
                    {
                        player.isActivelyPlaying = true;
                    }
                    else
                    {
                        player.isActivelyPlaying = false;
                    }
                }
            }
        }
 //Implementing the abstract method "play" from the Game class.
 public override void Play()
 {
     Dealer = new TwentyOneDealer();
     foreach (Player player in Players)
     {
         player.Hand = new List <Card>();
         player.Stay = false;
     }
     Dealer.Hand = new List <Card>();
     Dealer.Stay = false;
     Dealer.Deck = new Deck();
     Dealer.Deck.Shuffle(3);
     Console.WriteLine("\nThe game is 21 and you have a balance of {0}.", Players.First().Balance);
     foreach (Player player in Players)
     {
         bool validAnswer = false;
         int  bet         = 0;
         while (!validAnswer)
         {
             Console.WriteLine("Please place your bets!");
             validAnswer = int.TryParse(Console.ReadLine(), out bet);
             if (!validAnswer)
             {
                 Console.WriteLine("Please enter digits only, no decimals.");
             }
         }
         if (bet <= 0)
         {
             throw new FraudException("Security! Remove this person immediately for attempting to defraud this casino!");
         }
         bool successfullyBet = player.Bet(bet);
         if (!successfullyBet)
         {
             return;
         }
         Bets[player] = bet;
     }
     for (int i = 0; i < 2; i++)
     {
         Console.WriteLine("\nDealing...");
         foreach (Player player in Players)
         {
             Console.Write("{0}: ", player.Name);
             Dealer.Deal(player.Hand);
             if (i == 1)
             {
                 bool blackJack = TwentyOneRules.CheckForBlackJack(player.Hand);
                 if (blackJack)
                 {
                     //Error with this balance
                     //Now this balance works
                     player.Balance += Convert.ToInt32((Bets[player] * 1.5) + Bets[player]);
                     Console.WriteLine("BlackJack! {0} wins {1}. Your balance is {2}.", player.Name, Bets[player], player.Balance);
                     return;
                 }
             }
         }
         Console.Write("Dealer: ");
         Dealer.Deal(Dealer.Hand);
         if (i == 1)
         {
             bool blackJack = TwentyOneRules.CheckForBlackJack(Dealer.Hand);
             if (blackJack)
             {
                 foreach (KeyValuePair <Player, int> entry in Bets)
                 {
                     Dealer.Balance += entry.Value;
                 }
                 Console.WriteLine("Dealer has BlackJack! Everyone loses. Your balance is {0}", Players.First().Balance);
                 return;
             }
         }
     }
     foreach (Player player in Players)
     {
         while (!player.Stay)
         {
             Console.WriteLine("\nYour cards are: ");
             foreach (Card card in player.Hand)
             {
                 Console.WriteLine("{0}. ", card.ToString());
             }
             foreach (int handPossibilities in TwentyOneRules.GetAllPossibleHandValues(player.Hand))
             {
                 Console.WriteLine("\nYour hand's value is: {0}", handPossibilities);
             }
             foreach (int handPossibilities in TwentyOneRules.GetAllPossibleHandValues(Dealer.Hand))
             {
                 Console.WriteLine("The dealer's hand is worth: {0}", handPossibilities);
             }
             Console.WriteLine("\nHit or stay?");
             string answer = Console.ReadLine().ToLower();
             if (answer == "stay")
             {
                 player.Stay = true;
                 break;
             }
             else if (answer == "hit")
             {
                 Dealer.Deal(player.Hand);
             }
             else
             {
                 Console.WriteLine("\nI didn't understand. Do you want to hit or stay?");
             }
             bool busted = TwentyOneRules.isBusted(player.Hand);
             if (busted)
             {
                 Dealer.Balance += Bets[player];
                 Console.WriteLine("\n{0} busted! You lost your bet of {1}. Your balance is now {2}.", player.Name, Bets[player], player.Balance);
                 Console.WriteLine("Do you want to play again?");
                 answer = Console.ReadLine().ToLower();
                 if (answer == "yes" || answer == "ok" || answer == "okay" || answer == "sure" || answer == "yeah" || answer == "y" || answer == "yep" || answer == "yup" || answer == "ya")
                 {
                     player.isActivelyPlaying = true;
                     return;
                 }
                 else
                 {
                     player.isActivelyPlaying = false;
                     return;
                 }
             }
         }
     }
     Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
     Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand);
     while (!Dealer.Stay && !Dealer.isBusted)
     {
         Console.WriteLine("\nDealer is hitting...");
         Dealer.Deal(Dealer.Hand);
         Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
         Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand);
     }
     if (Dealer.Stay)
     {
         Console.WriteLine("\nDealer is staying.");
         foreach (int handPossibilities in TwentyOneRules.GetAllPossibleHandValues(Dealer.Hand))
         {
             Console.WriteLine("The dealer's hand is worth: {0}", handPossibilities);
         }
     }
     if (Dealer.isBusted)
     {
         Console.WriteLine("Dealer busted!");
         foreach (KeyValuePair <Player, int> entry in Bets)
         {
             Dealer.Balance -= entry.Value;
             Players.Where(x => x.Name == entry.Key.Name).First().Balance += (entry.Value * 2);
             Console.WriteLine("{0} won {1}! Your balance is {2}", entry.Key.Name, entry.Value, Players.First().Balance);
         }
         return;
     }
     foreach (Player player in Players)
     {
         bool?playerWon = TwentyOneRules.CompareHands(player.Hand, Dealer.Hand);
         if (playerWon == null)
         {
             Console.WriteLine("Push! No one wins. Your balance is {0}", player.Balance);
             player.Balance = +Bets[player];
             Bets.Remove(player);
         }
         else if (playerWon == true)
         {
             player.Balance += (Bets[player] * 2);
             Dealer.Balance -= Bets[player];
             Console.WriteLine("{0} won {1}! Your balance is {2}", player.Name, Bets[player], player.Balance);
         }
         else
         {
             Dealer.Balance += Bets[player];
             Console.WriteLine("I'm sorry, dealer wins {0}! Your balance is {1}", Bets[player], player.Balance);
         }
         Console.WriteLine("Play again?");
         string answer = Console.ReadLine().ToLower();
         if (answer == "yes" || answer == "ok" || answer == "okay" || answer == "sure" || answer == "yeah" || answer == "y" || answer == "yep" || answer == "yup" || answer == "ya")
         {
             player.isActivelyPlaying = true;
         }
         else
         {
             player.isActivelyPlaying = false;
         }
     }
 }
Example #4
0
        public override void Play() //use the override keyword which says we will use this abstract method that
        {                           //was inherited from the parent class Game
            Dealer = new TwentyOneDealer();
            foreach (Player player in Players)
            {
                player.Hand = new List <Card>();
                player.Stay = false;
            }
            Dealer.Hand = new List <Card>();
            Dealer.Stay = false;
            Dealer.Deck = new Deck(); //here we refreshed everyones hands
            Dealer.Deck.Shuffle();

            foreach (Player player in Players) // for each player, make them bet
            {
                bool validAnswer = false;
                int  bet         = 0;
                while (!validAnswer)
                {
                    Console.WriteLine("Place your bet!");
                    //tryparse will convert the readline string to an integer and return it as var bank. If it succeeds valid answer is true if nto its false.
                    validAnswer = int.TryParse(Console.ReadLine(), out bet);
                    if (!validAnswer)
                    {
                        Console.WriteLine("Please enter digits only, no decimals.");
                    }
                }
                if (bet < 0)
                {
                    throw new FraudException();         //if they enter a neg number it is cheating. call this exception
                }
                bool successfullyBet = player.Bet(bet); //passing in our bet value to the Bet function
                if (!successfullyBet)
                {
                    return;         //if player dosent have enough for their bet the return brings them back to having to place a bet
                }
                Bets[player] = bet; //adding to the bets dictionary thats in the Game class
            }
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine("Dealing...");
                foreach (Player player in Players)
                {
                    Console.Write("{0}: ", player.Name);
                    Dealer.Deal(player.Hand);
                    if (i == 1)
                    {
                        bool blackJack = TwentyOneRules.CheckForBlackJack(player.Hand); //check if player got black jack
                        if (blackJack)
                        {
                            Console.WriteLine("BlackJack! {0} wins {1}", player.Name, Bets[player]);
                            player.Balance += Convert.ToInt32((Bets[player] * 1.5) + Bets[player]); // if they do pay them 1.5x of their bet
                            return;
                        }
                    }
                }
                Console.Write("Dealer: ");
                Dealer.Deal(Dealer.Hand);
                if (i == 1)
                {
                    bool blackJack = TwentyOneRules.CheckForBlackJack(Dealer.Hand);
                    if (blackJack)
                    {
                        Console.WriteLine("Dealer has BlackJack! Everyone loses!");
                        foreach (KeyValuePair <Player, int> entry in Bets)
                        {
                            Dealer.Balance += entry.Value;
                        }
                        return;
                    }
                }
            }
            foreach (Player player in Players)
            {
                while (!player.Stay)
                {
                    Console.WriteLine("Your cards are...");
                    foreach (Card card in player.Hand)
                    {
                        Console.WriteLine("{0} ", card.ToString());
                    }
                    Console.WriteLine("\n\nHit or Stay?");
                    string answer = Console.ReadLine().ToLower();
                    if (answer == "stay")
                    {
                        player.Stay = true;
                        break;
                    }
                    else if (answer == "hit")
                    {
                        Dealer.Deal(player.Hand);
                    }
                    bool busted = TwentyOneRules.isBusted(player.Hand);
                    if (busted)
                    {
                        Dealer.Balance += Bets[player]; //if you bust dealer gets your bet
                        Console.WriteLine("{0} Busted! You lose you bet of {1}. Your balance is now {2}.", player.Name, Bets[player], player.Balance);
                        Console.WriteLine("Do you want to play again?");
                        answer = Console.ReadLine().ToLower();
                        if (answer == "yes" || answer == "yea" || answer == "yeah" || answer == "yep")
                        {
                            player.IsActivelyPlaying = true;
                            return;
                        }
                        else
                        {
                            player.IsActivelyPlaying = false;
                            return;
                        }
                    }
                }
            }
            Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);
            Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand);
            while (!Dealer.Stay && !Dealer.isBusted) //dealer hits
            {
                Console.WriteLine("Deal is hitting...");
                Dealer.Deal(Dealer.Hand);                                       //add a card to dealers hand
                Dealer.isBusted = TwentyOneRules.isBusted(Dealer.Hand);         //check if dealer busted
                Dealer.Stay     = TwentyOneRules.ShouldDealerStay(Dealer.Hand); //check is dealer stayed (one of these has to be true)
            }
            if (Dealer.Stay)
            {
                Console.WriteLine("Dealer is Staying....");
            }
            if (Dealer.isBusted) // dealer lost so all players win
            {
                Console.WriteLine("Dealer Busted!");
                foreach (KeyValuePair <Player, int> entry in Bets)                                     //for each winner
                {
                    Console.WriteLine("{0} won {1}!", entry.Key.Name, entry.Value);                    //write a winners name ot the console
                    Players.Where(x => x.Name == entry.Key.Name).First().Balance += (entry.Value * 2); //If they won find them in our dictionary and add their winnings to balance
                    Dealer.Balance -= entry.Value;                                                     //subtract bets from dealers balance
                }
            }
            foreach (Player player in Players)                                          //comparing players hands to dealers to see who wins
            {
                bool?playerWon = TwentyOneRules.CompareHands(player.Hand, Dealer.Hand); //the ? makes it so that the bool value can be null, that way it can have 3 values
                if (playerWon == null)                                                  //if theres a tie
                {
                    Console.WriteLine("Push! No one wins.");
                    player.Balance += Bets[player];
                }
                else if (playerWon == true) //if player wins
                {
                    Console.WriteLine("{0} wins {1}!", player.Name, Bets[player]);
                    player.Balance += (Bets[player] * 2);
                    Dealer.Balance -= Bets[player];
                }
                else // if dealer wins
                {
                    Console.WriteLine("Dealer wins {0}!", Bets[player]);
                    Dealer.Balance += Bets[player];
                }
                Console.WriteLine("Play again?");
                string answer2 = Console.ReadLine().ToLower();
                if (answer2 == "yes" || answer2 == "yea" || answer2 == "yeah" || answer2 == "yep")
                {
                    player.IsActivelyPlaying = true;
                }
                else
                {
                    player.IsActivelyPlaying = false;
                }
            }
        }