/// <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); }
/// <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); }