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); }
/// <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); }