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("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; 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.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.Write("{0} ", card.ToString()); } Console.WriteLine(""); Console.WriteLine("Dealer cards are: "); foreach (Card card in Dealer.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" || answer == "y") { 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("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]; } 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" || answer == "y") { player.isActivelyPlaying = true; return; } else { player.isActivelyPlaying = false; return; } } }
public override void Play() //its labeled as an override method bc its an abstract method in the game class (a method without an logic) //its used within the base class to ensure that it the Play method is implemented but still gives versatility //in case you want to use the game class for another game (a game besides blackjack). { Dealer = new TwentyOneDealer(); foreach (Player player in Players) //we have a list of players, so we want to account for eacher player { 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("Place your bet!"); foreach (Player player in Players) { int bet = Convert.ToInt32(Console.ReadLine()); bool successfullyBet = player.Bet(bet); if (!successfullyBet) { return; //end this method (this is a void method, it doesnt return anything) } //that means it will take us back to the while loop in program and reevaluate the function //tracking bets using a dictionary (key: player, value: bet) Bets[player] = bet; //Bets is the dictionary, Player is the key and bet is the value } for (int i = 0; i < 2; i++) { Console.WriteLine("Dealing..."); foreach (Player player in Players) { Console.Write("{0}:", player.Name); Dealer.Deal(player.Hand); //checking for blackjack; second card 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.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.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; 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("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 is Busted!"); foreach (KeyValuePair <Player, int> entry in Bets) { Console.WriteLine("{0} won {1}!", entry.Key.Name, entry.Value); //Get list of players where their name = the name in the dictionary- Take that player - Players.Where(x => x.Name == entry.Key.Name).First().Balance += (entry.Value * 2); Dealer.Balance -= entry.Value; } return; } foreach (Player player in Players) { //boolean with three possible options. less then, greater then, equal too the dealers hand //this bool can now have a null value. bool are structs which usually mean they dont have a null value 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, player.Balance); player.Balance += (Bets[player] * 2); Dealer.Balance -= Bets[player]; } else { Console.WriteLine("Dealer Wins {0}!", Bets[player]); Dealer.Balance += Bets[player]; } Console.WriteLine("Player Again?"); string answer = Console.ReadLine().ToLower(); if (answer == "yes" || answer == "yeah") { player.isActivelyPlaying = true; } else { player.isActivelyPlaying = false; } } }