using System.Collections.Generic;
public Suit Suit { get; set; }
public Rank Rank { get; set; }
public Card(Suit suit, Rank rank)
public override string ToString()
return String.Format("{0} of {1}", Rank, Suit);
private List<Card> cards;
cards = new List<Card>();
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
foreach (Rank rank in Enum.GetValues(typeof(Rank)))
cards.Add(new Card(suit, rank));
for (int i = cards.Count - 1; i > 0; i--)
int j = random.Next(i + 1);
if (cards.Count == 0) throw new InvalidOperationException("The deck is empty.");
Card card = cards[cards.Count - 1];
cards.RemoveAt(cards.Count - 1);
public List<Card> Cards { get; private set; }
Cards = new List<Card>();
public void AddCard(Card card)
public int GetTotalValue()
foreach (Card card in Cards)
if (card.Rank >= Rank.Two && card.Rank <= Rank.Ten)
else if (card.Rank >= Rank.Jack && card.Rank <= Rank.King)
else if (card.Rank == Rank.Ace)
while (total > 21 && aceCount > 0)
public override string ToString()
return String.Join(", ", Cards);
public static void Main(string[] args)
Hand playerHand = new Hand();
Hand dealerHand = new Hand();
playerHand.AddCard(deck.Draw());
playerHand.AddCard(deck.Draw());
dealerHand.AddCard(deck.Draw());
dealerHand.AddCard(deck.Draw());
Console.WriteLine("Welcome to Blackjack!");
Console.WriteLine(String.Format("Dealer's Hand: {0} and [hidden]", dealerHand.Cards[0]));
Console.WriteLine(String.Format("Player's Hand: {0}", playerHand));
bool playerStands = false;
while (playerHand.GetTotalValue() < 21 && !playerStands)
Console.Write("Do you want to (H)it or (S)tand? ");
string playerChoice = Console.ReadLine().ToUpper();
playerHand.AddCard(deck.Draw());
Console.WriteLine(String.Format("Player's Hand: {0}", playerHand));
else if (playerChoice == "S")
while (dealerHand.GetTotalValue() < 17)
dealerHand.AddCard(deck.Draw());
Console.WriteLine(String.Format("Dealer's Hand: {0}", dealerHand));
int playerTotal = playerHand.GetTotalValue();
int dealerTotal = dealerHand.GetTotalValue();
Console.WriteLine(String.Format("Player's Total: {0}", playerTotal));
Console.WriteLine(String.Format("Dealer's Total: {0}", dealerTotal));
Console.WriteLine("Player busts! Dealer wins.");
else if (dealerTotal > 21 || playerTotal > dealerTotal)
Console.WriteLine("Player wins!");
else if (dealerTotal > playerTotal)
Console.WriteLine("Dealer wins!");
Console.WriteLine("It's a tie!");