Exemplo n.º 1
0
        private void StartBlackJackRound()
        {
            this.BlackJackDeck = new Deck(AmountOfDecks);
            this.StartingHandRound();
            Boolean       continueRound          = true;
            List <Player> playerStoppedWithRound = new List <Player>();

            while (continueRound)
            {
                foreach (SimulatedPlayer player in PlayerCollectionCurrentGame.List)
                {
                    if (!player.EndOfRound)
                    {
                        if (player.HandValue < 21 && BlackJackDealer.TotalCardValue < 21)
                        {
                            Boolean doTurn = true;
                            while (doTurn)
                            {
                                if (player.StopScore >= 16 && player.HandValue >= 9 && player.HandValue <= 11 && BlackJackDealer.OpenCardValue < 10 && BlackJackDealer.OpenCardValue > 17)
                                {
                                    player.DoubleDown(this.BlackJackDeck);
                                    doTurn = false;
                                }
                                else if (player.HandValue >= player.StopScore)
                                {
                                    player.Stand();
                                    doTurn = false;
                                }
                                else if (player.HandValue < player.StopScore)
                                {
                                    player.Hit(this.BlackJackDeck);
                                }
                                else
                                {
                                    player.Surrender();
                                    doTurn = false;
                                }
                            }
                        }
                        else
                        {
                            continueRound = false;
                        }
                    }
                    else
                    {
                        playerStoppedWithRound.Add(player);
                    }
                    if (playerStoppedWithRound.Count == PlayerCollectionCurrentGame.List.Count)
                    {
                        break;
                    }
                }
                while (BlackJackDealer.TotalCardValue < 17)
                {
                    BlackJackDealer.SimulateOpenCard(this.BlackJackDeck);
                }
                if (playerStoppedWithRound.Count == PlayerCollectionCurrentGame.List.Count)
                {
                    while (BlackJackDealer.TotalCardValue < 17)
                    {
                        BlackJackDealer.SimulateOpenCard(this.BlackJackDeck);
                    }
                    continueRound = false;
                }
            }
            CheckWinConditions();
        }
Exemplo n.º 2
0
        private void StartBlackJackRound()
        {
            String hitPattern        = "(hit|hi|ht|h)";
            String doubleDownPattern = "(doubledown|doubled|double|down|dbld|dbl|dbd|dld|dd)";
            String standPattern      = "(stand|stnd|std|snd|st|s|no more|stop)";
            String surrenderPattern  = "(surrender|surrenderPattern|concede|sur|srnd|sr)";

            this.BlackJackDeck = new Deck(AmountOfDecks);
            this.StartingHandRound();
            Boolean       continueRound          = true;
            List <Player> playerStoppedWithRound = new List <Player>();

            while (continueRound)
            {
                foreach (Player player in PlayerCollectionCurrentGame.List)
                {
                    if (player.HandValue < 21 && BlackJackDealer.TotalCardValue < 21 && !player.EndOfRound)
                    {
                        while (!player.EndOfRound)
                        {
                            if (player.HandValue > 21)
                            {
                                player.TryChangeAceScore();
                                if (player.HandValue > 21)
                                {
                                    player.EndOfRound = true;
                                }
                            }
                            if (player.HandValue < 21)
                            {
                                Console.WriteLine("{0}, your current hand has a total score of {1}. Hit, Stand, Double-Down or Surrender?", player.UserName, player.HandValue);
                                String playerMove = Console.ReadLine().ToLower();
                                if (Regex.IsMatch(playerMove, hitPattern))
                                {
                                    player.Hit(this.BlackJackDeck);
                                }
                                else if (Regex.IsMatch(playerMove, standPattern))
                                {
                                    player.Stand();
                                    player.EndOfRound = true;
                                }
                                else if (Regex.IsMatch(playerMove, doubleDownPattern) && player.CurrentMoney >= player.CurrentBet && player.HandValue >= 9 && player.HandValue <= 11)
                                {
                                    player.DoubleDown(this.BlackJackDeck);
                                    player.EndOfRound = true;
                                }
                                else if (Regex.IsMatch(playerMove, surrenderPattern))
                                {
                                    player.Surrender();
                                    player.EndOfRound = true;
                                }
                                else
                                {
                                    Console.WriteLine("Please use hit, stand, doubledown or surrender as input.");
                                }
                            }
                            else
                            {
                                player.EndOfRound = true;
                                Console.WriteLine("Your score exceeded the BlackJack limit!");
                            }
                        }
                        playerStoppedWithRound.Add(player);
                    }
                    else
                    {
                        player.EndOfRound = true;
                        playerStoppedWithRound.Add(player);
                    }
                }
                while (BlackJackDealer.TotalCardValue < 17)
                {
                    BlackJackDealer.OpenCard(this.BlackJackDeck);
                }
                if (playerStoppedWithRound.Count == PlayerCollectionCurrentGame.List.Count)
                {
                    while (BlackJackDealer.TotalCardValue < 17)
                    {
                        BlackJackDealer.OpenCard(this.BlackJackDeck);
                    }
                    continueRound = false;
                    break;
                }
            }
            CheckWinConditions();
        }
Exemplo n.º 3
0
        private void CheckWinConditions()
        {
            List <Player> playerStopList = new List <Player>();

            PlayersWithBlackJack    = new PlayerCollection();
            PlayersWithoutBlackJack = new PlayerCollection();
            PlayerCollectionCurrentGame.LinqSort();
            BlackJackDealer.RevealAllCards();
            foreach (Player currentPlayer in PlayerCollectionCurrentGame.List)
            {
                Console.WriteLine("{0} has a Hand value of {1}", currentPlayer.UserName, currentPlayer.HandValue);
                if (currentPlayer.HandValue == 21)
                {
                    PlayersWithBlackJack.AddPlayer(currentPlayer);
                }
                else
                {
                    PlayersWithoutBlackJack.AddPlayer(currentPlayer);
                }
            }
            //This one Works
            if (PlayersWithBlackJack.List.Count == 0 && BlackJackDealer.TotalCardValue == 21)
            {
                foreach (Player currentPlayer in PlayersWithoutBlackJack.List)
                {
                    BlackJackDealer.CollectPlayerBet(currentPlayer);
                }
            }
            else if (PlayersWithBlackJack.List.Count >= 1 && BlackJackDealer.TotalCardValue == 21 && BlackJackDealer.DealerOpenCards.Count == 2)
            {
                PlayerCollection playersWithNatural = new PlayerCollection();
                foreach (Player currentPlayer in PlayersWithBlackJack.List)
                {
                    if (currentPlayer.PlayerCards.Count == 2)
                    {
                        playersWithNatural.AddPlayer(currentPlayer);
                        BlackJackDealer.NaturalBlackJackPayout(currentPlayer);
                    }
                }
                if (playersWithNatural.List.Count == 0)
                {
                    Console.WriteLine("The dealer has a natural blackjack! Everyone loses their bet.");
                }
                else
                {
                    Decimal currentBlackJackPayout = BlackJackDealer.CreateBlackjackPayout(PlayerCollectionCurrentGame);
                    Decimal payoutPerPlayer        = currentBlackJackPayout / playersWithNatural.List.Count;
                    foreach (Player player in playersWithNatural.List)
                    {
                        PlayerCollectionCurrentGame.List.Remove(player);
                        Console.WriteLine("{0}, you have a natural Black Jack! Your share of the payout is {1}!", player.UserName, payoutPerPlayer);
                        BlackJackDealer.PayBlackjackPlayerBet(player, payoutPerPlayer);
                    }
                }
                foreach (Player player in PlayerCollectionCurrentGame.List)
                {
                    BlackJackDealer.CollectPlayerBet(player);
                }
            }
            else if (PlayersWithBlackJack.List.Count == 1)
            {
                Decimal currentBlackJackPayout = BlackJackDealer.CreateBlackjackPayout(PlayersWithoutBlackJack);
                Player  currentPlayer          = PlayersWithBlackJack.List[0];
                String  blackJackPayout        = currentBlackJackPayout.ToString("C", new CultureInfo("en-US"));
                Console.WriteLine("{0}, you have blackjack! You win {1}!", currentPlayer.UserName, blackJackPayout);
                BlackJackDealer.PayBlackjackPlayerBet(currentPlayer, currentBlackJackPayout);
            }
            else if (PlayersWithBlackJack.List.Count > 1 && BlackJackDealer.TotalCardValue != 21)
            {
                Decimal currentBlackJackPayout  = BlackJackDealer.CreateBlackjackPayout(PlayersWithoutBlackJack);
                Decimal moneyPerPlayer          = (currentBlackJackPayout / PlayersWithBlackJack.List.Count);
                String  moneyPerPlayerInDollars = moneyPerPlayer.ToString("C", new CultureInfo("en-US"));
                foreach (Player currentPlayer in PlayersWithBlackJack.List)
                {
                    Console.WriteLine("{0}, you have blackjack! You share {1}!", currentPlayer.UserName, moneyPerPlayerInDollars);
                    BlackJackDealer.PayBlackjackPlayerBet(currentPlayer, moneyPerPlayer);
                }
            }
            else if (PlayersWithBlackJack.List.Count > 1 && BlackJackDealer.TotalCardValue == 21)
            {
                foreach (Player currentPlayer in PlayersWithBlackJack.List)
                {
                    String currentBetInDollars = currentPlayer.CurrentBet.ToString("C", new CultureInfo("en-US"));
                    Console.WriteLine("{0}, you and the dealer have blackjack! You get your bet of {1} back.", currentPlayer.UserName, currentBetInDollars);
                    BlackJackDealer.ReturnPlayerBet(currentPlayer);
                }
                foreach (Player player in PlayersWithoutBlackJack.List)
                {
                    BlackJackDealer.CollectPlayerBet(player);
                }
            }
            else
            {
                //Execute non-blackjack options in Else
                foreach (Player currentPlayer in PlayersWithoutBlackJack.List)
                {
                    String currentBetInDollars = currentPlayer.CurrentBet.ToString("C", new CultureInfo("en-US"));
                    //Check win conditions
                    Console.WriteLine("{0}, you have {1} and the Dealer has {2}", currentPlayer.UserName, currentPlayer.HandValue, BlackJackDealer.TotalCardValue);
                    if (BlackJackDealer.TotalCardValue > 21 && currentPlayer.HandValue < 21)
                    {
                        currentBetInDollars = (currentPlayer.CurrentBet * 2).ToString("C", new CultureInfo("en-US"));
                        Console.WriteLine("The dealer has score that exceeds the blackjack limit! You win {0}", currentBetInDollars);
                        BlackJackDealer.PayPlayerBet(currentPlayer);
                    }
                    else if (BlackJackDealer.TotalCardValue < 21 && BlackJackDealer.TotalCardValue < currentPlayer.HandValue && currentPlayer.HandValue < 21)
                    {
                        currentBetInDollars = (currentPlayer.CurrentBet * 2).ToString("C", new CultureInfo("en-US"));
                        Console.WriteLine("You have a higher score then the dealer! You win {0}", currentBetInDollars);
                        BlackJackDealer.PayPlayerBet(currentPlayer);
                    }
                    else if (BlackJackDealer.TotalCardValue > 21 && currentPlayer.HandValue > 21)
                    {
                        currentBetInDollars = currentPlayer.CurrentBet.ToString("C", new CultureInfo("en-US"));
                        Console.WriteLine("Both you and the dealer have a higher score then 21. You get your bet of {0} back.", currentBetInDollars);
                        BlackJackDealer.ReturnPlayerBet(currentPlayer);
                    }
                    else if (BlackJackDealer.TotalCardValue == currentPlayer.HandValue)
                    {
                        currentBetInDollars = currentPlayer.CurrentBet.ToString("C", new CultureInfo("en-US"));
                        Console.WriteLine("You and the Dealer have similar scores! You get your bet of {0} back.", currentBetInDollars);
                        BlackJackDealer.ReturnPlayerBet(currentPlayer);
                    }
                    else
                    {
                        currentBetInDollars = currentPlayer.CurrentBet.ToString("C", new CultureInfo("en-US"));
                        Console.WriteLine("The Dealer has a higher score then you! You lose {0}", currentBetInDollars);
                        BlackJackDealer.CollectPlayerBet(currentPlayer);
                    }
                    currentPlayer.CurrentBet = 0.00m;
                }
            }
            String casinoEarningsInDollars = BlackJackDealer.CasinoEarnings.ToString("C", new CultureInfo("en-US"));

            Console.WriteLine("The casino currently has {0}", casinoEarningsInDollars);
            foreach (Player currentPlayer in PlayerCollectionCurrentGame.List)
            {
                Console.WriteLine("{0}, wanna play again? (y/n)", currentPlayer.UserName);
                if (!Regex.IsMatch(Console.ReadLine().ToLower(), yesPattern))
                {
                    playerStopList.Add(currentPlayer);
                }
                else
                {
                    currentPlayer.EndOfRound = false;
                }
            }
            foreach (Player currentPlayer in playerStopList)
            {
                Console.WriteLine("{0} has left the game with {1}", currentPlayer.UserName, currentPlayer.CurrentMoney);
                UpdatePlayerData(currentPlayer);
                TotalPlayerCollection.List.Remove(currentPlayer);
            }
        }
Exemplo n.º 4
0
        public override void Play()     //override is required to implement an abstract method
        {
            Dealer = new BlackJackDealer();
            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();
            Console.WriteLine("\nPlace 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; 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 = BlackJackRules.CheckForBlackJack(player.Hand);
                        if (blackJack)
                        {
                            Console.WriteLine($"BlackJack! {player.Name} wins {Bets[player] * 1.5}!");
                            player.Balance += Convert.ToInt32((Bets[player] * 1.5) + Bets[player]);
                            Console.WriteLine($"Your current balance is: {player.Balance}");
                            Console.WriteLine("Do you want to play again?");
                            string answer = Console.ReadLine().ToLower();
                            if (answer == "yes" || answer == "yeah" || answer == "ya" || answer == "y")
                            {
                                player.isActivelyPlaying = true;
                                return;
                            }
                            else
                            {
                                player.isActivelyPlaying = false;
                                return;
                            }
                        }
                    }
                }
                Console.Write("Dealer: ");
                Dealer.Deal(Dealer.Hand);
                if (i == 1)
                {
                    bool blackJack = BlackJackRules.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)
                        {
                            Console.WriteLine($"Your current balance is: {player.Balance}");
                            Console.WriteLine("Do you want to play again?");
                            string answer = Console.ReadLine().ToLower();
                            if (answer == "yes" || answer == "yeah" || answer == "ya" || answer == "y")
                            {
                                player.isActivelyPlaying = true;
                                return;
                            }
                            else
                            {
                                player.isActivelyPlaying = false;
                                return;
                            }
                        }
                    }
                }
            }
            foreach (Player player in Players)
            {
                while (!player.Stay)
                {
                    Console.WriteLine("Your cards are:");
                    foreach (Card card in player.Hand)
                    {
                        Console.WriteLine(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 = BlackJackRules.IsBusted(player.Hand);
                    if (busted)
                    {
                        Dealer.Balance += Bets[player];
                        Console.WriteLine($"{player.Name} busted! You lose your bet of {Bets[player]}.");
                        Console.WriteLine($"\nYour balance is now {player.Balance}.");
                        Console.WriteLine("\nDo you want to play again?");
                        answer = Console.ReadLine().ToLower();
                        if (answer == "yes" || answer == "yeah" || answer == "ya" || answer == "y")
                        {
                            player.isActivelyPlaying = true;
                            return;
                        }
                        else
                        {
                            player.isActivelyPlaying = false;
                            return;
                        }
                    }
                }
            }
            Dealer.isBusted = BlackJackRules.IsBusted(Dealer.Hand);
            Dealer.Stay     = BlackJackRules.ShouldDealerStay(Dealer.Hand);
            while (!Dealer.Stay && !Dealer.isBusted)
            {
                Console.WriteLine("Dealer is hitting...");
                Dealer.Deal(Dealer.Hand);
                Dealer.isBusted = BlackJackRules.IsBusted(Dealer.Hand);
                Dealer.Stay     = BlackJackRules.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;
                    }
                    foreach (Player player in Players)
                    {
                        Console.WriteLine($"\nYour current balance is: {player.Balance}.");
                        Console.WriteLine("\nDo you want to play again?");
                        string answer = Console.ReadLine().ToLower();
                        if (answer == "yes" || answer == "yeah" || answer == "ya" || answer == "y")
                        {
                            player.isActivelyPlaying = true;
                            return;
                        }
                        else
                        {
                            player.isActivelyPlaying = false;
                            return;
                        }
                    }
                }
            }
            foreach (Player player in Players)                                          //it is possible to make bool or int or other types take on extra values
            {
                bool?playerWon = BlackJackRules.CompareHands(player.Hand, Dealer.Hand); //  Allows bool to have a null value
                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($"\nYour current balance is: {player.Balance}");
                Console.WriteLine("\nDo you want to play again?");
                string answer = Console.ReadLine().ToLower();
                if (answer == "yes" || answer == "ya" || answer == "yeah" || answer == "y")
                {
                    player.isActivelyPlaying = true;
                }
                else
                {
                    player.isActivelyPlaying = false;
                }
            }
        }