using System.Collections.Generic;
public static void Main()
var hand = deck.DealStandardHand();
hand = deck.DealStandardHand();
public Suit Suit { get; set; }
public Value Value { get; set; }
public IEnumerable<Card> Cards {get;set;}
public bool Contains(Value val)
return Cards.Where(c => c.Value == val).Any();
return Cards.GroupBy(h => h.Value)
.Where(g => g.Count() == 2)
return Cards.GroupBy(h => h.Value)
.Where(g => g.Count() == 2)
public bool IsThreeOfAKind
return Cards.GroupBy(h => h.Value)
.Where(g => g.Count() == 3)
public bool IsFourOfAKind
return Cards.GroupBy(h => h.Value)
.Where(g => g.Count() == 4)
return Cards.GroupBy(h => h.Suit).Count() == 1;
return IsPair && IsThreeOfAKind;
if (Contains(Value.Ace) &&
var ordered = Cards.OrderBy(h => h.Value).ToArray();
var straightStart = (int)ordered.First().Value;
for (var i = 1; i < ordered.Length; i++)
if ((int)ordered[i].Value != straightStart + i)
public bool IsStraightFlush
return IsStraight && IsFlush;
public bool IsRoyalStraightFlush
return IsStraight && IsFlush && Contains(Value.Ace) && Contains(Value.King);
var cards = new List<Card>();
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
foreach (Value value in Enum.GetValues(typeof(Value)))
cards.Add(new Card { Suit = suit, Value = value });
public List<Card> Cards { get {return _cards;}}
public Hand DealStandardHand()
return new Hand { Cards = Cards.Take(5)};
private static Random rng = new Random();