rendered paste bodynamespace 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);
}
}
}
}
}