Beispiel #1
0
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 2)
            {
                return(false);
            }

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

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

            var pairs = allCards.GroupBy(x => x.RankNumericValue).OrderByDescending(x => x.Key).Where(x => x.Count() == 2);

            if (pairs != null && pairs.Count() > 1)
            {
                var bottomTwo = boardCards.OrderBy(x => x.RankNumericValue).Take(2).Distinct();
                if (bottomTwo != null && bottomTwo.Count() == 2)
                {
                    return(pairs.Take(2).All(p => bottomTwo.Any(t => t.RankNumericValue == p.Key)) &&
                           playerCards.All(x => bottomTwo.Any(t => t.RankNumericValue == x.RankNumericValue)));
                }
            }

            return(false);
        }
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

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

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

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

                if (cards.Any(x => x.Suit != playerCards.First().Suit))
                {
                    return(false);
                }

                cards.AddRange(playerCards);
                if (HandAnalyzerHelpers.IsStraight(cards, true))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #3
0
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            if (!HandAnalyzerHelpers.IsStraight(playerCards, true) || playerCards.Any(p => boardCards.Any(b => b.RankNumericValue == p.RankNumericValue)) || HandAnalyzerHelpers.IsPair(playerCards, 1))
            {
                return(false);
            }


            var sortedCards = boardCards.OrderBy(x => x.RankNumericValue).Distinct().ToList();

            if (sortedCards.Min(x => x.RankNumericValue) == Cards.Card.GetRankNumericValue("3"))
            {
                if (HandAnalyzerHelpers.IsStraight(sortedCards.Take(3)) &&
                    (boardCards.Count == 3 || (boardCards.Count > 3 && !HandAnalyzerHelpers.IsStraight(sortedCards.Take(4)))))
                {
                    if (sortedCards.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.First()))
                    {
                        return(false);
                    }

                    return(playerCards.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.First()) &&
                           playerCards.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.Last()));
                }
            }

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

            for (int i = sortedCards.Count - 1; i >= 0; i--)
            {
                if (!sequence.Any() || sequence.Min() - sortedCards.ElementAt(i).RankNumericValue == 1)
                {
                    sequence.Add(sortedCards.ElementAt(i).RankNumericValue);
                    if (i != 0)
                    {
                        continue;
                    }
                }

                if (sequence.Count == 3 && (sequence.Min() > playerCards.Max(x => x.RankNumericValue)))
                {
                    if (HandAnalyzerHelpers.IsStraight(sequence.Union(playerCards.Select(x => x.RankNumericValue))))
                    {
                        return(true);
                    }
                }

                sequence.Clear();
                sequence.Add(sortedCards.ElementAt(i).RankNumericValue);
            }

            return(false);
        }
Beispiel #4
0
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 2)
            {
                return(false);
            }

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

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

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

            var pairs       = allCards.GroupBy(x => x.RankNumericValue).OrderByDescending(x => x.Key).Where(x => x.Count() == 2);
            var sortedBoard = boardCards.OrderBy(x => x.RankNumericValue);

            if (pairs != null && pairs.Count() > 1 && sortedBoard != null && sortedBoard.Count() >= 2)
            {
                pairs = pairs.Take(2);
                var bottomTwo = boardCards.OrderBy(x => x.RankNumericValue).Take(2).Distinct();

                if (bottomTwo != null && bottomTwo.Count() == 2)
                {
                    return(pairs.Any(x => x.Key == sortedBoard.First().RankNumericValue) &&
                           pairs.Any(x => x.Key == sortedBoard.Last().RankNumericValue) &&
                           playerCards.Any(x => x.RankNumericValue == sortedBoard.First().RankNumericValue) &&
                           playerCards.Any(x => x.RankNumericValue == sortedBoard.Last().RankNumericValue));
                }
            }

            return(false);
        }
Beispiel #5
0
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 4)
            {
                return(false);
            }

            var sortedCards = boardCards.OrderBy(x => x.RankNumericValue).Distinct().ToList();

            if (sortedCards.Min(x => x.RankNumericValue) == Cards.Card.GetRankNumericValue("2"))
            {
                if (HandAnalyzerHelpers.IsStraight(sortedCards.Take(4)) &&
                    (sortedCards.Count == 4 || (sortedCards.Count > 4 && !HandAnalyzerHelpers.IsStraight(sortedCards.Take(5)))))
                {
                    if (playerCards.Any(x => x.RankNumericValue == Cards.Card.GetRankNumericValue("6")) ||
                        sortedCards.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.First()))
                    {
                        return(false);
                    }
                    return(playerCards.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.First()));
                }
            }

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

            for (int i = sortedCards.Count - 1; i >= 0; i--)
            {
                if (!sequence.Any() || (sequence.Min() - sortedCards.ElementAt(i).RankNumericValue) == 1)
                {
                    sequence.Add(sortedCards.ElementAt(i).RankNumericValue);
                    if (i != 0)
                    {
                        continue;
                    }
                }

                if (sequence.Count == 4 && playerCards.Any(x => (sequence.Min() - x.RankNumericValue) == 1) && !playerCards.Any(x => (x.RankNumericValue - sequence.Max()) == 1))
                {
                    return(true);
                }

                sequence.Clear();
                sequence.Add(sortedCards.ElementAt(i).RankNumericValue);
            }

            return(false);
        }
Beispiel #6
0
        public bool Analyze(IEnumerable <Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

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

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

            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.RankNumericValue == x));
                        if (playerCards.All(x => requiredPocketCards.Contains(x.RankNumericValue)))
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }

            return(false);
        }
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            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.RankNumericValue);

            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 <Cards.Card>(cards);
                    straightFlushCards.Add(card);
                    if (HandAnalyzerHelpers.IsFlush(straightFlushCards) && HandAnalyzerHelpers.IsStraight(straightFlushCards, true))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Beispiel #8
0
        public bool Analyze(IEnumerable <HandHistories.Objects.Cards.Card> playerCards, BoardCards boardCards)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

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

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

            if (sortedBoard.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.First()) &&
                sortedBoard.Any(x => x.Rank == Cards.Card.PossibleRanksHighCardFirst.Last()))
            {
                sortedBoard.Insert(0, new Cards.Card("A", "c"));
            }

            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.RankNumericValue).Take(5).ToList();
                    if (HandAnalyzerHelpers.IsStraight(curCards, true))
                    {
                        return(playerCards.All(p => curCards.Any(c => c.RankNumericValue == p.RankNumericValue)));
                    }
                }
            }

            return(false);
        }