コード例 #1
0
        internal static bool IsFlushDraw(IEnumerable <Card> playerCards, IEnumerable <Card> boardCards, int amountOfPlayersCardsInDraw, bool isBackdoor = false)
        {
            if (playerCards == null || boardCards == null || playerCards.Count() != 2 || boardCards.Count() < 3)
            {
                return(false);
            }

            var allCards   = HandAnalyzerHelpers.CombineCardLists(playerCards, boardCards);
            var suitGroups = allCards.GroupBy(x => x.CardSuit);
            var drawGroup  = suitGroups.FirstOrDefault(x => x.Count() == (isBackdoor ? 3 : 4));

            if (drawGroup == null || suitGroups.Any(x => x.Count() > drawGroup.Count()) || playerCards.Count(x => drawGroup.Any(d => d.CardSuit == x.CardSuit)) != amountOfPlayersCardsInDraw)
            {
                return(false);
            }

            return(true);
        }
コード例 #2
0
        /// <summary>
        /// Determines if it's possible to create straight using specified card
        /// </summary>
        /// <param name="playerCard"></param>
        /// <param name="boardCards"></param>
        /// <returns></returns>
        internal static bool IsOneCardStraight(Card playerCard, IEnumerable <Card> boardCards)
        {
            if (boardCards == null || boardCards.Count() < 4)
            {
                return(false);
            }
            var sortedBoardRanks = boardCards.Select(x => x.Rank).Distinct().ToList();

            sortedBoardRanks.Sort();
            if (sortedBoardRanks.Contains((int)Card.GetCardRank("A")))
            {
                sortedBoardRanks.Insert(0, 1);
            }

            if (sortedBoardRanks.Count < 4)
            {
                return(false);
            }

            for (int i = 0; i <= sortedBoardRanks.Count - 4; i++)
            {
                var curCards = sortedBoardRanks.Skip(i);
                if (curCards.Count() >= 4)
                {
                    var list = new List <int>(curCards.Take(4));
                    list.Add(playerCard.Rank);

                    if (HandAnalyzerHelpers.IsStraight(list) && !boardCards.Any(x => x.Rank == playerCard.Rank))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }