Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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));
        }
Ejemplo n.º 3
0
 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());
        }
Ejemplo n.º 5
0
 public PokerRank(PokerPlayer player1, PokerPlayer player2)
 {
     this.player1 = player1;
     this.player2 = player2;
 }