示例#1
0
        /// <summary>
        /// Abre cartas comunitárias e reordena a lista de jogadores
        /// </summary>
        /// <param name="quantidadeCartasComunitarias">Quantidade de cartas comunitárias abertas na mesa</param>
        /// <returns>Retorna true caso haja jogadores suficientes para realizar a rodada. Caso contrário, false</returns>
        private bool RenovarRodadaDeApostas(int quantidadeCartasComunitarias)
        {
            if (JogadoresAtivos.Count < _quantidadeMinimaDeJogadoresPermitidos)
            {
                return(false);
            }

            foreach (var jogador in JogadoresAtivos)
            {
                if (jogador.FichasApostadasNaRodada < ApostaAtual)
                {
                    throw new Exception(Ressource.MesaMsgNaoPermitidoIniciarNovaRodadaSemApostasMinimas);
                }
                else
                {
                    jogador.ZerarFichasApostadasNaRodada();
                }
            }

            OrdenarJogadores(IdJogadorSmallBlind);

            //Queimar Carta
            Baralho.DistribuirCarta();

            //Adicionar cartas na mesa
            for (int i = 0; i < quantidadeCartasComunitarias; i++)
            {
                Cartas.Add(Baralho.DistribuirCarta());
            }

            ApostaAtual = 0;

            return(true);
        }
示例#2
0
        /// <summary>
        /// Inicia rodada enquanto há a quantidade mínima de jogadores ativos na mesa
        /// </summary>
        public string IniciarMao()
        {
            if (PreFlopExecutado || FlopExecutado || TurnExecutado || RiverExecutado)
            {
                throw new Exception(Ressource.MesaMsgPreFlopExecutadoAposOutraJogadaDeMesa);
            }

            if (JogadoresAtivos.Count() < _quantidadeMinimaDeJogadoresPermitidos)
            {
                throw new Exception(Ressource.MesaMsgNaoPermitidoIniciarRodadaSemQuantidadeMinimaDeJogadores);
            }

            Baralho = new Baralho();

            for (int i = 0; i < 2; i++)
            {
                foreach (var jogador in JogadoresAtivos)
                {
                    jogador.ReceberCarta(Baralho.DistribuirCarta());
                }
            }

            if (IdJogadorSmallBlind != 0)
            {
                OrdenarJogadores(IdJogadorSmallBlind);
                Jogadores.MoveFirstItemToFinal <Jogador>();
            }

            IdJogadorSmallBlind = JogadoresAtivos.First().Id;

            var mensagem = "";

            //Receber Small Blind
            TentarIndicarProximoJogador();
            mensagem = ReceberAposta(ValorBlind / 2, "small");

            //Receber Big Blind
            TentarIndicarProximoJogador();
            mensagem += $"\r\n{ReceberAposta(ValorBlind, "big")}";

            ApostaAtual = ValorBlind;

            // Se houver mais do que dois jogadores pega a terceira posição da lista, caso contrário a segunda posição
            IdJogadorUTG = JogadoresAtivos[JogadoresAtivos.Count > 2 ? 2 : 0].Id;

            // Posiciona o UTG como primeiro da lista
            OrdenarJogadores(IdJogadorUTG);
            JogadorAtual     = null;
            PreFlopExecutado = true;

            return(mensagem);
        }