/// <summary> /// Overloading the regular DeterminePokerHandType function to check for JacksOrWild specific conditions. /// </summary> /// <param name="pokerHand"></param> /// <returns></returns> public DeckConstants.PokerHandType DeterminePokerHandType(List <DeckConstants.StandardCard> pokerHand) { // Copy the hand as to not to destroy the order of the original hand when we sort it. List <DeckConstants.StandardCard> handCopy = CopyHand(pokerHand); // NOTE: It would be possible to save a bit of performance by doing these calculations individually and returning immediately if they succeed or fail, // however this implementation allows for the ability to over ride the standard poker return values and do additional evaluations to check for // strategy specific information such as JacksOrBetter. StandardCardPokerDataContext jacksOrBetterDataContext = new StandardCardPokerDataContext(StandardCardPokerUtils.AreAllCardsInHandTheSameSuit(handCopy), StandardCardPokerUtils.IsStraight(handCopy), StandardCardPokerUtils.AreAllTenOrAbove(handCopy), StandardCardPokerUtils.FindSetsOfCardsWithSameValue(handCopy)); DeckConstants.PokerHandType handType = StandardCardPokerUtils.DeterminePokerHandType(jacksOrBetterDataContext, handCopy); if (handType == DeckConstants.PokerHandType.Pair) { bool isJackOrGreater = (jacksOrBetterDataContext.SameCardSets.Count > 0 && (int)handCopy[jacksOrBetterDataContext.SameCardSets[0].IndexList[0]].value >= (int)DeckConstants.CardValue.Jack); if (isJackOrGreater) { return(DeckConstants.PokerHandType.JacksOrBetter); } } return(handType); }
/// <summary> /// Returns the type of poker hand based off the hand of cards passed in. /// </summary> /// <param name="dataContext"></param> /// <param name="pokerHand"></param> /// <returns></returns> public static DeckConstants.PokerHandType DeterminePokerHandType(StandardCardPokerDataContext dataContext, List <DeckConstants.StandardCard> handToEvaluate) { if (dataContext.AllSameSuit && dataContext.Straight && dataContext.AllRoyals) { return(DeckConstants.PokerHandType.RoyalFlush); } //Determine Poker Hand Type if (dataContext.AllSameSuit && dataContext.Straight) { return(DeckConstants.PokerHandType.StraightFlush); } if (dataContext.AllSameSuit) { return(DeckConstants.PokerHandType.Flush); } if (dataContext.Straight) { return(DeckConstants.PokerHandType.Straight); } List <StandardCardValueSet> sameCardSets = dataContext.SameCardSets; //Continue Determining Poker Hand Type if (sameCardSets.Count > 0 && sameCardSets[SET_1].IndexList.Count == 4) { return(DeckConstants.PokerHandType.FourOfAKind); } if (sameCardSets.Count > 1 && sameCardSets[SET_1].IndexList.Count + sameCardSets[SET_2].IndexList.Count == 5) { return(DeckConstants.PokerHandType.FullHouse); } if (sameCardSets.Count > 0 && sameCardSets[SET_1].IndexList.Count == 3) { return(DeckConstants.PokerHandType.ThreeOfAKind); } if (sameCardSets.Count > 1 && sameCardSets[SET_1].IndexList.Count + sameCardSets[SET_2].IndexList.Count == 4) { return(DeckConstants.PokerHandType.TwoPair); } if (sameCardSets.Count > 0 && sameCardSets[SET_1].IndexList.Count == 2) { return(DeckConstants.PokerHandType.Pair); } return(DeckConstants.PokerHandType.HighCard); }