public PokerPlayer() { Hand = new List <Card>(); BankRoll = 0M; HighCard = 0; HighSetValue = 0; LowSetValue = 0; FullHouseType = FullHouseTypes.None; }
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()); } } } } }
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; } } }