public void TestGetCategory35_StraightFlush()
        {
            IHand hand = new Hand("A♦ K♦ Q♦ J♦ 10♦");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.StraightFlush, category, "Straight flush is not identified correctly.");
        }
        public void TestGetCategory32_FourOfAKind()
        {
            IHand hand = new Hand("7♣ 7♠ 7♦ 7♥ 10♣");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.FourOfAKind, category, "Four of a kind is not identified correctly.");
        }
        public void TestGetCategory29_FullHouse()
        {
            IHand hand = new Hand("Q♣ Q♦ Q♠ 9♥ 9♣");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.FullHouse, category, "Full house is not identified correctly.");
        }
        public void TestGetCategory23_Flush()
        {
            IHand hand = new Hand("K♥ Q♥ 9♥ 5♥ 4♥");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.Flush, category, "Flush is not identified correctly.");
        }
        public void TestGetCategory2_HighCard()
        {
            IHand hand = new Hand("K♥ J♥ 8♣ 7♦ 4♠");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.HighCard, category, "High card is not identified correctly.");
        }
Example #6
0
        public void TestGetCategory18_Straight()
        {
            IHand hand = new Hand("A♣ K♣ Q♦ J♠ 10♠");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.Straight, category, "Straight is not identified correctly.");
        }
Example #7
0
        public void TestGetCategory4_OnePair()
        {
            IHand hand = new Hand("4♥ 4♠ K♠ 10♦ 5♠");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.OnePair, category, "One pair is not identified correctly.");
        }
        public void TestGetCategory20_NotStraight()
        {
            IHand hand = new Hand("3♠ 2♦ A♥ K♠ Q♣");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.HighCard, category, "High card is not identified correctly.");
        }
Example #9
0
        public void TestGetCategory15_ThreeOfAKind()
        {
            IHand hand = new Hand("4♦ 4♣ 4♠ 8♣ 7♦");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.ThreeOfAKind, category, "Three of a kind is not identified correctly.");
        }
Example #10
0
        public void TestGetCategory10_TwoPair()
        {
            IHand hand = new Hand("K♣ K♦ 9♠ 9♥ 5♥");

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.TwoPair, category, "Two pair is not identified correctly.");
        }
Example #11
0
        public void Arrange(PokerPlayer player)
        {
            this.Copy(player);
            if (CheckIsRoyalFlush())
            {
                this.Category = HandCategory.RoyalFlush;
            }
            else if (CheckIsFourOfAKind())
            {
                this.Category = HandCategory.FourOfAKind;
            }
            else if (CheckIsStraightFlush())
            {
                this.Category = HandCategory.StraightFlush;
            }
            else if (CheckIsFullHouse())
            {
                this.Category = HandCategory.FullHouse;
            }
            else if (CheckIsFlush())
            {
                this.Category = HandCategory.Flush;
            }
            else if (CheckIsStraight())
            {
                this.Category = HandCategory.Straight;
            }
            else if (CheckIsThreeOfAKind())
            {
                this.Category = HandCategory.ThreeOfaKind;
            }
            else if (CheckIsTwoPair())
            {
                this.Category = HandCategory.TwoPair;
            }
            else if (CheckIsPair())
            {
                this.Category = HandCategory.OnePair;
            }
            else
            {
                this.Category = HandCategory.HighCard;
            }

            //Get Score to get High Card
            this.Score = this.CardsOnHand.AsEnumerable().Sum(r => (int)r.Rank);
        }
Example #12
0
        public void TestGetCategory1_HighCard()
        {
            ICard[] cards = new ICard[5]
            {
                new Card(CardRank.Queen, CardSuit.Diamonds),
                new Card(CardRank.King, CardSuit.Hearts),
                new Card(CardRank.Two, CardSuit.Hearts),
                new Card(CardRank.Eight, CardSuit.Spades),
                new Card(CardRank.Nine, CardSuit.Clubs)
            };

            IHand hand = new Hand(cards);

            HandCategory category = handEvaluator.GetCategory(hand);

            Assert.AreEqual(HandCategory.HighCard, category, "High card is not identified correctly.");
        }
Example #13
0
        public void PairTest()
        {
            HandCategory expectedCategory = HandCategory.Pair;
            Card         expectedHighCard = new Card(CardRank.Six, CardSuit.Diamond);

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Two, CardSuit.Spade),
                new Card(CardRank.Queen, CardSuit.Club),
                new Card(CardRank.Six, CardSuit.Heart),
                new Card(CardRank.Six, CardSuit.Diamond),
                new Card(CardRank.Three, CardSuit.Diamond)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #14
0
        public void StraightTest()
        {
            HandCategory expectedCategory = HandCategory.Straight;
            Card         expectedHighCard = new Card(CardRank.Six, CardSuit.Diamond);

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Two, CardSuit.Spade),
                new Card(CardRank.Five, CardSuit.Diamond),
                new Card(CardRank.Four, CardSuit.Diamond),
                new Card(CardRank.Six, CardSuit.Diamond),
                new Card(CardRank.Three, CardSuit.Diamond)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #15
0
        public void FlushTest()
        {
            HandCategory expectedCategory = HandCategory.Flush;
            Card         expectedHighCard = new Card(CardRank.Queen, CardSuit.Diamond);

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Queen, CardSuit.Diamond),
                new Card(CardRank.Eight, CardSuit.Diamond),
                new Card(CardRank.Five, CardSuit.Diamond),
                new Card(CardRank.Three, CardSuit.Diamond),
                new Card(CardRank.Seven, CardSuit.Diamond)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #16
0
        public void FullHouse2Low3HighTest()
        {
            HandCategory expectedCategory = HandCategory.FullHouse;
            Card         expectedHighCard = new Card(CardRank.Jack, CardSuit.Spade);

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Five, CardSuit.Spade),
                new Card(CardRank.Jack, CardSuit.Club),
                new Card(CardRank.Five, CardSuit.Heart),
                new Card(CardRank.Five, CardSuit.Diamond),
                new Card(CardRank.Jack, CardSuit.Spade)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #17
0
        public void StraightFlushTest()
        {
            HandCategory expectedCategory = HandCategory.StraightFlush;
            Card         expectedHighCard = new Card(CardRank.Ace, CardSuit.Spade);

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Ten, CardSuit.Spade),
                new Card(CardRank.Jack, CardSuit.Spade),
                new Card(CardRank.Queen, CardSuit.Spade),
                new Card(CardRank.King, CardSuit.Spade),
                new Card(CardRank.Ace, CardSuit.Spade)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #18
0
        public void FourOfAKindHighTest()
        {
            HandCategory expectedCategory = HandCategory.FourOfAKind;
            Card         expectedHighCard = new Card(CardRank.Jack, CardSuit.Spade); // High card should *not* be the Ace of Spades.

            ObservableCollection <Card> cards = new ObservableCollection <Card> {
                new Card(CardRank.Jack, CardSuit.Spade),
                new Card(CardRank.Jack, CardSuit.Heart),
                new Card(CardRank.Jack, CardSuit.Diamond),
                new Card(CardRank.Jack, CardSuit.Club),
                new Card(CardRank.Three, CardSuit.Spade)
            };

            Hand hand = new Hand("TestName", cards);

            Assert.AreEqual(hand.Category, expectedCategory);
            Assert.AreEqual(hand.HighCard, expectedHighCard);
        }
Example #19
0
        /// <summary>
        /// Compares two poker hands.
        /// </summary>
        /// <param name="hand1">The first hand.</param>
        /// <param name="hand2">The second hand.</param>
        /// <returns>Less than zero if <paramref name="hand1"/> ranks lower than
        /// <paramref name="hand2"/>, zero if the hands are of equal value,
        /// greater than zero if <paramref name="hand1"/> ranks higher than
        /// <paramref name="hand2"/>.</returns>
        public int CompareHands(IHand hand1, IHand hand2)
        {
            HandCategory category1 = this.GetCategory(hand1);
            HandCategory category2 = this.GetCategory(hand2);

            if (category1 < category2)
            {
                // hand1 ranks lower than hand2
                return(-1);
            }

            if (category1 > category2)
            {
                // hand1 ranks above hand2
                return(1);
            }

            hand1.Sort();
            hand2.Sort();

            // hand1 and hand2 are of the same type
            switch (category1)
            {
            case HandCategory.StraightFlush:
            case HandCategory.Straight:
            {
                return(this.CompareStraightHands(hand1, hand2));
            }

            case HandCategory.FourOfAKind:
            {
                return(this.CompareFourOfAKindHands(hand1, hand2));
            }

            case HandCategory.FullHouse:
            {
                return(this.CompareFullHouseHands(hand1, hand2));
            }

            case HandCategory.Flush:
            {
                return(this.CompareHighCardHands(hand1, hand2));
            }

            case HandCategory.ThreeOfAKind:
            {
                return(this.CompareThreeOfAKindHands(hand1, hand2));
            }

            case HandCategory.TwoPair:
            {
                return(this.CompareTwoPairHands(hand1, hand2));
            }

            case HandCategory.OnePair:
            {
                return(this.CompareOnePairHands(hand1, hand2));
            }

            default:
            {
                return(this.CompareHighCardHands(hand1, hand2));
            }
            }
        }
Example #20
0
        //This Evaluates what kind of card combination player got
        public void Evaluate()
        {
            if (this.AllSameSuit() != -1 && this.Straight() != -1)
            {
                if (this.getCard(0).Value == 10)
                {
                    this.category  = HandCategory.ROYAL_FLUSH;
                    this.handValue = 9999;
                    return;
                }
                else
                {
                    this.category = HandCategory.STRAIGHT_FLUSH;
                    return;
                }
            }

            if (this.Four() != -1)
            {
                this.category = HandCategory.FOUR_OF_A_KIND;
                return;
            }

            if (this.FullHouse() != -1)
            {
                this.category = HandCategory.FULL_HOUSE;
                return;
            }

            if (this.AllSameSuit() != -1)
            {
                this.category = HandCategory.FLUSH;
                return;
            }

            if (this.Straight() != -1)
            {
                this.category = HandCategory.STRAIGHT;
                return;
            }

            if (this.Three() != -1)
            {
                this.category = HandCategory.THREE_OF_A_KIND;
                return;
            }

            if (this.TwoPairs() != -1)
            {
                this.category = HandCategory.TWO_PAIRS;
                return;
            }

            if (this.Pair() != -1)
            {
                this.category = HandCategory.ONE_PAIR;
                return;
            }

            this.handValue = this.getCard(4).Value;
            this.category  = HandCategory.HIGH_CARD;
        }
Example #21
0
 public HandGroup(Spot spot, HandCategory category, HandType type) : this(type)
 {
     this.spot     = spot;
     this.category = category;
 }
Example #22
0
        public void TestGetCategory36_ThrowsException()
        {
            IHand hand = new Hand("A♦ A♦ Q♦ J♦ 10♦");

            HandCategory category = handEvaluator.GetCategory(hand);
        }
Example #23
0
 private HandCards(CardGroup _cardGroup) : base(_cardGroup)
 {
     this.handCategory = GetCategory();
 }