Exemplo n.º 1
0
 private void MarkGrid(PostflopPlayerSummary villainSummary, StatusInRoundEnum villainStatus, GridGradeOnBoardEnum gridGrade, RangeGrid grid)
 {
     /*
      * if (villainStatus == StatusInRoundEnum.Raised)
      * {
      *  if (gridGrade == GridGradeOnBoardEnum.EliteWhenSuited)
      *  {
      *      grid.InRange = PlayerRangeGridStatusEnum.IncludedIfSuitedWithBoard;
      *  }
      *  if (gridGrade == GridGradeOnBoardEnum.Trash)
      *  {
      *      grid.InRange = PlayerRangeGridStatusEnum.Excluded;
      *  }
      * }
      *
      * if (villainStatus == StatusInRoundEnum.Checked)
      * {
      *  if (villainSummary.InRoundRole != InRoundRole.OopCaller)
      *  {
      *      if (gridGrade == GridGradeOnBoardEnum.Elite)
      *      {
      *          grid.InRange = PlayerRangeGridStatusEnum.Excluded;
      *      }
      *      if (gridGrade == GridGradeOnBoardEnum.EliteWhenSuited)
      *      {
      *          grid.InRange = PlayerRangeGridStatusEnum.IncludedIfOffSuitWithBoard;
      *      }
      *  }
      * }
      */
 }
Exemplo n.º 2
0
        private PlayerRange EstimateFlopRange(PostflopStatusSummary statusSummary, PostflopPlayerSummary villainSummary)
        {
            var preflopRange = EstimateRange(statusSummary.BigBlindSize, villainSummary.PreflopDecisions, villainSummary.Position);
            var boardModel   = new BoardModel(statusSummary.BoardStatus);

            foreach (var grid in preflopRange.GetAliveGrids())
            {
                var gridGrade = boardModel.GetGridGrade(grid.Grid);
                MarkGrid(villainSummary, GetPlayerStatusInRound(), gridGrade, grid.Grid);
            }

            return(preflopRange);
        }
Exemplo n.º 3
0
 public PlayerRange EstimateRange(PostflopStatusSummary statusSummary, PostflopPlayerSummary villainSummary)
 {
     //todo: estimate the current Range based on
     //position
     //betting history
     //board
     //hero cards
     switch (statusSummary.BoardStatus.BoardStage)
     {
     default:
         throw new NotImplementedException();
     }
 }
Exemplo n.º 4
0
        private static PostflopPlayerSummary GetPostflopPlayerSummary(Round round, Player player)
        {
            var playerSummary = new PostflopPlayerSummary
            {
                Name             = player.Name,
                Position         = player.Position,
                Holes            = new HoldingHoles(round.Hole1, round.Hole2),
                ChipsBet         = player.ChipsBetAlready,
                IsMe             = round.IsMe(player),
                IsAlive          = player.IsAlive,
                PreflopDecisions =
                    round.PreflopMoves.Where(m => m.Player.Equals(player)).Select(m => m.Decision).ToList(),
                FlopDecisions  = round.FlopMoves.Where(m => m.Player.Equals(player)).Select(m => m.Decision).ToList(),
                TurnDecisions  = round.TurnMoves.Where(m => m.Player.Equals(player)).Select(m => m.Decision).ToList(),
                RiverDecisions = round.RiverMoves.Where(m => m.Player.Equals(player)).Select(m => m.Decision).ToList(),
                StackSize      = player.StackSize,
                Tag            = ""
            };

            return(playerSummary);
        }
Exemplo n.º 5
0
        private Decision MakeDecisionAgainstSingleVillain(PostflopStatusSummary statusSummary, PostflopPlayerSummary villain)
        {
            var boardStatus = statusSummary.BoardStatus;
            var heroHoles   = statusSummary.Me.Holes;

            var villainRange = _rangeEstimator.EstimateRange(statusSummary, villain);
            var heroRange    = GetVillainGuessOnHeroRange(statusSummary.Me);

            var rawBoardSpectrum = _boardSpectrumMaker.MakeSpectrum(boardStatus);

            var villainBoardSpectrum = _boardSpectrumFilter.FilterAgainstRange(rawBoardSpectrum, villainRange);
            var heroBoardSpectrum    = _boardSpectrumFilter.FilterAgainstRange(rawBoardSpectrum, heroRange);

            var heroEquityAgainstVillainRange = villainBoardSpectrum.GetEquity(heroHoles);

            var villainHolesCombos = villainRange.GetAliveGrids().SelectMany(g => g.Grid.EnumerateAllCombos());

            foreach (var villainHoles in villainHolesCombos)
            {
                var villainEquityAgainstHeroRange = heroBoardSpectrum.GetEquity(villainHoles);
                var fightResult = villainBoardSpectrum.Fight(heroHoles, villainHoles);

                var bettingDecisionEnum = MakeBettingDecisionBasedOnEquitiesComparison(heroEquityAgainstVillainRange,
                                                                                       villainEquityAgainstHeroRange, fightResult);

                //todo accumulate them to make the final decision
            }

            throw new NotImplementedException();
        }
Exemplo n.º 6
0
 /// <summary>
 /// The hero's range guessed by villain
 /// for a dumb implementation, return a full Range
 /// or, return a position-based range.
 /// </summary>
 /// <returns></returns>
 private PlayerRange GetVillainGuessOnHeroRange(PostflopPlayerSummary hero)
 {
     throw new NotImplementedException();
 }