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 != 5) { return(false); } if (HandAnalyzerHelpers.IsStraight(boardCards, true)) { if (boardCards.Any(x => x.Rank == (int)DataTypes.Card.GetCardRank("A")) && boardCards.Any(x => x.Rank == (int)DataTypes.Card.GetCardRank("2"))) { return(!playerCards.Any(x => x.Rank == (boardCards .Where(b => b.Rank != (int)DataTypes.Card.GetCardRank("A")) .Max(m => m.Rank) + 1))); } else { return(playerCards.All(x => x.Rank != boardCards.Max(m => m.Rank) + 1)); } } return(false); }
public virtual bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allboardCards, Street targetStreet) { //retain only that card that we need for flop, turn or river calculations var boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allboardCards, targetStreet); if (playerCards == null || boardCards == null || playerCards.Count != 2 || boardCards.Count < 3) { return(false); } var allCards = boardCards.ToList(); allCards.AddRange(playerCards); if (!HandAnalyzerHelpers.HasPair(allCards, 1) && !HandAnalyzerHelpers.HasPair(allCards, 2) && !HandAnalyzerHelpers.IsNoOfKind(allCards, 3) && !HandAnalyzerHelpers.IsNoOfKind(allCards, 4)) { if (!allCards.GroupBy(x => x.CardSuit).Any(x => x.Count() >= 5)) { 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 (boardCards == null || !boardCards.Any()) { return(false); } if (HandAnalyzerHelpers.HasPair(playerCards, 1)) { return(false); } var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards); if (HandAnalyzerHelpers.IsNoOfKind(allCards, 3) || HandAnalyzerHelpers.IsNoOfKind(allCards, 4)) { return(false); } return(!HandAnalyzerHelpers.HasPair(playerCards, 1) && !playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)) && HandAnalyzerHelpers.HasPair(boardCards, 2)); }
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.Any()) { return(false); } var groupedCards = boardCards.GroupBy(x => x.Rank).OrderByDescending(x => x.Key); var trips = groupedCards.FirstOrDefault(x => x.Count() == 3); if (trips == null) { return(false); } var pair = groupedCards.Where(x => x.Key != trips.Key).FirstOrDefault(x => x.Count() >= 2); if (pair != null) { return(!playerCards.Any(x => x.Rank == trips.Key || x.Rank == pair.Key)); } 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); } var allCards = HandAnalyzerHelpers.CombineCardLists(boardCards, playerCards); var suitGroup = allCards.GroupBy(x => x.CardSuit); if (suitGroup.Any(g => g.Count() >= 5)) { var flushBoardCards = suitGroup.Where(g => g.Count() >= 5).First().OrderByDescending(x => x.Rank).Take(5); if (playerCards.Any(x => flushBoardCards.Any(f => f.CardSuit == x.CardSuit)) && playerCards.Any(x => !flushBoardCards.Any(f => f.CardSuit == x.CardSuit))) { var nutCardSuit = flushBoardCards.First().CardSuit; var nutCardRank = DataTypes.Card.CardRankList.First(rank => boardCards.Where(b => b.CardSuit == nutCardSuit).All(b => b.Rank != (int)rank)); return(playerCards.Any(x => x.Rank == (int)nutCardRank && x.CardSuit == nutCardSuit)); } } 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 (!HandAnalyzerHelpers.IsFlush(playerCards)) { 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.Where(g => g.Count() >= 5).First().OrderByDescending(x => x.Rank).Take(5); if (playerCards.All(x => flushBoardCards.Any(f => f.CardSuit == x.CardSuit))) { return(playerCards.All(x => HandAnalyzerHelpers.IsWeakKicker(x))); } } return(false); }
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() + playerCards.Count < 4) { return(false); } List <DataTypes.Card> allCards = HandAnalyzerHelpers.CombineCardLists(playerCards, boardCards); //List<DataTypes.Card> orderedCardsByRanks = allCards.GroupBy(x => x.Rank).Select(x => x.First()).ToList(); foreach (CardRank cardRank in DataTypes.Card.CardRankList) { if (cardRank == CardRank.None) { continue; } List <DataTypes.Card> checkStraight = new List <DataTypes.Card>(); checkStraight.AddRange(allCards); checkStraight.Add(new DataTypes.Card(DataTypes.Card.GetCardRankString(cardRank) + "c")); List <DataTypes.Card> orderedCheckList = checkStraight.GroupBy(x => x.Rank).Select(x => x.First()).OrderBy(x => x.Rank).ToList(); if (CheckIfHasStraight(orderedCheckList)) { return(false); } } return(true); }
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); }
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 (!HandAnalyzerHelpers.IsFlush(playerCards)) { return(false); } var sortedBoard = boardCards.OrderBy(x => x.Rank); for (int i = 0; i < sortedBoard.Count() - 3; i++) { var cards = sortedBoard.Take(3).ToList(); if (cards.Any(x => x.CardSuit != playerCards.First().CardSuit)) { return(false); } cards.AddRange(playerCards); if (HandAnalyzerHelpers.IsStraight(cards, true)) { return(true); } } return(false); }
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); } var secondCardRank = boardCards.OrderByDescending(x => x.Rank).ElementAt(1).Rank; if (playerCards.Any(c => c.Rank == secondCardRank)) { 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); } 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) { if (groupedCards.Where(x => x.Key != trips.Key).Any(x => x.Count() >= 2)) { return(trips.First().Rank == playerCards.First().Rank); } } 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, 0) && !HandAnalyzerHelpers.IsFlushDraw(playerCards, boardCards, 1) && !HandAnalyzerHelpers.IsFlushDraw(playerCards, boardCards, 2)); }
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() + 3; int secondRank = firstRank - 1; while (firstRank > orderedRanks.Min() - 3) { firstRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, firstRank); secondRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, secondRank); if (firstRank == secondRank) { secondRank = BoardTextureAnalyzerHelpers.GetHighestUniqueRankNumberForList(orderedRanks, secondRank - 1); } if (secondRank <= 0 || secondRank < orderedRanks.Min() - 3) { firstRank--; secondRank = firstRank; continue; } var tempList = new List <int>(orderedRanks); tempList.Add(firstRank); tempList.Add(secondRank); tempList = tempList.Where(x => x <= firstRank).ToList(); if (tempList.Count > 3) { var hand = tempList.OrderByDescending(x => x).Take(4).ToList(); var isGutShot = hand.Max() - hand.Min() == 4; if (isGutShot) { numberOfOpenEndedStraights++; } } secondRank--; } return(numberOfOpenEndedStraights); }
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.Any()) { return(false); } return(HandAnalyzerHelpers.IsNoOfKind(boardCards, 3)); }
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); } return(playerCards.Any(x => HandAnalyzerHelpers.IsOneCardStraight(x, boardCards))); }
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, 2)) { return(false); } return(HandAnalyzerHelpers.IsWeakKicker(playerCards.OrderByDescending(x => x.Rank).First())); }
public override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { if (base.Analyze(playerCards, allBoardCards, targetStreet)) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); return(playerCards.All(p => boardCards.All(b => b.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 (!HandAnalyzerHelpers.IsFlushDraw(playerCards, boardCards, 1, isBackdoor: true)) { return(false); } return(HandAnalyzerHelpers.IsTopKicker(playerCards.OrderByDescending(x => x.Rank).First(), boardCards.Where(b => b.CardSuit == playerCards.First().CardSuit))); }
public override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); if (base.Analyze(playerCards, boardCards, targetStreet)) { var topCard = boardCards.Min(x => x.Rank); return(playerCards.Any(x => x.Rank == topCard)); } return(false); }
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); } return(!HandAnalyzerHelpers.HasPair(playerCards, 1) && !playerCards.Any(p => boardCards.Any(b => b.Rank == p.Rank)) && HandAnalyzerHelpers.HasPair(boardCards, 1));; }
public bool Analyze(string boardCards, Street targetStreet) { var cards = BoardTextureAnalyzerHelpers.ParseStringSequenceOfCards(boardCards); cards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(cards, targetStreet); if (!BoardTextureAnalyzerHelpers.IsStreetAvailable(cards, targetStreet)) { return(false); } return(cards.GroupBy(x => x.CardSuit).Count(x => x.Count() == 2) == 2); }
public override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); if (base.Analyze(playerCards, boardCards, targetStreet)) { var secondCardOnBoard = boardCards.OrderByDescending(x => x.Rank).Distinct().ElementAt(1).Rank; return(playerCards.Any(x => x.Rank == secondCardOnBoard)); } return(false); }
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 override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); if (base.Analyze(playerCards, allBoardCards, targetStreet)) { var topCard = boardCards.OrderByDescending(x => x.Rank).FirstOrDefault(); var bottomCard = boardCards.OrderBy(x => x.Rank).FirstOrDefault(); return(playerCards.Any(x => x.Rank == bottomCard?.Rank) && playerCards.All(x => x.Rank != topCard?.Rank)); } return(false); }
public override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); if (base.Analyze(playerCards, allBoardCards, targetStreet)) { var topTwo = boardCards.OrderByDescending(x => x.Rank).Take(2).Distinct(); var topCard = topTwo.ElementAt(0); var secondTopCard = topTwo.ElementAt(1); return(playerCards.Any(x => x.Rank == topCard.Rank) && playerCards.All(x => x.Rank != secondTopCard.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 (boardCards == null || boardCards.Count() == 0) { return(false); } if (HandAnalyzerHelpers.IsFlush(boardCards) && HandAnalyzerHelpers.IsStraight(boardCards, true)) { return(true); } return(false); }
public override bool Analyze(List <DataTypes.Card> playerCards, List <DataTypes.Card> allBoardCards, Street targetStreet) { if (base.Analyze(playerCards, allBoardCards, targetStreet)) { List <DataTypes.Card> boardCards = BoardTextureAnalyzerHelpers.GetCardsAccoringStreet(allBoardCards, targetStreet); List <DataTypes.Card> pairOnBoard = boardCards.GroupBy(x => x.Rank).FirstOrDefault(x => x.Count() == 2)?.ToList(); if (pairOnBoard?.Count != 0) { return(playerCards.ElementAt(0).Rank < pairOnBoard.ElementAt(0).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); } return(boardCards.GroupBy(x => x.Rank).Any(g => (g.Count() == 2) && (g.Key == playerCards.First().Rank))); }
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)); }
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); }