private void CompareOnFlop() { var heroBest = new BestFiveCardsHand(new List <Card>() { HeroHoles.Hole1, HeroHoles.Hole2, BoardStatus.Flop1, BoardStatus.Flop2, BoardStatus.Flop3 }); var villainBest = new BestFiveCardsHand(new List <Card>() { VillainHoles.Hole1, VillainHoles.Hole2, BoardStatus.Flop1, BoardStatus.Flop2, BoardStatus.Flop3 }); var heroScore = BettingUtils.GetScoreForFiveCardHand(heroBest); var villainScore = BettingUtils.GetScoreForFiveCardHand(villainBest); HeroIsAhead = heroScore > villainScore; var allCards = TexasBot.Tools.Utils.GenerateAllCards().Select(c => c.ConvertCard()).ToList(); allCards.RemoveElementEqualsTo(HeroHoles.Hole1); allCards.RemoveElementEqualsTo(HeroHoles.Hole2); allCards.RemoveElementEqualsTo(VillainHoles.Hole1); allCards.RemoveElementEqualsTo(VillainHoles.Hole2); allCards.RemoveElementEqualsTo(BoardStatus.Flop1); allCards.RemoveElementEqualsTo(BoardStatus.Flop2); allCards.RemoveElementEqualsTo(BoardStatus.Flop3); allCards.RemoveElementEqualsTo(BoardStatus.Turn); BestFiveCardsHand leader = HeroIsAhead ? heroBest : villainBest; BestFiveCardsHand follower = HeroIsAhead ? villainBest : heroBest; List <Card> outs = HeroIsAhead ? VillainOuts : HeroOuts; outs.AddRange(allCards.Where(card => CardCanHelp(leader, follower, card))); }
/// <summary> /// If card can help follower to get ahead of leader /// </summary> /// <param name="leader"></param> /// <param name="follower"></param> /// <param name="card"></param> /// <returns></returns> private bool CardCanHelp(BestFiveCardsHand leader, BestFiveCardsHand follower, Card card) { var leaderSix = new SixCardsHand(leader.Cards[0], leader.Cards[1], leader.Cards[2], leader.Cards[3], leader.Cards[4], card); var followerSix = new SixCardsHand(follower.Cards[0], follower.Cards[1], follower.Cards[2], follower.Cards[3], follower.Cards[4], card); var leaderBest = BettingUtils.FindBestFive(leaderSix); var followerBest = BettingUtils.FindBestFive(followerSix); var leaderScore = BettingUtils.GetScoreForFiveCardHand(leaderBest); var followerScore = BettingUtils.GetScoreForFiveCardHand(followerBest); return(followerScore > leaderScore); }