/// <summary> /// Compares which hand of two-pair is better /// </summary> /// <param name="player1"></param> /// <param name="player2"></param> /// <returns></returns> private PokerPlayer EvaluateTwoPair(PokerPlayer player1, PokerPlayer player2) { var player1CardsGrouped = player1.HandOfCards.Cards.GroupBy(o => o.CardValue).OrderByDescending(group => group.Count()); var player1Pairs = player1CardsGrouped.Where(group => group.Count() == 2); var player1FirstPairValue = player1Pairs.First().Key; var player1SecondPairValue = player1Pairs.Last().Key; var player2CardsGrouped = player2.HandOfCards.Cards.GroupBy(o => o.CardValue).OrderByDescending(group => group.Count()); var player2Pairs = player2CardsGrouped.Where(group => group.Count() == 2); var player2FirstPairValue = player2Pairs.First().Key; var player2SecondPairValue = player2Pairs.Last().Key; // Check if the high pairs are not equal if (player1FirstPairValue > player2FirstPairValue) { return(player1); } else if (player1FirstPairValue < player2FirstPairValue) { return(player2); } // The higher value pairs were equal, have to check the second pair if (player1SecondPairValue > player2SecondPairValue) { return(player1); } else if (player1SecondPairValue < player2SecondPairValue) { return(player2); } // The second pair were also equal, have to check the high card var player1HighCard = player1CardsGrouped.Where(group => group.Count() == 1).First().Key; var player2HighCard = player2CardsGrouped.Where(group => group.Count() == 1).First().Key; if (player1HighCard > player2HighCard) { return(player1); } else if (player1HighCard < player2HighCard) { return(player2); } // High card is the same so no winner return(null); }
/// <summary> /// Compare which hand with one pair is better /// </summary> /// <param name="player1"></param> /// <param name="player2"></param> /// <returns></returns> private PokerPlayer EvaluateOnePair(PokerPlayer player1, PokerPlayer player2) { var player1Value = player1.HandOfCards.Cards.GroupBy(o => o.CardValue).Where(group => group.Count() == 2).OrderByDescending(group => group.Count()).First().Key; var player2Value = player2.HandOfCards.Cards.GroupBy(o => o.CardValue).Where(group => group.Count() == 2).OrderByDescending(group => group.Count()).First().Key; // Check if one of the pairs is better if (player1Value > player2Value) { return(player1); } else if (player1Value < player2Value) { return(player2); } // Pairs were the same, have to check the high card return(EvaluateHighCard(player1, player2)); }
public PokerRank(PokerPlayer player1, PokerPlayer player2) { this.player1 = player1; this.player2 = player2; }
public static string DisplayHand(this PokerPlayer player) { var stringBuilder = new StringBuilder(); player.Cards.ForEach(card => { switch (card.Value) { case CardValue.Two: stringBuilder.Append("2"); break; case CardValue.Three: stringBuilder.Append("3"); break; case CardValue.Four: stringBuilder.Append("4"); break; case CardValue.Five: stringBuilder.Append("5"); break; case CardValue.Six: stringBuilder.Append("6"); break; case CardValue.Seven: stringBuilder.Append("7"); break; case CardValue.Eight: stringBuilder.Append("8"); break; case CardValue.Nine: stringBuilder.Append("9"); break; case CardValue.Ten: stringBuilder.Append("T"); break; case CardValue.Jack: stringBuilder.Append("J"); break; case CardValue.Queen: stringBuilder.Append("Q"); break; case CardValue.King: stringBuilder.Append("K"); break; case CardValue.Ace: stringBuilder.Append("A"); break; default: stringBuilder.Append(string.Empty); break; } switch (card.Suit) { case Suit.Clubs: stringBuilder.Append("C"); break; case Suit.Diamonds: stringBuilder.Append("D"); break; case Suit.Hearts: stringBuilder.Append("H"); break; case Suit.Spades: stringBuilder.Append("S"); break; default: stringBuilder.Append(string.Empty); break; } stringBuilder.Append(" "); }); return(stringBuilder.ToString()); }