public HandRangePercentiles GetPercentiles(PreflopStatusSummary statusSummary)
        {
            switch (statusSummary.Status)
            {
            case PreflopGameStatusEnum.FoldedToMe:
                return(GetFoldedToMePercentiles(statusSummary));

            case PreflopGameStatusEnum.LimpedPot:
                return(GetLimpedPotPercentiles(statusSummary));

            case PreflopGameStatusEnum.Raised:
            case PreflopGameStatusEnum.RaisedWithCallers:
                return(GetRaisedPercentiles(statusSummary));

            case PreflopGameStatusEnum.TriBet:
            case PreflopGameStatusEnum.TriBetWithCallers:
                return(GetTriBetPercentiles(statusSummary));

            case PreflopGameStatusEnum.FourBet:
            case PreflopGameStatusEnum.FourBetWithCallers:
                return(GetFourBetPercentiles(statusSummary));

            case PreflopGameStatusEnum.FiveBet:
            case PreflopGameStatusEnum.FiveBetWithCallers:
            case PreflopGameStatusEnum.AllIn:
                return(GetAllInPercentiles(statusSummary));
            }

            throw new NotImplementedException();
        }
Пример #2
0
        private HandRangePercentiles GetPercentilesOnLimpedPot(PreflopStatusSummary statusSummary)
        {
            //#(limper) matters
            int numOfLimpers = statusSummary.Players.Count(p => p.PlayerStatus != PlayerStatusEnum.Folded) - 2; //2 blinds

            return(_limpedPot[numOfLimpers]);
        }
Пример #3
0
        private HandRangePercentiles GetPercentileOnRaisedPot(PreflopStatusSummary statusSummary)
        {
            /*
             * //#(callers) matters, the position of raiser matters
             * PositionEnum raiserPosition;
             * List<PositionEnum> callerPositions = new List<PositionEnum>();
             * if (statusSummary.Button.Decisions.Last().DecisionType == DecisionType.Raise)
             * {
             *  raiserPosition = PositionEnum.Button;
             * }
             * else if (statusSummary.CuttingOff.Decisions.Last().DecisionType == DecisionType.Raise)
             * {
             *  raiserPosition = PositionEnum.CuttingOff;
             *  if (statusSummary.Button.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.Button);
             *  }
             * }
             * else if (statusSummary.MiddlePosition.Decisions.Last().DecisionType == DecisionType.Raise)
             * {
             *  raiserPosition = PositionEnum.MiddlePosition;
             *  if (statusSummary.CuttingOff.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.CuttingOff);
             *  }
             *  if (statusSummary.Button.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.Button);
             *  }
             * }
             * else if (statusSummary.UnderTheGun.Decisions.Last().DecisionType == DecisionType.Raise)
             * {
             *  if (statusSummary.MiddlePosition.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.MiddlePosition);
             *  }
             *  if (statusSummary.CuttingOff.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.CuttingOff);
             *  }
             *  if (statusSummary.Button.Decisions.Last().DecisionType == DecisionType.Call)
             *  {
             *      callerPositions.Add(PositionEnum.Button);
             *  }
             *  raiserPosition = PositionEnum.UnderTheGun;
             * }
             * else
             * {
             *  throw new InvalidOperationException();
             * }
             *
             * return GetPercentilesOnRaisedPot(raiserPosition, callerPositions);*/

            throw new NotImplementedException();
        }
Пример #4
0
        public static PreflopStatusSummary GeneratePreflopStatusSummary(Round round, int heroIndex)
        {
            var statusSummary = new PreflopStatusSummary();

            foreach (var player in round.Players)
            {
                var playerStatus = new PreflopPlayerSummary()
                {
                    Name      = player.Name,
                    Decisions = round.PreflopMoves.Where(m => m.Player.Name.Equals(player.Name)).Select(m => m.Decision).ToList(),
                    Position  = player.Position,
                    StackSize = player.StackSize,
                };

                statusSummary.Players.Add(playerStatus);
            }

            statusSummary.PreflopRaiseMoves.AddRange(round.PreflopMoves.Where(m => m.Decision.DecisionType.IsRaiseMove() &&
                                                                              m.Decision.DecisionType != DecisionType.Ante));

            /*
             * statusSummary.SmallBlind = statusSummary.Players.First(p => p.Position == PositionEnum.SmallBlind);
             * statusSummary.BigBlind = statusSummary.Players.First(p => p.Position == PositionEnum.BigBlind);
             * statusSummary.UnderTheGun = statusSummary.Players.First(p => p.Position == PositionEnum.UnderTheGun);
             * statusSummary.MiddlePosition = statusSummary.Players.First(p => p.Position == PositionEnum.MiddlePosition);
             * statusSummary.CuttingOff = statusSummary.Players.First(p => p.Position == PositionEnum.CuttingOff);
             * statusSummary.Button = statusSummary.Players.First(p => p.Position == PositionEnum.Button);
             */

            var mePlayer = round.Players.First(p => p.Index == heroIndex);

            statusSummary.Me = statusSummary.Players.First(p => p.Name.Equals(mePlayer.Name));

            statusSummary.Status   = GetPreflopGameStatus(round);
            statusSummary.IsRaised = round.IsRaised;

            var chipsRaised = round.Players.Max(p => p.ChipsBetByStage[StageEnum.Preflop]);

            statusSummary.ChipsToCall = chipsRaised - GetChipsBetByPlayerThisRound(mePlayer, round);

            statusSummary.BigBlindSize = round.BigBlindSize;
            statusSummary.PotSize      = round.CurrentPotSize;

            if (round.CurrentRaiser != null)
            {
                statusSummary.CurrentRaiser = statusSummary.Players.First(p =>
                                                                          p.Position == round.CurrentRaiser.Position &&
                                                                          string.Equals(p.Name, round.CurrentRaiser.Name));
            }

            return(statusSummary);
        }
        public HandRangePercentiles GetPercentiles(PreflopStatusSummary statusSummary)
        {
            switch (statusSummary.Status)
            {
            case PreflopGameStatusEnum.LimpedPot:
                return(GetPercentilesOnLimpedPot(statusSummary));

            case PreflopGameStatusEnum.Raised:
            case PreflopGameStatusEnum.RaisedWithCallers:
                return(GetPercentileOnRaisedPot(statusSummary));

            default:
                throw new NotImplementedException($"{statusSummary.Status} not implemented in BigBlindHandRangePercentileConsultant");
            }
        }
Пример #6
0
        public HandRangePercentiles GetPercentiles(PreflopStatusSummary statusSummary)
        {
            switch (statusSummary.Status)
            {
            case PreflopGameStatusEnum.FoldedToMe:
                return(GetPercentilesWhenFoldedToMe(statusSummary));

            case PreflopGameStatusEnum.LimpedPot:
                return(GetPercentilesOnLimpedPot(statusSummary));

            case PreflopGameStatusEnum.Raised:
            case PreflopGameStatusEnum.RaisedWithCallers:
                return(GetPercentileOnRaisedPot(statusSummary));

            default:
                throw new NotImplementedException();
            }
        }
Пример #7
0
 private HandRangePercentiles GetPercentilesWhenFoldedToMe(PreflopStatusSummary statusSummary)
 {
     //only deal with bb
     return(new HandRangePercentiles(0, 0.2, 0.22, 0.3));
 }
 private HandRangePercentiles GetAllInPercentiles(PreflopStatusSummary statusSummary)
 {
     return(_allIn[statusSummary.Me.Position]);
 }
 private HandRangePercentiles GetFourBetPercentiles(PreflopStatusSummary statusSummary)
 {
     return(_4Bet[statusSummary.Me.Position]);
 }
 private HandRangePercentiles GetRaisedPercentiles(PreflopStatusSummary statusSummary)
 {
     return(_raisedToMe[statusSummary.Me.Position]);
 }
 private int GetNumOfLimpers(PreflopStatusSummary statusSummary)
 {
     throw new NotImplementedException();
 }
 private HandRangePercentiles GetLimpedPotPercentiles(PreflopStatusSummary statusSummary)
 {
     //var numOfLimpers = GetNumOfLimpers(statusSummary);
     return(_limpedPot[statusSummary.Me.Position]);
 }