public override bool Join(TexasHoldemPlayer <PlayerIdType> player)
        {
            if (player.pointManager.Points > bigBlind)
            {
                return(base.Join(player));
            }

            return(false);
        }
        private void UpdateWhenPlayerBets()
        {
            int iPrevious = (int)seatedPlayers.IndexOf(currentPlayer) - 1;

            if (iPrevious < 0)
            {
                iPrevious = seatedPlayers.Count - 1;
            }
            endingPlayer = seatedPlayers[iPrevious];
        }
        private void NextRound()
        {
            Debug.Assert(round != Round.GameOver);

            foreach (var player in GetPlayers())
            {
                if (player.bet < currentBet)
                {
                    seatedPlayers.Remove(player);
                }
            }

            if (seatedPlayers.Count <= 1)
            {
                round = Round.GameOver;
            }
            else
            {
                round++;
            }

            switch (round)
            {
            case Round.Flop:
                DealToTable(3);
                break;

            case Round.Turn:
                DealToTable(1);
                break;

            case Round.River:
                DealToTable(1);
                break;

            case Round.GameOver:
                EndGame();
                break;

            default:
                Debug.Fail();
                break;
            }

            currentPlayer = firstToAct;
            int iPrevious = (int)seatedPlayers.IndexOf(firstToAct) - 1;

            if (iPrevious < 0)
            {
                iPrevious = seatedPlayers.Count - 1;
            }
            endingPlayer = seatedPlayers[iPrevious];
        }
 private void SelectNextPlayerOrNextRound()
 {
     if (currentPlayer == endingPlayer)
     {
         NextRound();
     }
     else
     {
         int iNext = (int)seatedPlayers.IndexOf(currentPlayer) + 1;
         if (iNext >= seatedPlayers.Count)
         {
             iNext = 0;
         }
         currentPlayer = seatedPlayers[iNext];
     }
 }
        private void UpdateWhenPlayerDrops(uint iPlayerSeat)
        {
            int iNext = (int)iPlayerSeat;

            if (iNext >= seatedPlayers.Count)
            {
                iNext = 0;
            }
            if (currentPlayer.idObject.Equals(firstToAct.idObject))
            {
                firstToAct = seatedPlayers[iNext];
            }

            if (currentPlayer.idObject.Equals(endingPlayer.idObject) || seatedPlayers.Count == 1)
            {
                NextRound();
            }
            else
            {
                currentPlayer = seatedPlayers[iNext];
            }
        }
        public override bool StartGame()
        {
            if (isReadyToStart)
            {
                round = Round.PreFlop;
                ShufflePlayersAndPutInSeats();

                for (int i = 0; i < 2; i++)
                {
                    foreach (var player in seatedPlayers)
                    {
                        DealCard(player.hand);
                    }
                }

                uint iBig = seatedPlayers.Count >= 3 ? 2u : 0u;
                if (bigBlind > 0)
                {
                    ulong littleBlind = bigBlind / 2;
                    seatedPlayers[1].PlaceBet(littleBlind, true);
                    seatedPlayers[(int)iBig].PlaceBet(bigBlind, true);
                }

                uint iFirstToAct = iBig + 1;
                if (iFirstToAct >= seatedPlayers.Count)
                {
                    iFirstToAct = 0;
                }
                firstToAct    = seatedPlayers[(int)iFirstToAct];
                currentPlayer = firstToAct;
                endingPlayer  = seatedPlayers[(int)iBig];
                tableCards.Clear();

                return(true);
            }

            return(false);
        }