public PlayerAction PreFlop() { RangeParser rangeParser = new RangeParser(); List <List <Card> > raiseCardRange = rangeParser.Parse(_raiseRange); if (ContainsCardHand(raiseCardRange, _player.Cards)) { if (_pokerGame.CanRaise()) { return(PlayerAction.Raise); } if (_pokerGame.CanCall()) { return(PlayerAction.Call); } } else if (ContainsCardHand(rangeParser.Parse(_callRange).Except(raiseCardRange).ToList(), _player.Cards)) { if (_pokerGame.CanCall()) { return(PlayerAction.Call); } } return(CheckFold()); }
static void TestRangeCount() { VPIPController rf = new VPIPController(@"Person"); RangeParser rp = new RangeParser(); List <List <Card> > result = rp.Parse(new List <string>() { "22+", "A2s+", "K2s+", "Q2s+", "J2s+", "T2s+", "92s+", "83s+", "73s+", "63s+", "52s+", "43s", "A2o+", "K2o+", "Q2o+", "J4o+", "T6o+", "96o+", " 86o+", "75o+", "65o" }); //List<List<Card>> result = rp.Parse(rf.GetRange()); Console.WriteLine(result.Count); for (int index = 0; index < result.Count; index++) { var chand = result[index]; Console.WriteLine(@"{0}, : {1} of {2}, {3} of {4}", index, chand[0].Rank, chand[0].Suit, chand[1].Rank, chand[1].Suit); } Console.ReadKey(); }
private PlayerAction MonteCarloOld() { WinConditions wc = new WinConditions(); RangeParser rc = new RangeParser(); EVCalculator ev = new EVCalculator(_pokerGame, _settings); OutsCalculator oc = new OutsCalculator(); List <string> RaisePreflop = new List <string> { "88+", "A2s+", "K5s+", "Q8s+", "J9s+", "T9s+", "98s", "87s", "A10o+", "K9o+", "Q9o+", "J9o+", "T9o" }; List <string> CallPreflop = new List <string> { "22+", "A2s+", "K2s+", "Q2s+", "J2s+", "T6s+", "97s+", "87s", "A2o+", "K2o+", "Q2o+", "J9o+", "T9o" }; List <Card> cardsToEvaluate = new List <Card>(_player.Cards); cardsToEvaluate.AddRange(_street); var handsToRaisePreflop = rc.Parse(RaisePreflop); var handsToCallPreflop = rc.Parse(CallPreflop).Except(handsToRaisePreflop).ToList(); var cardHand = _player.Cards; List <double> ExpectedValues = new List <double>(ev.CalculateMonteCarlo(cardHand, _hand, _settings)); var mtcBet = ExpectedValues[0]; var mtcCall = 0.00; if (ExpectedValues.Count > 1) { mtcCall = ExpectedValues[1]; } if (_pokerGame.CurrentRoundNumber() == 1) { if (ContainsCardHand(handsToRaisePreflop, cardHand)) { if (_player.IsSmallBlind) { if (_pokerGame.CanRaise()) { return(PlayerAction.Raise); } if (_pokerGame.CanCall()) { return(PlayerAction.Call); } } } if (ContainsCardHand(handsToCallPreflop, cardHand)) { if (_pokerGame.CanCall()) { return(PlayerAction.Call); } } } else if (_pokerGame.CurrentRoundNumber() == 2 || _pokerGame.CurrentRoundNumber() == 3) { // Flop + Turn var currentScore = wc.Evaluate(cardsToEvaluate); var compareOuts = oc.CompareOuts(_player.Cards, _street); if (currentScore <= Score.Pair) { if (_pokerGame.CanCall() && _pokerGame.CanRaise()) { if (mtcBet > mtcCall) { return(PlayerAction.Raise); } return(PlayerAction.Call); } if (_pokerGame.CanCheck() && _pokerGame.CanRaise()) { if (mtcBet > mtcCall) { return(PlayerAction.Raise); } return(PlayerAction.Call); } if (_pokerGame.CanCall() && !_pokerGame.CanCheck()) { if (mtcBet > 0.00) { return(PlayerAction.Call); } } } if (compareOuts > 0) { if (oc.CompareOuts(cardHand, _street) > 5) { if (_pokerGame.CanRaise()) { return(PlayerAction.Raise); } if (_pokerGame.CanCall()) { return(PlayerAction.Call); } } } } else if (_pokerGame.CurrentRoundNumber() == 4) { var currentScore = wc.Evaluate(cardsToEvaluate); if (currentScore >= Score.Pair) { if (_pokerGame.CanCall() && _pokerGame.CanRaise()) { if (mtcBet > mtcCall) { return(PlayerAction.Raise); } return(PlayerAction.Call); } if (_pokerGame.CanCheck() && _pokerGame.CanRaise()) { if (mtcBet > mtcCall) { return(PlayerAction.Raise); } return(PlayerAction.Call); } if (_pokerGame.CanCall() && !_pokerGame.CanCheck()) { if (mtcBet > 0.00) { return(PlayerAction.Call); } } } } if (_pokerGame.CanCheck()) { return(PlayerAction.Check); } return(PlayerAction.Fold); }