Ejemplo n.º 1
0
        private bool isStraight(ref int numSubRanks, ref eRankType[] subRank)
        {
            int       i;
            eRankType lowRank  = eRankType.RANK_UNKNOWN;
            eRankType highRank = eRankType.RANK_UNKNOWN;

            numSubRanks = 1;

            // if more than one card of the same rank
            // then it is not a straight
            for (i = 0; i < 13; i++)
            {
                if (_rankCount[i] > 1)
                {
                    return(false);
                }

                // Determine highest and lowest ranked cards in hand here
                if (_rankCount[i] == 1)
                {
                    highRank = (eRankType)Enum.ToObject(typeof(eRankType), i);

                    if (lowRank == eRankType.RANK_UNKNOWN)
                    {
                        lowRank = (eRankType)Enum.ToObject(typeof(eRankType), i);
                    }
                }
            }

            subRank[0] = highRank;

            // If the highest and lowest rank cards are within a spread of 5 cards,
            // and there are no pairs, then it must be straight
            if ((highRank - lowRank) == 4)
            {
                return(true);
            }

            // Check for Ace low straight here (special case as my code usually treats Ace as high)
            if ((lowRank == eRankType.RANK_TWO) && (highRank == eRankType.RANK_ACE))
            {
                // Got Ace and Two

                // Check for any 6's -> K's. (If any then no straight)
                for (i = (int)eRankType.RANK_SIX; i <= (int)eRankType.RANK_KING; i++)
                {
                    if (_rankCount[i] > 0)
                    {
                        return(false);
                    }
                }

                // This is a 5 high straight
                subRank[0] = eRankType.RANK_FIVE;

                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        isStraightFlush(ref int numSubRanks, ref eRankType[] subRank)
        {
            // These are required parameters, but can be ignored
            int flushNumSubRanks = 0;

            eRankType[] flushSubRank = new eRankType[5];

            if (isStraight(ref numSubRanks, ref subRank) && isFlush(ref flushNumSubRanks, ref flushSubRank))
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 3
0
        public Deck()
        {
            int i;

            for (i = 0; i < 52; i++)
            {
                eRankType rank = (eRankType)(i % 13);
                eSuitType suit = (eSuitType)(i / 13);

                Card card = new Card(rank, suit);

                cards[i] = card;
            }

            Shuffle();
        }
Ejemplo n.º 4
0
        private bool isTwoPair(ref int numSubRanks, ref eRankType[] subRank)
        {
            eRankType currRank;
            eRankType highPairRank = eRankType.RANK_UNKNOWN;
            eRankType lowPairRank  = eRankType.RANK_UNKNOWN;
            eRankType oddCardRank  = eRankType.RANK_UNKNOWN;
            int       pairCount    = 0;

            numSubRanks = 3;

            for (currRank = 0; (int)currRank < 13; currRank++)
            {
                if (_rankCount[(int)currRank] == 2)
                {
                    pairCount++;

                    if (highPairRank != eRankType.RANK_UNKNOWN)
                    {
                        lowPairRank = highPairRank;
                    }

                    highPairRank = currRank;
                }
                else if (_rankCount[(int)currRank] == 1)
                {
                    oddCardRank = currRank;
                }
            }

            if (pairCount == 2)
            {
                subRank[0] = highPairRank;
                subRank[1] = lowPairRank;
                subRank[2] = oddCardRank;

                return(true);
            }

            return(false);
        }
Ejemplo n.º 5
0
        isFullHouse(ref int numSubRanks, ref eRankType[] subRank)
        {
            int threesNumSubRanks = 0;

            eRankType[] threesSubRank = new eRankType[5];

            int pairNumSubRanks = 0;

            eRankType[] pairSubRank = new eRankType[5];


            if (isThrees(ref threesNumSubRanks, ref threesSubRank) &&
                isPair(ref pairNumSubRanks, ref pairSubRank))
            {
                numSubRanks = 2;
                subRank[0]  = threesSubRank[0];
                subRank[1]  = pairSubRank[0];

                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
 public Card(eRankType pRank, eSuitType pSuit)
 {
     Rank = pRank;
     Suit = pSuit;
 }
Ejemplo n.º 7
0
 public Card(eRankType pRank, eSuitType pSuit)
 {
     Rank = pRank;
     Suit = pSuit;
 }
Ejemplo n.º 8
0
        private bool isPair(ref int numSubRanks, ref eRankType[] subRank)
        {
            eRankType currRank;
            int currCard;
            int currSubRank;

            numSubRanks = 4;

            for (currRank = 0; (int)currRank < 13; currRank++)
            {
                if (_rankCount[(int)currRank] == 2)
                {
                    subRank[0] = currRank;

                    currSubRank = 1;

                    for (currCard = 0; currCard < 5; currCard++)
                    {
                        if (_cards[currCard].Rank != subRank[0])
                        {
                            subRank[currSubRank] = _cards[currCard].Rank;
                            currSubRank++;
                        }
                    }
                    return true;
                }
            }

            return false;
        }
Ejemplo n.º 9
0
        private bool isTwoPair(ref int numSubRanks, ref eRankType[] subRank)
        {
            eRankType currRank;
            eRankType highPairRank = eRankType.RANK_UNKNOWN;
            eRankType lowPairRank = eRankType.RANK_UNKNOWN;
            eRankType oddCardRank = eRankType.RANK_UNKNOWN;
            int pairCount = 0;

            numSubRanks = 3;

            for (currRank = 0; (int)currRank < 13; currRank++)
            {
                if (_rankCount[(int)currRank] == 2)
                {
                    pairCount++;

                    if (highPairRank != eRankType.RANK_UNKNOWN)
                    {
                        lowPairRank = highPairRank;
                    }

                    highPairRank = currRank;

                }
                else if (_rankCount[(int)currRank] == 1)
                {
                    oddCardRank = currRank;
                }
            }

            if (pairCount == 2)
            {
                subRank[0] = highPairRank;
                subRank[1] = lowPairRank;
                subRank[2] = oddCardRank;

                return true;
            }

            return false;
        }
Ejemplo n.º 10
0
        private bool isStraight(ref int numSubRanks, ref eRankType[] subRank)
        {
            int i;
            eRankType lowRank = eRankType.RANK_UNKNOWN;
            eRankType highRank = eRankType.RANK_UNKNOWN;

            numSubRanks = 1;

            // if more than one card of the same rank
            // then it is not a straight
            for (i = 0; i < 13; i++)
            {
                if (_rankCount[i] > 1)
                {
                    return false;
                }

                // Determine highest and lowest ranked cards in hand here
                if (_rankCount[i] == 1)
                {
                    highRank = (eRankType)Enum.ToObject(typeof(eRankType), i);

                    if (lowRank == eRankType.RANK_UNKNOWN)
                    {
                        lowRank = (eRankType)Enum.ToObject(typeof(eRankType), i);
                    }
                }
            }

            subRank[0] = highRank;

            // If the highest and lowest rank cards are within a spread of 5 cards, 
            // and there are no pairs, then it must be straight
            if ((highRank - lowRank) == 4)
            {
                return true;
            }

            // Check for Ace low straight here (special case as my code usually treats Ace as high)
            if ((lowRank == eRankType.RANK_TWO) && (highRank == eRankType.RANK_ACE))
            {
                // Got Ace and Two

                // Check for any 6's -> K's. (If any then no straight)
                for (i = (int)eRankType.RANK_SIX; i <= (int)eRankType.RANK_KING; i++)
                {
                    if (_rankCount[i] > 0)
                    {
                        return false;
                    }
                }

                // This is a 5 high straight
                subRank[0] = eRankType.RANK_FIVE;

                return true;
            }

            return false;
        }
Ejemplo n.º 11
0
        private bool isFlush(ref int numSubRanks, ref eRankType[] subRank)
        {
            int i;

            numSubRanks = 5;

            for (i = 0; i < 4; i++)
            {
                if ((_suitCount[i] != 0) &&
                    (_suitCount[i] != 5))
                {
                    return false;
                }
            }

            for (i = 0; i < 5; i++)
            {
                subRank[i] = _cards[i].Rank;
            }

            return true;
        }
Ejemplo n.º 12
0
        isFullHouse(ref int numSubRanks, ref eRankType[] subRank)
        {
            int threesNumSubRanks = 0;
            eRankType[] threesSubRank = new eRankType[5];

            int pairNumSubRanks = 0;
            eRankType[] pairSubRank = new eRankType[5];


            if (isThrees(ref threesNumSubRanks, ref threesSubRank) &&
                isPair(ref pairNumSubRanks, ref pairSubRank))
            {
                numSubRanks = 2;
                subRank[0] = threesSubRank[0];
                subRank[1] = pairSubRank[0];

                return true;
            }

            return false;
        }
Ejemplo n.º 13
0
        isFours(ref int numSubRanks, ref eRankType[] subRank)
        {
            int currRank;
            int currCard;

            numSubRanks = 2;

            for (currRank = 0; currRank < 13; currRank++)
            {
                if (_rankCount[currRank] == 4)
                {
                    subRank[0] = (eRankType)Enum.ToObject(typeof(eRankType), currRank);

                    for (currCard = 0; currCard < 5; currCard++)
                    {
                        if (_cards[currCard].Rank != subRank[0])
                        {
                            subRank[1] = _cards[currCard].Rank;
                            return true;
                        }
                    }
                }
            }

            return false;
        }
Ejemplo n.º 14
0
        isStraightFlush(ref int numSubRanks, ref eRankType[] subRank)
        {
            // These are required parameters, but can be ignored
            int flushNumSubRanks = 0;
            eRankType[] flushSubRank = new eRankType[5];

            if (isStraight(ref numSubRanks, ref subRank) && isFlush(ref flushNumSubRanks, ref flushSubRank))
            {
                return true;
            }

            return false;
        }