Ejemplo n.º 1
0
        static List <PlayingCard> GenerateStandardDeck(bool includeJokers)
        {
            int cardCount            = 52 + (includeJokers ? 2 : 0);
            List <PlayingCard> cards = new List <PlayingCard>();

            for (int i = 0; i < cardCount; i++)
            {
                PlayingCard.Suit  suit  = (PlayingCard.Suit)(i % 4);
                PlayingCard.Value value = (PlayingCard.Value)((i - (int)suit) / 4);
                cards.Add(new PlayingCard(suit, value));
            }

            return(cards);
        }
Ejemplo n.º 2
0
        static Tuple <HandType, ulong> HandValue(List <PlayingCard> cards)
        {
            Debug.Assert(cards.Count == 5);

            cards.Sort();

            PlayingCard.Value?firstPairValue, secondPairValue;
            uint firstPairCardCount, secondPairCardCount;
            bool isStraight;
            bool isFlush;

            CalcHandStats(cards, out isFlush, out firstPairValue, out secondPairValue, out firstPairCardCount, out secondPairCardCount, out isStraight);

            HandType myHandType;

            myHandType = GetHandType(firstPairCardCount, secondPairCardCount, isStraight, isFlush);

            ulong myHandValue;

            switch (myHandType)
            {
            case HandType.StraightFlush:
            case HandType.Flush:
            case HandType.HighCard:
            case HandType.Straight:
                if (myHandType == HandType.Straight && cards[4].value == PlayingCard.Value.Ace)
                {
                    myHandValue = 0;
                }
                else
                {
                    myHandValue = GetValue(cards[4].value, cards[3].value, cards[2].value, cards[1].value, cards[0].value);
                }
                break;

            case HandType.FourOfAKind:
            case HandType.ThreeOfAKind:
            case HandType.OnePair:
                int iStartOfPair = 0;
                for (int i = 0; i < 5; i++)
                {
                    if (cards[i].value == firstPairValue.Value)
                    {
                        iStartOfPair = i;
                        break;
                    }
                }
                myHandValue = GetValue(cards[iStartOfPair].value, cards[iStartOfPair + 1].value,
                                       cards[(iStartOfPair + 2) % 5].value, cards[(iStartOfPair + 3) % 5].value, cards[(iStartOfPair + 4) % 5].value);
                break;

            case HandType.FullHouse:
                PlayingCard.Value largerValue  = firstPairValue.Value;
                PlayingCard.Value smallerValue = secondPairValue.Value;
                if (secondPairCardCount > firstPairCardCount)
                {
                    largerValue  = secondPairValue.Value;
                    smallerValue = firstPairValue.Value;
                }
                myHandValue = GetValue(largerValue, largerValue, largerValue, smallerValue, smallerValue);
                break;

            case HandType.TwoPair:
                PlayingCard.Value lastCard = 0;
                foreach (var card in cards)
                {
                    if (card.value != firstPairValue.Value && card.value != secondPairValue.Value)
                    {
                        lastCard = card.value;
                        break;
                    }
                }
                myHandValue = GetValue(secondPairValue.Value, secondPairValue.Value, firstPairValue.Value, firstPairValue.Value, lastCard);
                break;

            default:
                myHandValue = 0;
                Debug.Fail();
                break;
            }

            return(Tuple.Create(myHandType, (ulong)myHandType * 100000000 + myHandValue));
        }
Ejemplo n.º 3
0
 static ulong GetValue(PlayingCard.Value value1, PlayingCard.Value value2, PlayingCard.Value value3, PlayingCard.Value value4, PlayingCard.Value value5)
 {
     return((ulong)((ulong)value1 * Math.Pow(13, 4) + (ulong)value2 * Math.Pow(13, 3) + (ulong)value3 * Math.Pow(13, 2) + (ulong)value4 * 13 + (ulong)value5));
 }