public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (!HandAnalyzerHelpers.IsFlushDraw(playerCards, boardCards, 1))
            {
                return(false);
            }

            var drawSuit = boardCards.GroupBy(x => x.CardSuit).FirstOrDefault(x => x.Count() == 3)?.Key;

            return((drawSuit != null) && HandAnalyzerHelpers.IsWeakKicker(playerCards.OrderByDescending(x => x.Rank).First(x => x.CardSuit == drawSuit)));
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (boardCards == null || boardCards.Count() == 0)
            {
                return(false);
            }

            if (HandAnalyzerHelpers.IsFlush(boardCards) && HandAnalyzerHelpers.IsStraight(boardCards, true))
            {
                return(true);
            }
            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            if (!HandAnalyzerHelpers.HasPair(playerCards, 1))
            {
                return(false);
            }

            return(boardCards.GroupBy(x => x.Rank).Any(g => (g.Count() == 2) && (g.Key == playerCards.First().Rank)));
        }
Пример #4
0
        private Expression <Func <Playerstatistic, bool> > GetHandPredicate(QuickFilterHandTypeEnum handType)
        {
            switch (handType)
            {
            case QuickFilterHandTypeEnum.None:
                break;

            case QuickFilterHandTypeEnum.StraightDrawOnFlop:
                return(PredicateBuilder.Create <Playerstatistic>(x => CardHelper.IsStreetAvailable(x.Board, Street.Flop) &&
                                                                 Hand.IsStraightDraw(x.Cards, BoardCards.FromCards(x.Board).GetBoardOnStreet(Street.Flop).ToString(), string.Empty)));

            case QuickFilterHandTypeEnum.FlushDrawOnFlop:
                return(PredicateBuilder.Create <Playerstatistic>(x => CardHelper.IsStreetAvailable(x.Board, Street.Flop) &&
                                                                 Hand.IsFlushDraw(x.Cards, BoardCards.FromCards(x.Board).GetBoardOnStreet(Street.Flop).ToString(), string.Empty)));

            case QuickFilterHandTypeEnum.MarginalHand:
                return(PredicateBuilder.Create <Playerstatistic>(x => HandAnalyzerHelpers.IsMarginalHand(x.Cards)));

            case QuickFilterHandTypeEnum.LessThanMidPairOnRiver:
                return(PredicateBuilder.Create <Playerstatistic>(x => CardHelper.IsStreetAvailable(x.Board, Street.River) &&
                                                                 new HandAnalyzer(new IAnalyzer[] { new LessThanMidPairAnalyzer() })
                                                                 .Analyze(CardGroup.Parse(x.Cards), BoardCards.FromCards(x.Board).GetBoardOnStreet(Street.River))
                                                                 .GetRank() == ShowdownHands.LessThanMidPair));

            case QuickFilterHandTypeEnum.FlopTPOrBetter:
                return(PredicateBuilder.Create <Playerstatistic>(x => CardHelper.IsStreetAvailable(x.Board, Street.Flop) &&
                                                                 new HandAnalyzer(new IAnalyzer[] { new LessThanMidPairAnalyzer() })
                                                                 .Analyze(CardGroup.Parse(x.Cards), BoardCards.FromCards(x.Board).GetBoardOnStreet(Street.Flop))
                                                                 .GetRank() == ShowdownHands.LessThanMidPair));

            case QuickFilterHandTypeEnum.PremiumHand:
                return(PredicateBuilder.Create <Playerstatistic>(x => HandAnalyzerHelpers.IsPremiumHand(x.Cards)));

            case QuickFilterHandTypeEnum.NonPremiumHand:
                return(PredicateBuilder.Create <Playerstatistic>(x => !HandAnalyzerHelpers.IsPremiumHand(x.Cards)));

            case QuickFilterHandTypeEnum.BluffRange:
                return(PredicateBuilder.Create <Playerstatistic>(x => HandAnalyzerHelpers.IsBluffRange(x.Cards)));

            default:
                break;
            }

            return(PredicateBuilder.True <Playerstatistic>());
        }
        public virtual bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (HandAnalyzerHelpers.IsNoOfKind(allCards, 3) || HandAnalyzerHelpers.IsNoOfKind(allCards, 4))
            {
                return(false);
            }

            return(HandAnalyzerHelpers.HasPair(playerCards, 1) && HandAnalyzerHelpers.HasPair(boardCards, 1));
        }
Пример #6
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            if (playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)))
            {
                return(false);
            }

            var rankList = HandAnalyzerHelpers.CombineCardLists(playerCards, boardCards).Where(x => x.Rank != (int)DataTypes.Card.GetCardRank("A")).Select(x => x.Rank).Distinct().ToList();

            rankList.Sort();

            List <int> straightDraw = new List <int>();

            for (int i = 0; i < rankList.Count; i++)
            {
                if (!straightDraw.Any() || (rankList[i] == straightDraw.Last() + 1))
                {
                    straightDraw.Add(rankList[i]);
                    continue;
                }

                if (straightDraw.Count == 4)
                {
                    if (HandAnalyzerHelpers.IsStraight(straightDraw) &&
                        playerCards.Any(x => straightDraw.Contains(x.Rank)) &&
                        playerCards.Any(x => !straightDraw.Contains(x.Rank)))
                    {
                        return(true);
                    }
                }

                straightDraw.Clear();
                straightDraw.Add(rankList[i]);
            }

            return(false);
        }
Пример #7
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count != 2 || !boardCards.Any())
            {
                return(false);
            }

            if (HandAnalyzerHelpers.HasPair(playerCards, 1))
            {
                return(false);
            }

            if (!HandAnalyzerHelpers.IsNoOfKind(boardCards, 3))
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(playerCards, boardCards);

            if (HandAnalyzerHelpers.IsNoOfKind(allCards, 4))
            {
                return(false);
            }

            var groupedCards = allCards.GroupBy(x => x.Rank).OrderByDescending(x => x.Key);

            var trips = groupedCards.FirstOrDefault(x => x.Count() == 3);

            if (trips != null)
            {
                var pair = groupedCards.Where(x => x.Key != trips.Key).Where(x => x.Count() >= 2);

                if (playerCards.Any(x => pair.Any(y => y.Key == x.Rank)))
                {
                    return(true);
                }
            }

            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            if (playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)) ||
                HandAnalyzerHelpers.HasPair(playerCards, 1))
            {
                return(false);
            }


            var sortedBoard = boardCards.OrderBy(x => x.Rank);

            for (int i = sortedBoard.Count() - 1; i >= 2; i--)
            {
                var curCards = sortedBoard.Skip(i - 2);
                if (curCards.Count() >= 3)
                {
                    curCards = curCards.Take(3);
                    var nutStraight = GetNutStraightForCards(curCards);
                    if (nutStraight != null)
                    {
                        var requiredPocketCards = nutStraight.Where(x => !curCards.Any(c => c.Rank == x));
                        if (playerCards.All(x => requiredPocketCards.Contains(x.Rank)))
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }

            return(false);
        }
        public int Analyze(string boardCards, Street targetStreet)
        {
            var cards = BoardTextureAnalyzerHelpers.ParseStringSequenceOfCards(boardCards);

            if (string.IsNullOrEmpty(boardCards) || !BoardTextureAnalyzerHelpers.IsStreetAvailable(cards, targetStreet))
            {
                return(0);
            }

            int numberOfOpenEndedStraights = 0;

            var orderedRanks = BoardTextureAnalyzerHelpers.GetOrderedBoardNumericRanks(cards, targetStreet);

            if (orderedRanks.Count < 2)
            {
                return(0);
            }

            int firstRank = orderedRanks.Max() + 2;

            while (firstRank > orderedRanks.Min() - 2)
            {
                firstRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank);
                var secondRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank - 1);
                if (secondRank <= 0)
                {
                    break;
                }

                var connectedList = new List <int>(orderedRanks);
                connectedList.Add(secondRank);
                connectedList = HandAnalyzerHelpers.GetConnectedCards(firstRank, connectedList);

                if (connectedList.Count > 4)
                {
                    numberOfOpenEndedStraights += HandAnalyzerHelpers.IsStraight(connectedList.OrderByDescending(x => x).Take(5).ToList()) ? 1 : 0;
                }
                firstRank--;
            }

            return(numberOfOpenEndedStraights);
        }
Пример #10
0
        public bool Analyze(BoardCards boardCards, BoardTextureItem boardTexture)
        {
            var boardTextureItem = boardTexture as StraightBoardTextureItem;

            if (boardTextureItem == null || !CardHelper.IsStreetAvailable(boardCards.ToString(), boardTextureItem.TargetStreet))
            {
                return(false);
            }

            int numberOfOpenEndedStraights = 0;

            var orderedRanks = BoardTextureAnalyzerHelpers.GetOrderedBoardNumericRanks(boardCards, boardTextureItem);

            if (orderedRanks.Count < 2)
            {
                return(false);
            }

            int firstRank = orderedRanks.Max() + 2;

            while (firstRank > orderedRanks.Min() - 2)
            {
                firstRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank);
                var secondRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank - 1);
                if (secondRank <= 0)
                {
                    break;
                }

                var connectedList = new List <int>(orderedRanks);
                connectedList.Add(secondRank);
                connectedList = HandAnalyzerHelpers.GetConnectedCards(firstRank, connectedList);

                if (connectedList.Count > 4)
                {
                    numberOfOpenEndedStraights += HandAnalyzerHelpers.IsStraight(connectedList.OrderByDescending(x => x).Take(5)) ? 1 : 0;
                }
                firstRank--;
            }

            return(BoardTextureAnalyzerHelpers.CheckEquality(boardTextureItem.SelectedSign.Key, numberOfOpenEndedStraights, boardTextureItem.SelectedNumber));
        }
Пример #11
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            List <DataTypes.Card> consideredCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (HandAnalyzerHelpers.HasPair(playerCards, 1) && HandAnalyzerHelpers.HasPair(consideredCards, 1))
            {
                if (boardCards.Count(x => x.Rank > playerCards.First().Rank) == 1)
                {
                    return(true);
                }
            }
            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (!HandAnalyzerHelpers.HasPair(playerCards, 1) || !HandAnalyzerHelpers.IsNoOfKind(allCards, 3))
            {
                return(false);
            }

            var lowCardRank = boardCards.Min(x => x.Rank);

            return(playerCards.Any(x => x.Rank == lowCardRank));
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (!HandAnalyzerHelpers.HasPair(playerCards, 1) || !HandAnalyzerHelpers.IsNoOfKind(allCards, 3))
            {
                return(false);
            }

            var secondBoardCardRank = boardCards.OrderByDescending(x => x.Rank).Distinct().ElementAt(1).Rank;

            return(playerCards.Any(x => x.Rank == secondBoardCardRank));
        }
Пример #14
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            List <DataTypes.Card> consideredCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (HandAnalyzerHelpers.HasPair(playerCards, 1) &&
                HandAnalyzerHelpers.HasPair(consideredCards, 1) &&
                !new PocketPairOverpairAnalyzer().Analyze(playerCards, allBoardCards, targetStreet) &&
                !new PocketPairSecondPairAnalyzer().Analyze(playerCards, allBoardCards, targetStreet))
            {
                return(true);
            }

            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 4)
            {
                return(false);
            }

            if (!HandAnalyzerHelpers.IsFlush(playerCards))
            {
                return(false);
            }

            var sortedBoard = boardCards.OrderBy(x => x.Rank);

            for (int i = 0; i < sortedBoard.Count() - 4; i++)
            {
                var cards = sortedBoard.Take(4).ToList();

                if (!HandAnalyzerHelpers.IsFlush(cards))
                {
                    return(false);
                }

                foreach (var card in playerCards)
                {
                    var straightFlushCards = new List <DataTypes.Card>(cards);
                    straightFlushCards.Add(card);
                    if (HandAnalyzerHelpers.IsFlush(straightFlushCards) && HandAnalyzerHelpers.IsStraight(straightFlushCards, true))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            if (playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)) || HandAnalyzerHelpers.HasPair(playerCards, 1))
            {
                return(false);
            }

            var sortedBoard = boardCards.OrderBy(x => x.Rank).ToList();

            if (sortedBoard.Any(x => x.Rank == (int)DataTypes.Card.GetCardRank("A")) &&
                sortedBoard.Any(x => x.Rank == (int)DataTypes.Card.GetCardRank("2")))
            {
                sortedBoard.Insert(0, new DataTypes.Card("Ac"));
            }

            for (int i = sortedBoard.Count() - 1; i >= 2; i--)
            {
                var curCards = sortedBoard.Skip(i - 2).ToList();
                if (curCards.Count() >= 3)
                {
                    curCards.AddRange(playerCards);
                    curCards = curCards.OrderByDescending(x => x.Rank).Take(5).ToList();
                    if (HandAnalyzerHelpers.IsStraight(curCards, true))
                    {
                        return(playerCards.All(p => curCards.Any(c => c.Rank == p.Rank)));
                    }
                }
            }

            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            if (HandAnalyzerHelpers.HasPair(playerCards, 1))
            {
                return(false);
            }

            var trips = boardCards.GroupBy(x => x.Rank).FirstOrDefault(x => x.Count() == 3);

            if (trips != null)
            {
                return(playerCards.Any(x => x.Rank == trips.Key));
            }

            return(false);
        }
Пример #18
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 4)
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            var suitGroup = allCards.GroupBy(x => x.CardSuit);

            if (suitGroup.Any(g => g.Count() >= 5))
            {
                var flushBoardCards = suitGroup.First(g => g.Count() >= 5).OrderByDescending(x => x.Rank).Take(5);
                if (playerCards.All(x => flushBoardCards.All(f => f.CardSuit != x.CardSuit)))
                {
                    return(HandAnalyzerHelpers.IsWeakKicker(flushBoardCards.First()));
                }
            }
            return(false);
        }
Пример #19
0
        public virtual bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            List <DataTypes.Card> consideredCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (HandAnalyzerHelpers.HasPair(playerCards, 1) || !HandAnalyzerHelpers.HasPair(consideredCards, 1))
            {
                return(false);
            }

            if (playerCards.Any(c => c.Rank == boardCards.Max(x => x.Rank)))
            {
                return(true);
            }

            return(false);
        }
Пример #20
0
        private bool CheckIfHasStraight(List <DataTypes.Card> cards)
        {
            if (cards.Count < 5)
            {
                return(false);
            }

            //bool flag = false;
            for (int i = 0; i < cards.Count - 4; i++)
            {
                if (HandAnalyzerHelpers.IsStraight(cards.GetRange(i, 5), true) ||
                    HandAnalyzerHelpers.IsStraight(cards.GetRange(i, 5), false))
                {
                    return(true);
                    //flag = true;
                    //break;
                }
            }
            //if (flag)
            //    return false;

            return(false);
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            return(HandAnalyzerHelpers.IsFlushDraw(playerCards, boardCards, 2, isBackdoor: true));
        }
Пример #22
0
        public bool Analyze(BoardCards boardCards, BoardTextureItem boardTexture)
        {
            var boardTextureItem = boardTexture as StraightBoardTextureItem;

            if (boardTextureItem == null || !CardHelper.IsStreetAvailable(boardCards.ToString(), boardTextureItem.TargetStreet))
            {
                return(false);
            }

            int numberOfOpenEndedStraights = 0;

            var orderedRanks = BoardTextureAnalyzerHelpers.GetOrderedBoardNumericRanks(boardCards, boardTextureItem);

            if (orderedRanks.Count < 2)
            {
                return(false);
            }

            int  firstRank     = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, orderedRanks.Max() + 2);
            int  initFirstRank = firstRank;
            int  nutRank       = 0;
            bool isNutFound    = false;

            while (firstRank > orderedRanks.Min() - 2)
            {
                firstRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank);
                if (isNutFound && firstRank <= nutRank)
                {
                    break;
                }

                var secondRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank - 1);
                if (secondRank <= 0)
                {
                    break;
                }

                var connectedList = new List <int>(orderedRanks);
                connectedList.Add(secondRank);
                connectedList = HandAnalyzerHelpers.GetConnectedCards(firstRank, connectedList);

                if (connectedList.Count > (isNutFound ? 3 : 4))
                {
                    var  hand       = connectedList.OrderByDescending(x => x).Take(isNutFound ? 4 : 5);
                    bool isStraight = HandAnalyzerHelpers.IsStraight(hand);
                    if (isStraight)
                    {
                        if (!isNutFound)
                        {
                            isNutFound = true;
                            firstRank  = initFirstRank;
                            nutRank    = hand.Max();
                            continue;
                        }
                        else
                        {
                            numberOfOpenEndedStraights++;
                        }
                    }
                }
                firstRank--;
            }

            return(BoardTextureAnalyzerHelpers.CheckEquality(boardTextureItem.SelectedSign.Key, numberOfOpenEndedStraights, boardTextureItem.SelectedNumber));
        }
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || !boardCards.Any())
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards);

            if (HandAnalyzerHelpers.HasPair(playerCards, 1) || HandAnalyzerHelpers.IsNoOfKind(boardCards, 3) || !HandAnalyzerHelpers.IsNoOfKind(allCards, 3))
            {
                return(false);
            }

            if (boardCards.Count(x => x.Rank == boardCards.Max(b => b.Rank)) == 2 &&
                playerCards.Any(x => x.Rank == boardCards.Max(b => b.Rank)))
            {
                var kicker = playerCards.FirstOrDefault(p => boardCards.All(b => b.Rank != p.Rank));
                if (kicker != null)
                {
                    return(HandAnalyzerHelpers.IsDecentKicker(kicker));
                }
            }

            return(false);
        }
Пример #24
0
        public bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet)
        {
            List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet);

            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            if (playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)))
            {
                return(false);
            }

            var allCards = HandAnalyzerHelpers.CombineCardLists(playerCards, boardCards);
            var rankList = allCards.Select(x => x.Rank).Distinct().ToList();

            if (allCards.Any(x => x.Rank == (int)DataTypes.Card.GetCardRank("A")))
            {
                rankList.Add(1);
            }
            rankList.Sort();

            List <int> currentSequence  = new List <int>();
            List <int> previousSequence = new List <int>();

            for (int i = 0; i < rankList.Count; i++)
            {
                if (!currentSequence.Any() || (rankList[i] == currentSequence.Last() + 1))
                {
                    currentSequence.Add(rankList[i]);
                    continue;
                }

                if (currentSequence.Count >= 1 && currentSequence.Count <= 3)
                {
                    if (!previousSequence.Any())
                    {
                        previousSequence = new List <int>(currentSequence);
                    }
                    else if ((previousSequence.Max() == currentSequence.Min() - 2) && (previousSequence.Count + currentSequence.Count >= 4))
                    {
                        if (HandAnalyzerHelpers.IsStraight(currentSequence) &&
                            HandAnalyzerHelpers.IsStraight(previousSequence))
                        {
                            if (previousSequence.Contains(1))
                            {
                                previousSequence[previousSequence.IndexOf(1)] = (int)DataTypes.Card.GetCardRank("A");
                            }

                            if (playerCards.All(p => currentSequence.Contains(p.Rank) || previousSequence.Contains(p.Rank)))
                            {
                                return(true);
                            }
                        }
                    }
                }

                previousSequence = new List <int>(currentSequence);
                currentSequence.Clear();
                currentSequence.Add(rankList[i]);
            }

            return(false);
        }
Пример #25
0
        public void TestPremiumHand(string cards, bool isPremium)
        {
            var result = HandAnalyzerHelpers.IsPremiumHand(cards);

            Assert.That(result, Is.EqualTo(isPremium));
        }