public bool TopPair(PokerHand hand, int rIdx, int aIdx) { if(Hand.EvaluateType(hand.HeroHoleCards() | hand.BoardMask((Rounds)rIdx)) != Hand.HandTypes.Pair) return false; var board = hand.Board((Rounds)rIdx); var top = board.Max(c => c.Rank); return top == hand.HoleCards[0].Rank || top == hand.HoleCards[1].Rank; }
public bool StraightDrawHit(PokerHand hand, int rIdx, int aIdx) { var prev = hand.Board((Rounds)(rIdx - 1)).ToMask(); var prevCount = Hand.CountContiguous(prev); if (prevCount != 2) return false; var board = hand.BoardMask((Rounds)rIdx); var hole = hand.HeroHoleCards(); foreach(var opp in Hand.Hands(0UL, hole | board, 2)) if (Hand.EvaluateType(board | opp) == Hand.HandTypes.Straight && Hand.EvaluateType(prev | opp) != Hand.HandTypes.Straight && Hand.IsOpenEndedStraightDraw(prev | opp, hole)) return true; return false; }
public int SecondaryBoardSuit(PokerHand hand, int rIdx, int aIdx) { var board = hand.Board((Rounds)rIdx); var suits = board.GroupBy(c => c.Suit).OrderByDescending(g => g.Count()); var secondary = suits.Skip(1).FirstOrDefault(); if (secondary == null) return 0; return secondary.Count(); }
public bool FourCardStraightHit(PokerHand hand, int rIdx, int aIdx) { var prev = hand.Board((Rounds)(rIdx - 1)).ToMask(); int prevCount = Hand.CountContiguous(prev); if (prevCount != 3) return false; return Hand.CountContiguous(hand.BoardMask((Rounds)rIdx)) == 4; }
public bool FlushDrawHit(PokerHand hand, int rIdx, int aIdx) { var prev = hand.Board((Rounds)(rIdx-1)); var prevSuits = prev.GroupBy(c => c.Suit).OrderByDescending(g => g.Count()); if (prevSuits.First().Count() != 2) return false; var board = hand.Board((Rounds)rIdx); var suits = board.GroupBy(c => c.Suit).OrderByDescending(g => g.Count()); return suits.First().Count() == 3; }
public int DominantBoardSuit(PokerHand hand, int rIdx, int aIdx) { var board = hand.Board((Rounds)rIdx); var suits = board.GroupBy(c => c.Suit).OrderByDescending(g => g.Count()); return suits.First().Count(); }