Esempio n. 1
0
 public PokerPlayer()
 {
     Hand          = new List <Card>();
     BankRoll      = 0M;
     HighCard      = 0;
     HighSetValue  = 0;
     LowSetValue   = 0;
     FullHouseType = FullHouseTypes.None;
 }
Esempio n. 2
0
        protected void CheckHandForSetLegacy(List <Card> cards, bool containsAce)
        {
            Card card = null;

            for (int i = 0; i < cards.Count - 1; i++)
            {
                if (cards[i].FaceNum == cards[i + 1].FaceNum)
                {
                    if (HandValue == PokerHandValues.ThreeOfAKind)
                    {
                        if (cards[i + 1].FaceNum == card.FaceNum)
                        {
                            HandValue    = PokerHandValues.FourOfAKind;
                            HighSetValue = GetCardValue(cards[i]);
                            LowSetValue  = 0;
                            if ((i + 1) == cards.Count - 1)
                            {
                                HighCard = GetCardValue(cards[0]);
                            }
                            else
                            {
                                HighCard = GetCardValue(cards[cards.Count - 1]);
                            }
                        }
                        else
                        {
                            HandValue     = PokerHandValues.FullHouse;
                            HighSetValue  = GetCardValue(cards[i]);
                            LowSetValue   = GetCardValue(cards[i - 1]);
                            FullHouseType = FullHouseTypes.ThreeLow;
                        }
                    }
                    else if (HandValue == PokerHandValues.TwoPair)
                    {
                        HandValue     = PokerHandValues.FullHouse;
                        HighSetValue  = GetCardValue(cards[i]);
                        LowSetValue   = GetCardValue(cards[i - 2]);
                        FullHouseType = FullHouseTypes.ThreeHigh;
                    }
                    else if (HandValue == PokerHandValues.Pair)
                    {
                        if (cards[i + 1].FaceNum == card.FaceNum)
                        {
                            HandValue    = PokerHandValues.ThreeOfAKind;
                            HighSetValue = GetCardValue(cards[i]);
                            LowSetValue  = 0;
                            if ((i + 1) == cards.Count - 1)
                            {
                                HighCard = GetCardValue(containsAce && !card.IsAce() ? cards[0] : cards[1]);
                            }
                            else
                            {
                                HighCard =
                                    GetCardValue(containsAce && !card.IsAce() ? cards[0] : cards.Last());
                            }
                        }
                        else
                        {
                            HandValue    = PokerHandValues.TwoPair;
                            HighSetValue = GetCardValue(cards[i]);
                            LowSetValue  = GetCardValue(card);
                            if ((i + 1) == cards.Count - 1)
                            {
                                if (cards.Min(c => c.FaceNum) == card.FaceNum)
                                {
                                    HighCard = GetCardValue(cards.Middle());
                                }
                                else
                                {
                                    HighCard = GetCardValue(cards.First());
                                }
                            }
                            else
                            {
                                HighCard = GetCardValue(cards.Last());
                            }
                        }
                    }
                    else if (HandValue == PokerHandValues.None)
                    {
                        HandValue    = PokerHandValues.Pair;
                        card         = cards[i];
                        HighSetValue = GetCardValue(cards[i]);
                        if (i + 1 == cards.Count - 1)
                        {
                            HighCard = GetCardValue(containsAce ? cards[0] : cards[i - 1]);
                        }
                        else
                        {
                            HighCard = GetCardValue(containsAce && !card.IsAce() ? cards[0] : cards.Last());
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        protected void CheckHandForSet(List <Card> cards, bool containsAce)
        {
            var cardsIndex = new Dictionary <int, int>();

            foreach (var card in cards)
            {
                if (cardsIndex.ContainsKey(card.FaceNum))
                {
                    cardsIndex[card.FaceNum]++;
                }
                else
                {
                    cardsIndex.Add(card.FaceNum, 1);
                }
            }

            if (cardsIndex.Count == 5)
            {
                HandValue = PokerHandValues.HighCard;
                HighCard  = containsAce
                    ? CardFaces.AceHigh.Value
                    : cards[cards.Count - 1].FaceNum;
            }
            else if (cardsIndex.Count == 4)
            {
                HandValue = PokerHandValues.Pair;
                var pairValue = cardsIndex.Single(ci => ci.Value == 2).Key;
                HighSetValue = pairValue == CardFaces.Ace.Value
                    ? CardFaces.AceHigh.Value
                    : pairValue;
                HighCard = containsAce && HighSetValue != CardFaces.AceHigh.Value
                    ? CardFaces.AceHigh.Value
                    : cards.Where(c => c.FaceNum != HighSetValue).Max(c => c.FaceNum);
            }
            else if (cardsIndex.Count == 3)
            {
                if (cardsIndex.Any(ci => ci.Value == 3))
                {
                    HandValue = PokerHandValues.ThreeOfAKind;
                    var threeKindValue = cardsIndex.Single(ci => ci.Value == 3).Key;
                    HighSetValue = threeKindValue == CardFaces.Ace.Value
                        ? CardFaces.AceHigh.Value
                        : threeKindValue;
                    HighCard = containsAce && threeKindValue != CardFaces.Ace.Value
                        ? CardFaces.AceHigh.Value
                        : cards.Where(c => c.FaceNum != threeKindValue).Max(c => c.FaceNum);
                }
                else
                {
                    var pairValues  = cardsIndex.Where(ci => ci.Value == 2).OrderBy(ci => ci.Key);
                    var kickerValue = cardsIndex.Single(ci => ci.Value == 1).Key;

                    HandValue = PokerHandValues.TwoPair;
                    HighCard  = kickerValue == CardFaces.Ace.Value
                        ? CardFaces.AceHigh.Value
                        : kickerValue;
                    if (pairValues.First().Key == CardFaces.Ace.Value)
                    {
                        HighSetValue = CardFaces.AceHigh.Value;
                        LowSetValue  = pairValues.Single(pv => pv.Key != CardFaces.Ace.Value).Key;
                    }
                    else
                    {
                        LowSetValue  = pairValues.First().Key;
                        HighSetValue = pairValues.Single(pv => pv.Key != LowSetValue).Key;
                    }
                }
            }
            else if (cardsIndex.Count == 2)
            {
                if (cardsIndex.Any(ci => ci.Value == 4))
                {
                    // 4 of a kind
                    var fourKindValue = cardsIndex.Single(ci => ci.Value == 4).Key;
                    var kickerValue   = cardsIndex.Single(ci => ci.Value == 1).Key;

                    HandValue    = PokerHandValues.FourOfAKind;
                    HighSetValue = fourKindValue == CardFaces.Ace.Value
                        ? CardFaces.AceHigh.Value
                        : fourKindValue;
                    HighCard = kickerValue == CardFaces.Ace.Value
                        ? CardFaces.AceHigh.Value
                        : kickerValue;
                }
                else
                {
                    // Full  house
                    var setValues = cardsIndex.OrderBy(ci => ci.Key);

                    HandValue     = PokerHandValues.FullHouse;
                    LowSetValue   = setValues.First().Key;
                    HighSetValue  = setValues.Single(sv => sv.Key != LowSetValue).Key;
                    FullHouseType = setValues.First().Value == 3
                        ? FullHouseTypes.ThreeLow
                        : FullHouseTypes.ThreeHigh;
                }
            }
        }