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(); }
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(); }
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); } }
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; } } }