All pastes #109008 Raw Edit

Milkboy

public text v1 · immutable
#109008 ·published 2006-07-31 19:58 UTC
rendered paste body
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);
				}
			}
		}
	}
}