Пример #1
0
 public static PokerScoreOuts CalculateRiver(SixCardHand cards)
 {
     //if there are 4 of the same suit there are 9 more of that suit we can hit
     return(cards.CountFlush() == 4
         ? PokerHelper.CreateRiverOuts(9)
         : PokerHelper.CreateRiverOuts(0));
 }
        public void RemoveThreePairSuited()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Ace, Suit.Clubs),
                new Card(Rank.Six, Suit.Hearts),
                new Card(Rank.Six, Suit.Clubs),
                new Card(Rank.Queen, Suit.Diamonds),
                new Card(Rank.Queen, Suit.Hearts),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();
            watch.Start();
            var newCards = hand.RemovePairs();

            watch.Stop();

            Assert.AreEqual(3, newCards.Count);
            Assert.Greater(25, watch.ElapsedMilliseconds);
            Assert.AreEqual(true, newCards[0].Rank == Rank.Six && newCards[0].Suit == Suit.Hearts &&
                            newCards[1].Rank == Rank.Queen &&
                            newCards[2].Rank == Rank.Ace && newCards[2].Suit == Suit.Hearts);
        }
        public void ThreeOfAKindToFour()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Six, Suit.Diamonds),
                new Card(Rank.Five, Suit.Hearts),
                new Card(Rank.Six, Suit.Clubs),
                new Card(Rank.Six, Suit.Spades),
                new Card(Rank.Queen, Suit.Clubs),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();

            watch.Start();
            var current = PokerEvaluator.CalculateTurnScore(hand.Cards);
            var outs    = PokerOutsCalculator.CalculateRiverOuts(hand, current);

            watch.Stop();

            Assert.AreEqual(1, outs.FourOfAKind.Outs);
            Assert.AreEqual(false, outs.FourOfAKind.RunnerRunner);

            Assert.Greater(200, watch.ElapsedMilliseconds);
        }
        public void OneInsideSFlushHighAce()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Queen, Suit.Hearts),
                new Card(Rank.Five, Suit.Hearts),
                new Card(Rank.Jack, Suit.Hearts),
                new Card(Rank.Five, Suit.Hearts),
                new Card(Rank.Ten, Suit.Hearts),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();

            watch.Start();
            var score = PokerEvaluator.CalculateFlopScore(hand.Cards);
            var outs  = PokerOutsCalculator.CalculateRiverOuts(hand, score);

            watch.Stop();

            Assert.AreEqual(1, outs.StraightFlush.Outs);
            Assert.Greater(200, watch.ElapsedMilliseconds);
        }
        public void OneInsideStraightDrawWithHighAceWithTwoPair()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Queen, Suit.Diamonds),
                new Card(Rank.King, Suit.Hearts),
                new Card(Rank.Ten, Suit.Clubs),
                new Card(Rank.Queen, Suit.Spades),
                new Card(Rank.King, Suit.Hearts),
                new Card(Rank.Ace, Suit.Diamonds),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();

            watch.Start();
            var score = PokerEvaluator.CalculateFlopScore(hand.Cards);
            var outs  = PokerOutsCalculator.CalculateRiverOuts(hand, score);

            watch.Stop();

            Assert.AreEqual(4, outs.Straight.Outs);
            Assert.Greater(200, watch.ElapsedMilliseconds);
        }
        public void OneInsideSFlushDrawWithTwoPair()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Four, Suit.Spades),
                new Card(Rank.Four, Suit.Hearts),
                new Card(Rank.Five, Suit.Hearts),
                new Card(Rank.Six, Suit.Hearts),
                new Card(Rank.Eight, Suit.Hearts),
                new Card(Rank.Six, Suit.Diamonds),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();

            watch.Start();
            var score = PokerEvaluator.CalculateFlopScore(hand.Cards);
            var outs  = PokerOutsCalculator.CalculateRiverOuts(hand, score);

            watch.Stop();

            Assert.AreEqual(1, outs.StraightFlush.Outs);
            Assert.Greater(200, watch.ElapsedMilliseconds);
        }
        public void RemovePair()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Ace, Suit.Clubs),
                new Card(Rank.Six, Suit.Hearts),
                new Card(Rank.Seven, Suit.Clubs),
                new Card(Rank.Jack, Suit.Hearts),
                new Card(Rank.Queen, Suit.Clubs),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();
            watch.Start();
            var newCards = hand.RemovePairs();

            watch.Stop();

            Assert.AreEqual(5, newCards.Count);
            Assert.Greater(10, watch.ElapsedMilliseconds);
            Assert.AreEqual(true, newCards[0].Rank == Rank.Six && newCards[1].Rank == Rank.Seven &&
                            newCards[2].Rank == Rank.Jack && newCards[3].Rank == Rank.Queen &&
                            newCards[4].Rank == Rank.Ace);
        }
Пример #8
0
        public void OneOutsideRFlushWithTwoPair()
        {
            Stopwatch   watch = new Stopwatch();
            List <Card> cards = new List <Card>
            {
                new Card(Rank.Ten, Suit.Hearts),
                new Card(Rank.Jack, Suit.Hearts),
                new Card(Rank.Queen, Suit.Hearts),
                new Card(Rank.King, Suit.Hearts),
                new Card(Rank.Jack, Suit.Clubs),
                new Card(Rank.Queen, Suit.Diamonds),
            };

            SixCardHand hand = new SixCardHand(cards);

            hand.Sort();

            watch.Start();
            var score = PokerEvaluator.CalculateFlopScore(hand.Cards);
            var outs  = PokerOutsCalculator.CalculateRiverOuts(hand, score);

            watch.Stop();

            Assert.AreEqual(1, outs.RoyalFlush.Outs);
            Assert.Greater(250, watch.ElapsedMilliseconds);
        }
 public static int CalculateRiver(SixCardHand cards)
 {
     if (cards.HasOutsideStraightDraw())
     {
         return(6);
     }
     return(0);
 }
Пример #10
0
        public static PokerScoreOuts CalculateRiver(SixCardHand cards)
        {
            if (cards.HasThreePair())
            {
                return(PokerHelper.CreateRiverOuts(6));
            }
            if (cards.HasThreeOfAKind())
            {
                return(PokerHelper.CreateRiverOuts(9));
            }
            if (cards.HasTwoPair())
            {
                return(PokerHelper.CreateRiverOuts(4));
            }

            return(PokerHelper.CreateRiverOuts(0));
        }
 public static PokerScoreOuts CalculateRiver(SixCardHand cards)
 {
     return(cards.HasThreeOfAKind()
         ? PokerHelper.CreateRiverOuts(1)
         : PokerHelper.CreateRiverOuts(0));
 }
 public static int CalculateRiver(SixCardHand cards)
 {
     return(0);
 }
Пример #13
0
 public static PokerScoreOuts CalculateRiver(SixCardHand cards)
 {
     return(new PokerScoreOuts {
         Outs = 2, Percentage = 4.3, RunnerRunner = false
     });
 }
Пример #14
0
        public static PokerScoreOuts CalculateRiver(SixCardHand cards)
        {
            ISet <int> inside  = new HashSet <int>(),
                       outside = new HashSet <int>();

            var withoutPair = cards.RemovePairs();
            var handList    = new List <int> {
                cards.Cards[0].ToInt(), cards.Cards[1].ToInt(), cards.Cards[2].ToInt(), cards.Cards[3].ToInt(), cards.Cards[4].ToInt(), cards.Cards[5].ToInt()
            };

            if (withoutPair.Count <= 3)
            {
                return(PokerHelper.CreateRiverOuts(0));
            }
            if (withoutPair.Count == 4)
            {
                if (withoutPair[3].Rank == Rank.Ace && withoutPair[2].Rank <= Rank.Five)
                {
                    withoutPair = new List <Card> {
                        withoutPair[3], withoutPair[0], withoutPair[1], withoutPair[2]
                    }
                }
                ;

                outside = PokerHelper.CountOutsideStraightDraws(handList, withoutPair);
                if (outside.Count > 0)
                {
                    return(PokerHelper.CreateTurnOuts(outside.Count * 4, false));
                }

                inside = PokerHelper.CountInsideStraightDraws(handList, withoutPair);
                if (inside.Count > 0)
                {
                    return(PokerHelper.CreateTurnOuts(inside.Count * 4, false));
                }

                return(PokerHelper.CreateRiverOuts(0));
            }
            if (withoutPair.Count == 5)
            {
                if (withoutPair[4].Rank == Rank.Ace && withoutPair[2].Rank <= Rank.Five)
                {
                    var comb = new List <Card> {
                        withoutPair[4], withoutPair[0], withoutPair[1], withoutPair[2]
                    };
                    outside.UnionWith(PokerHelper.CountOutsideStraightDraws(handList, comb));
                    if (outside.Count > 0)
                    {
                        return(PokerHelper.CreateTurnOuts(outside.Count * 4, false));
                    }

                    inside.UnionWith(PokerHelper.CountInsideStraightDraws(handList, comb));
                    if (inside.Count > 0)
                    {
                        return(PokerHelper.CreateTurnOuts(inside.Count * 4, false));
                    }
                }

                foreach (var comb in PokerEnumerator.GetFourCardsFromFive(withoutPair))
                {
                    outside.UnionWith(PokerHelper.CountOutsideStraightDraws(handList, comb));
                    inside.UnionWith(PokerHelper.CountInsideStraightDraws(handList, comb));
                }

                outside.UnionWith(inside);
                if (outside.Count > 0)
                {
                    return(PokerHelper.CreateRiverOuts(outside.Count * 4));
                }
                return(PokerHelper.CreateRiverOuts(0));
            }
            if (withoutPair.Count == 6)
            {
                if (withoutPair[5].Rank == Rank.Ace && withoutPair[2].Rank <= Rank.Five)
                {
                    var comb = new List <Card> {
                        withoutPair[5], withoutPair[0], withoutPair[1], withoutPair[2]
                    };
                    outside.UnionWith(PokerHelper.CountOutsideStraightDraws(handList, comb));
                    inside.UnionWith(PokerHelper.CountInsideStraightDraws(handList, comb));
                }

                foreach (var comb in PokerEnumerator.GetFourCardsFromSix(withoutPair))
                {
                    outside.UnionWith(PokerHelper.CountOutsideStraightDraws(handList, comb));
                    inside.UnionWith(PokerHelper.CountInsideStraightDraws(handList, comb));
                }

                outside.UnionWith(inside);
                if (outside.Count > 0)
                {
                    return(PokerHelper.CreateRiverOuts(outside.Count * 4));
                }
                return(PokerHelper.CreateRiverOuts(0));
            }
            throw new ArgumentException("Without pair count should never be more than six");
        }
    }
Пример #15
0
 public static PokerScoreOuts CalculateRiver(SixCardHand cards)
 {
     return(PokerHelper.CreateRiverOuts(18));
 }
Пример #16
0
 public static int CalculateRiver(SixCardHand cards)
 {
     //if there are 4 of the same suit there are 9 more of that suit we can hit
     return(cards.CountFlush() == 4 ? 9 : 0);
 }
        public static PokerOuts CalculateRiverOuts(SixCardHand cards, Pokerscore currentScore)
        {
            cards.Sort();
            PokerOuts.Clear();

            switch (currentScore)
            {
            case Pokerscore.RoyalFlush:
                return(PokerOuts);

            case Pokerscore.StraightFlush:
                PokerOuts.RoyalFlush = RoyalFlushCalculator.CalculateRiver(cards);
                return(PokerOuts);

            case Pokerscore.FourOfAKind:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                return(PokerOuts);

            case Pokerscore.FullHouse:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.FourOfAKind   = FourOfAKindCalculator.RiverOutsDictionary[currentScore];  //done
                return(PokerOuts);

            case Pokerscore.Flush:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.FourOfAKind   = FourOfAKindCalculator.CalculateRiver(cards);
                PokerOuts.FullHouse     = FullHouseCalculator.CalculateRiver(cards);
                return(PokerOuts);

            case Pokerscore.Straight:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.FourOfAKind   = FourOfAKindCalculator.CalculateRiver(cards);
                PokerOuts.FullHouse     = FullHouseCalculator.CalculateRiver(cards);
                PokerOuts.Flush         = FlushCalculator.CalculateRiver(cards);//done
                return(PokerOuts);

            case Pokerscore.ThreeOfAKind:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.FourOfAKind   = FourOfAKindCalculator.RiverOutsDictionary[currentScore]; //done
                PokerOuts.FullHouse     = FullHouseCalculator.RiverOutsDictionary[currentScore];   //done
                PokerOuts.Flush         = FlushCalculator.CalculateRiver(cards);                   //done
                PokerOuts.Straight      = StraightCalculator.CalculateRiver(cards);
                return(PokerOuts);

            case Pokerscore.TwoPair:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.FullHouse     = FullHouseCalculator.RiverOutsDictionary[currentScore]; //done
                PokerOuts.Flush         = FlushCalculator.CalculateRiver(cards);                 //done
                PokerOuts.Straight      = StraightCalculator.CalculateRiver(cards);
                return(PokerOuts);

            case Pokerscore.Pair:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.Flush         = FlushCalculator.CalculateRiver(cards);        //done
                PokerOuts.ThreeOfAKind  = ThreeOfAKindCalculator.CalculateRiver(cards); //done
                PokerOuts.Straight      = StraightCalculator.CalculateRiver(cards);
                PokerOuts.TwoPair       = TwoPairCalculator.CalculateRiver(cards);      //done
                return(PokerOuts);

            case Pokerscore.None:
                PokerOuts.RoyalFlush    = RoyalFlushCalculator.CalculateRiver(cards);
                PokerOuts.StraightFlush = StraightFlushCalculator.CalculateRiver(cards);
                PokerOuts.Flush         = FlushCalculator.CalculateRiver(cards); //done
                PokerOuts.Straight      = StraightCalculator.CalculateRiver(cards);
                PokerOuts.Pair          = PairCalculator.CalculateRiver(cards);  //done
                return(PokerOuts);

            default:
                return(null);
            }
        }
 public static int CalculateRiver(SixCardHand cards)
 {
     //Check if there are 3 cards with the same rank, if there are return 1 else return 0
     return(0);
 }