namespace Server.Poker { public enum Suit { None, Diamonds, Hearts, Clubs, Spades } public enum Rank { Ace, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King } public enum PokerScore { None, JacksOrBetter, TwoPair, ThreeOfAKind, Straight, Flush, FullHouse, FourOfAKind, StraightFlush, RoyalFlush } public class Card { private Suit m_Suit; private Rank m_Rank; public Suit Suit { get{ return m_Suit; } } public Rank Rank { get{ return m_Rank; } } public Card( Suit suit, Rank rank ) { m_Suit = suit; m_Rank = rank; } public Card() : this( Rank.None, Suit.None ) { } public bool IsJacksOrBetter() { if (m_Rank == Rank.Ace) return true; if (m_Rank >= Rank.Jack) return true; return false; } } public class Hand { private Deck m_Deck; private Card[] m_Hand; public Hand( Deck deck ) { m_Deck = deck; m_Hand = new Card[5]; } public void PullCards() { for( int i = 0; i < 5; ++i ) { m_Hand[i] = m_Deck.PullCard(); } } public void Sort() { Array.Sort(m_Hand); } public Card this [int index] { get { return m_Hand[index]; } } } public class Deck { private Card[] m_Deck; private int m_Index = 0; private Random rand = new Random(); //Shuffle Variable public Deck() { Produce(); } private void Produce() { m_Index = 0; //Ensures m_Deck = new Card[52]; int counter = 0; foreach(Suit s in Enum.GetValues(typeof(Suit))) { foreach(Rank r in Enum.GetValues(typeof(Rank))) { if (r != Rank.None && s != Suit.None) { m_Deck[counter++] = new Card(r,s); } } } } public Card PullCard() { return m_Deck[m_Index++]; } public Card PeekCard() { return m_Deck[m_Index]; } private void SwapCards(int i, int j) { Card tmp = m_Deck[i]; m_Deck[i] = m_Deck[j]; m_Deck[j] = tmp; } public void Shuffle(int count) { m_Index = 0; for( int i = 0; i < count; ++i ) { for( int j = 0; j < 52; ++j ) { int idx = rand.Next(52); SwapCards(j,idx); } } } } }