using System.Collections.Generic;
using System.Threading.Tasks;
public enum CardSuit { Diamonds, Hearts, Spades, Clubs };
public enum CardRank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Knave, Queen, King };
bool MakeDecision(GameState gameState);
public CardSuit Suit { get; private set; }
public CardRank Rank { get; private set; }
public int Point { get; private set; }
public PlayingCard(CardRank rank, CardSuit suit)
private static string GetSuitString(CardSuit cardSuit)
string suitDisplay = " ";
if (cardSuit == CardSuit.Hearts) suitDisplay = "\u2665";
else if (cardSuit == CardSuit.Diamonds) suitDisplay = "\u2666";
else if (cardSuit == CardSuit.Spades) suitDisplay = "\u2660";
else if (cardSuit == CardSuit.Clubs) suitDisplay = "\u2663";
private static string GetRankString(CardRank cardRank)
string rankDisplay = " ";
public override string ToString()
return "[" + GetRankString(Rank) + GetSuitString(Suit) + "]";
private List<CardSuit> _suits = new List<CardSuit>
private List<CardRank> _ranks = new List<CardRank>
private List<PlayingCard> _cards = new List<PlayingCard>(52);
foreach (CardSuit suit in _suits)
foreach (CardRank rank in _ranks)
_cards.Add(new PlayingCard(rank, suit));
public PlayingCard TakeCard()
var card = _cards.Last();
Random rnd = new Random();
for (int i = _cards.Count - 1; i > 0; i--)
public class SimpleComputer : IPlayer
private static readonly List<string> _names = new List<string>
"Имя 1", "Name X", "Test name"
if (string.IsNullOrEmpty(_name))
var randomIndex = new Random().Next(3);
_name = _names[randomIndex];
public bool MakeDecision(GameState gameState)
if (gameState.MyCards.Count == 0) return true;
sumPoint += gameState.MyCards.Sum(p=>p.Point);
return ((21 - sumPoint > gameState.MyCards.Average(p=>p.Point)));
public class ConsolePlayer : IPlayer
if (string.IsNullOrEmpty(_name))
_name = Console.ReadLine();
public bool MakeDecision(GameState gameState)
string decision = Console.ReadLine();
return (decision == "Yes");
private List<PlayingCard> _myCards = new List<PlayingCard>();
private List<PlayingCard> _otherCards = new List<PlayingCard>();
public List<PlayingCard> MyCards
public List<PlayingCard> OtherCards
get { return _otherCards; }
public static void Main(string[] args)
PackOfCards myPack = new PackOfCards();
var players = new IPlayer[]
GameState gameState = new GameState();
foreach (IPlayer player in players)
Console.WriteLine("What's your name?");
Console.WriteLine("Hello, {0}", player.Name);
Console.WriteLine("Do you want to take one more card (Yes Or No)?");
Console.WriteLine(player.MakeDecision(gameState));
currentCard = myPack.TakeCard();