public static CardMatchType GetCardMatchType(this List <Card> cards) { CardMatchType result = CardMatchType.HIGH_CARDS; if (HasOnePairCards(cards)) { result = CardMatchType.ONE_PAIR; } if (HasTwoPairCards(cards)) { result = CardMatchType.TWO_PAIR; } if (HasThreeOfAKindCards(cards)) { result = CardMatchType.THREE_OF_A_KIND; } if (HasStraightCards(cards)) { result = CardMatchType.STRAIGHT; } if (HasFlushCards(cards)) { result = CardMatchType.FLUSH; } if (HasFullHouseCards(cards)) { result = CardMatchType.FULL_HOUSE; } if (HasFourOfAKindCards(cards)) { result = CardMatchType.FOUR_OF_A_KIND; } if (HasStraightFlushCards(cards)) { result = CardMatchType.STRAIGHT_FLUSH; } if (HasRoyalFlushCards(cards)) { result = CardMatchType.ROYAL_FLUSH; } return(result); }
public static int EvaluateCardMatch(List <Card> card1, List <Card> card2, List <Card> communityCards) { List <Card> combinedCards1 = new List <Card>(card1); combinedCards1.AddRange(communityCards); List <Card> combinedCards2 = new List <Card>(card2); combinedCards2.AddRange(communityCards); combinedCards1.Sort((a, b) => b.rank.CompareTo(a.rank)); combinedCards2.Sort((a, b) => b.rank.CompareTo(a.rank)); CardMatchType p1MatchType = combinedCards1.GetCardMatchType(); CardMatchType p2MatchType = combinedCards2.GetCardMatchType(); // NOTE: Evaluate DRAW card matches if (p1MatchType == p2MatchType) { CardMatchType matchType = p1MatchType; Debug.Log($"DRAW matchType = {matchType}"); // NOTE: We will not compare for Royal Flush since it is the highest. // It automatically results into a draw and will fall under default switch (matchType) { case CardMatchType.ONE_PAIR: case CardMatchType.TWO_PAIR: case CardMatchType.THREE_OF_A_KIND: case CardMatchType.FOUR_OF_A_KIND: return(ComparePairCards(card1, card2, communityCards)); case CardMatchType.FLUSH: return(CompareFlushCards(card1, card2, communityCards)); case CardMatchType.STRAIGHT: case CardMatchType.STRAIGHT_FLUSH: return(CompareStraightCards(card1, card2, communityCards)); case CardMatchType.HIGH_CARDS: return(CompareHighCards(combinedCards1, combinedCards2)); default: return(0); } } return(-1 * p1MatchType.CompareTo(p2MatchType)); }