public override int GetDecision(BoardSituation situation, TableInfo info)
        {
            if (handId != info.HandId)
            {
                handId = info.HandId;
                street = -1;
            }
            int pot = situation.GetPot();

            if (street != situation.Street)
            {
                p      = Hand.WinOdds(hand, situation.Cards, 0UL, info.Players.Count);
                street = situation.Street;
            }
            double win     = p * pot;
            int    minBet  = situation.MaxBet - situation.GetPlayerCurrentBet(name);
            int    bet_cur = situation.GetPlayerPot(name) + minBet;

            if (bet_cur + info.SmallBlind > win && win >= bet_cur)
            {
                return(minBet);
            }
            else if (win >= bet_cur + info.SmallBlind)
            {
                return(Convert.ToInt32((win - bet_cur) + minBet));
            }
            return(-1);
        }
        public override int GetDecision(BoardSituation situation, TableInfo info)
        {
            Console.WriteLine(name + " your turn, make decision");
            var strBet = Console.ReadLine();

            return(Convert.ToInt32(strBet));
        }
 public override int GetDecision(BoardSituation situation, TableInfo info)
 {
     if (decisionIndex + 1 > Decisions.Length)
     {
         return(-1);
     }
     return(Decisions[decisionIndex++]);
 }
        public override int GetDecision(BoardSituation situation, TableInfo info)
        {
            int inGamePlayerCount = GetNotFoldedPlayers(situation, info.Players.Keys.ToArray()).Count();

            if (info.HandId != handId)
            {
                street = -1;
                dead   = hand;
                handId = info.HandId;
                opps   = new ulong[info.Players.Count];
                for (int i = 0; i < opps.Length; i++)
                {
                    opps[i] = Hand.RandomHand(dead, 2);
                    dead   |= opps[i];
                }
            }
            if (street != situation.Street)
            {
                street = situation.Street;
                oppsP  = new double[inGamePlayerCount];
                for (int i = 0; i < oppsP.Length; i++)
                {
                    oppsP[i] = Hand.WinOdds(opps[i], situation.Cards, dead, inGamePlayerCount);
                }
                p = Hand.WinOdds(hand, situation.Cards, dead, inGamePlayerCount);
            }
            bool call = false, raise = false;

            for (int i = 0; i < oppsP.Length; i++)
            {
                if (oppsP[i] > p)
                {
                    return(-1);
                }
                if (p - oppsP[i] < 0.3)
                {
                    call = true;
                }
                raise = true;
            }
            int minBet   = situation.MaxBet - situation.GetPlayerCurrentBet(name);
            int minRaise = Convert.ToInt32((p * situation.GetPot()) + minBet);

            if (call == true && raise == false)
            {
                return(minBet);
            }
            else if (call == true && raise == true)
            {
                return(minRaise);
            }
            else
            {
                return(minRaise * 2);
            }
        }
 protected IEnumerable <string> GetNotFoldedPlayers(BoardSituation situation, string[] players)
 {
     for (int i = 0; i < players.Length; i++)
     {
         if (!situation.IsPlayerFolded(players[i]))
         {
             yield return(players[i]);
         }
     }
 }
 public virtual int GetDecision(BoardSituation situation, TableInfo info)
 {
     return(-1);
 }
 public override int GetDecision(BoardSituation situation, TableInfo info)
 {
     throw new NotImplementedException();
 }