using System.Collections.Generic;
public static void Main(string[] args)
Console.WriteLine("Welcome to Blackjack!");
Console.WriteLine("Enter number of players (2-5):");
if (!int.TryParse(Console.ReadLine(), out int numPlayers) || numPlayers < 2 || numPlayers > 5)
Console.WriteLine("Invalid input. Please enter a number between 2 and 5.");
List<string> playerNames = new List<string>();
for (int i = 0; i < numPlayers; i++)
Console.WriteLine($"Enter name for Player {i + 1}:");
string playerName = Console.ReadLine();
while (string.IsNullOrEmpty(playerName))
Console.WriteLine("Invalid input. Please enter a valid name.");
playerName = Console.ReadLine();
playerNames.Add(playerName);
Game game = new Game(playerNames);
public string Suit { get; set; }
public string Rank { get; set; }
public int Value { get; set; }
public Card(string suit, string rank, int value)
public override string ToString()
return $"{Rank} of {Suit}";
private List<Card> cards;
cards = new List<Card>();
string[] suits = { "Clubs", "Diamonds", "Hearts", "Spades" };
string[] ranks = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace" };
int[] values = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11 };
foreach (var suit in suits)
for (int i = 0; i < ranks.Length; i++)
cards.Add(new Card(suit, ranks[i], values[i]));
int index = random.Next(cards.Count);
Card drawnCard = cards[index];
for (int i = cards.Count - 1; i > 0; i--)
int j = random.Next(i + 1);
public string Name { get; set; }
public List<Card> Hand { get; private set; }
int totalValue = Hand.Sum(card => card.Value);
int aceCount = Hand.Count(card => card.Rank == "Ace");
while (totalValue > 21 && aceCount > 0)
public Player(string name)
public void DrawCard(Deck deck)
Hand.Add(deck.DrawCard());
public override string ToString()
return $"{Name}'s Hand: {string.Join(", ", Hand)} (Total Value: {HandValue})";
private List<Player> players;
public Game(List<string> playerNames)
players = playerNames.Select(name => new Player(name)).ToList();
foreach (var player in players)
Console.WriteLine($"{player.Name}, it's your turn.");
Console.WriteLine($"{player}");
Console.WriteLine("Do you want to draw a card? (y/n)");
string input = Console.ReadLine();
if (input.ToLower() == "y")
if (player.HandValue > 21)
Console.WriteLine($"{player.Name}, you busted!");
private void DetermineWinner()
var validPlayers = players.Where(p => p.HandValue <= 21).OrderByDescending(p => p.HandValue).ToList();
if (validPlayers.Count > 0)
Player winner = validPlayers.First();
Console.WriteLine($"{winner.Name} wins with {winner.HandValue} points!");
Console.WriteLine("No winners, all players busted!");