コード例 #1
0
        public void TestInvalidCardCountException()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Two));
            var board = new List <Card>();

            board.Add(new Card(CardSuit.Diamonds, CardValue.Seven));
            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();
        }
コード例 #2
0
        public void TestRoyalFlushSimple()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Ace));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.King));
            var board = new List <Card>();

            board.Add(new Card(CardSuit.Clubs, CardValue.Queen));
            board.Add(new Card(CardSuit.Clubs, CardValue.Jack));
            board.Add(new Card(CardSuit.Clubs, CardValue.Ten));
            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            Assert.AreEqual(HandRank.RoyalFlush, rank);
        }
コード例 #3
0
        /// <summary>
        /// Evaluates the handrank and maps it to the corresponding hand strength bucket.
        /// </summary>
        /// <param name="board">current community cards (or board)</param>
        /// <param name="holeCards">current hole cards of the player</param>
        /// <returns></returns>
        public static HandStrengthBucket MapToBucket(List <Card> board, List <Card> holeCards)
        {
            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            if (rank >= HandRank.TwoPairs)
            {
                return(HandStrengthBucket.TopHands);
            }

            var topCards = evaluator.GetTopFiveCards(rank);

            if (rank == HandRank.Pair)
            {
                var pairValue           = topCards.First().Value;
                var boardOrderedByValue = board.OrderBy(x => x.Value);
                var lowestValue         = boardOrderedByValue.First().Value;
                var topValue            = boardOrderedByValue.Last().Value;

                if (pairValue >= topValue)
                {
                    // either a overpair (e.g. Pocket Aces) or top pair
                    return(HandStrengthBucket.TopPair);
                }
                else if (pairValue < topValue && pairValue > lowestValue)
                {
                    return(HandStrengthBucket.MiddlePair);
                }
                else
                {
                    return(HandStrengthBucket.LowPair);
                }
            }
            else
            {
                //highcard
                bool hasAce = topCards.Any(x => x.Value == CardValue.Ace);
                if (hasAce)
                {
                    return(HandStrengthBucket.HighCardAce);
                }
                else
                {
                    return(HandStrengthBucket.HighCardElse);
                }
            }
        }
コード例 #4
0
        public void TestHighCard()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Seven));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Six));

            var board = new List <Card>();

            board.Add(new Card(CardSuit.Spades, CardValue.Ten));
            board.Add(new Card(CardSuit.Hearts, CardValue.Queen));
            board.Add(new Card(CardSuit.Clubs, CardValue.Ace));

            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            Assert.AreEqual(rank, HandRank.HighCard);
        }
コード例 #5
0
        public void TestFourOfAKind()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Six));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Six));

            var board = new List <Card>();

            board.Add(new Card(CardSuit.Spades, CardValue.Six));
            board.Add(new Card(CardSuit.Hearts, CardValue.Six));
            board.Add(new Card(CardSuit.Clubs, CardValue.Eight));

            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            Assert.AreEqual(rank, HandRank.FourOfAKind);
        }
コード例 #6
0
        public void TestFlush()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Two));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Nine));

            var board = new List <Card>();

            board.Add(new Card(CardSuit.Diamonds, CardValue.Eight));
            board.Add(new Card(CardSuit.Clubs, CardValue.Eight));
            board.Add(new Card(CardSuit.Clubs, CardValue.Six));
            board.Add(new Card(CardSuit.Clubs, CardValue.Seven));

            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            Assert.AreEqual(rank, HandRank.Flush);
        }
コード例 #7
0
        public void TestFullHouse()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Seven));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Seven));

            var board = new List <Card>();

            board.Add(new Card(CardSuit.Spades, CardValue.Ten));
            board.Add(new Card(CardSuit.Diamonds, CardValue.Nine));
            board.Add(new Card(CardSuit.Hearts, CardValue.Ten));
            board.Add(new Card(CardSuit.Diamonds, CardValue.Jack));
            board.Add(new Card(CardSuit.Diamonds, CardValue.Ten));

            var evaluator = new HandEvaluator(holeCards, board);
            var rank      = evaluator.GetHandRank();

            Assert.AreEqual(rank, HandRank.FullHouse);
        }
コード例 #8
0
        public void TestStraightCards()
        {
            var holeCards = new List <Card>();

            holeCards.Add(new Card(CardSuit.Diamonds, CardValue.Six));
            holeCards.Add(new Card(CardSuit.Clubs, CardValue.Ten));

            var board = new List <Card>();

            board.Add(new Card(CardSuit.Diamonds, CardValue.Nine));
            board.Add(new Card(CardSuit.Spades, CardValue.Seven));
            board.Add(new Card(CardSuit.Hearts, CardValue.Six));
            board.Add(new Card(CardSuit.Clubs, CardValue.Eight));

            var evaluator = new HandEvaluator(holeCards, board);
            var topCards  = evaluator.GetTopFiveCards(evaluator.GetHandRank());


            Assert.AreEqual(topCards.Count, 5);
        }