Exemple #1
0
        /// <summary>
        /// Verifica se a mão possui um Flush
        /// </summary>
        /// <returns>Retorna true caso houver Flush na jogada, caso contrário false</returns>
        private bool VerificarFlush()
        {
            try
            {
                (string Id, string Nome)flush = AgruparNaipe(_cartasShowdown);

                if (flush.Id == null)
                {
                    return(false);
                }

                string pontuacao    = "";
                var    complementos = new List <string> {
                    flush.Nome
                };

                foreach (var carta in _cartasShowdown.Where(c => c.Naipe.Id == flush.Id).Take(5))
                {
                    pontuacao += carta.Valor.PesoTexto;
                    complementos.Add(carta.Valor.Nome);
                }

                Classificacao = Mensagem.Gerar(Mensagem.Gerar(Ressource.MaoClassificacaoFlush, complementos.ToArray()));
                Pontuacao     = long.Parse($"5{pontuacao}");
                return(true);
            }
            catch (Exception ex)
            {
                throw new Exception($"Erro ao Verificar Flush - {ex.Message}", ex);
            }
        }
Exemple #2
0
        /// <summary>
        /// Verifica se a mão possui um FullHouse
        /// </summary>
        /// <returns>Retorna true caso houver Full House na jogada, caso contrário false</returns>
        private bool VerificarFullHouse()
        {
            try
            {
                (string Id, string Plural, string Peso)trinca = AgruparValor(_cartasShowdown, 3, null);

                if (trinca.Id == null)
                {
                    return(false);
                }

                (string Id, string Plural, string Peso)par = AgruparValor(_cartasShowdown, 2, trinca.Id);

                if (par.Id != null)
                {
                    Classificacao = Mensagem.Gerar(Ressource.MaoClassificacaoFullHouse, trinca.Plural, par.Plural);
                    Pontuacao     = long.Parse($"6{Texto.Repeat(trinca.Peso, 3)}{Texto.Repeat(par.Peso, 2)}");
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"Erro ao Verificar Full House - {ex.Message}", ex);
            }
        }
Exemple #3
0
        /// <summary>
        /// Verifica se a mão possui um RoyalFlush
        /// </summary>
        /// <returns>Retorna true caso houver Royal Flush na jogada, caso contrário false</returns>
        private bool VerificarRoyalFlush()
        {
            try
            {
                var grupo = _cartasShowdown.Take(5).GroupBy(carta => carta.Naipe.Nome);

                if (_cartasShowdown[0].Valor.Peso == 14 &&
                    _cartasShowdown[1].Valor.Peso == 13 &&
                    _cartasShowdown[2].Valor.Peso == 12 &&
                    _cartasShowdown[3].Valor.Peso == 11 &&
                    _cartasShowdown[4].Valor.Peso == 10 &&
                    grupo.Count() == 1)
                {
                    Classificacao = Mensagem.Gerar(Ressource.MaoClassificacaoRoyalFlush, grupo.First().Key);
                    Pontuacao     = 91413121110;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"Erro ao Verificar Royal Flush - {ex.Message}", ex);
            }
        }
        public void DeveReceberApostaDoJogador()
        {
            var valorAposta       = 1;
            var valorPoteEsperado = _valorBigBlindEsperado + _valorSmallBlindEsperado + valorAposta;
            var mesaGerada        = MesaBuilder.Novo().JogadoresPorMesa(_quantidadeMinimaDeJogadoresPermitidos).DeveIniciarPartida().DeveIniciarMao().ObterPrimeiraMesa();

            mesaGerada.TentarIndicarProximoJogador();
            var statusJogadorAtualEsperado = mesaGerada.JogadorAtual.Status;
            var mensagemEsperada           = Mensagem.Gerar(Ressource.MesaAcaoPagar, mesaGerada.JogadorAtual.Nome, valorAposta.ToString());
            var mensagemAtual = mesaGerada.ReceberAposta(valorAposta);

            Assert.Equal(mensagemEsperada, mensagemAtual);
            Assert.Equal(statusJogadorAtualEsperado, mesaGerada.JogadorAtual.Status);
            Assert.Equal(valorPoteEsperado, mesaGerada.Pote);
        }
Exemple #5
0
        /// <summary>
        /// Receber aposta do jogador e integrar ao Pote da Mesa
        /// </summary>
        /// <param name="fichas">Quantidade de fichas apostadas</param>
        /// <param name="blind">Indica se a aposta é proveniente do blind</param>
        public string ReceberAposta(int fichas, string blind = null)
        {
            if (fichas < 0)
            {
                throw new Exception(Ressource.MesaMsgNaoPermitidoApostaComValorNegativo);
            }

            var aposta = JogadorAtual.FichasApostadasNaRodada + fichas;

            fichas = JogadorAtual.Apostar(fichas);
            Pote  += fichas;

            var mensagem = "";

            if (fichas == 0)
            {
                if (aposta < ApostaAtual)
                {
                    JogadorAtual.Fold();
                    mensagem = Mensagem.Gerar(Ressource.MesaAcaoFold, JogadorAtual.Nome);
                }
                else
                {
                    mensagem = Mensagem.Gerar(Ressource.MesaAcaoCheck, JogadorAtual.Nome);
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(blind))
                {
                    mensagem = Mensagem.Gerar(Ressource.MesaAcaoBlind, JogadorAtual.Nome, blind, fichas.ToString());
                }
                else if (aposta > ApostaAtual)
                {
                    ApostaAtual = aposta;
                    OrdenarJogadores(JogadorAtual.Id);
                    mensagem = Mensagem.Gerar(Ressource.MesaAcaoRaise, JogadorAtual.Nome, fichas.ToString());
                }
                else
                {
                    mensagem = Mensagem.Gerar(Ressource.MesaAcaoPagar, JogadorAtual.Nome, fichas.ToString());
                }
            }


            return(mensagem);
        }
        public void DeveCompreenderAcaoDeFoldDoJogadorAtravesDeApostaZerada()
        {
            var valorAposta           = 0;
            var statusJogadorEsperado = StatusJogador.Fold;
            var valorPodeEsperado     = _valorBigBlindEsperado + _valorSmallBlindEsperado;
            var mesaGerada            = MesaBuilder.Novo().JogadoresPorMesa(_quantidadeMinimaDeJogadoresPermitidos + 1).DeveIniciarPartida().DeveIniciarMao().ObterPrimeiraMesa();

            mesaGerada.TentarIndicarProximoJogador();
            var mensagemEsperada = Mensagem.Gerar(Ressource.MesaAcaoFold, mesaGerada.JogadorAtual.Nome);

            var mensagemAtual = mesaGerada.ReceberAposta(valorAposta);

            Assert.Equal(mensagemEsperada, mensagemAtual);
            Assert.Equal(valorPodeEsperado, mesaGerada.Pote);
            Assert.Equal(statusJogadorEsperado, mesaGerada.JogadorAtual.Status);
            Assert.Null(mesaGerada.JogadorAtual.Mao);
        }
        public void DeveColetarBlindDosJogadoresAoIniciarRodada()
        {
            var quantidadeJogadoresNaMesa = 3;
            var valorPoteEsperado         = _valorBigBlindEsperado + _valorSmallBlindEsperado;
            var quantidadeFichasJogadorSmallBlindEsperada = Ressource.JogadorFichasInicial - _valorSmallBlindEsperado;
            var quantidadeFichasJogadorBigBlindEsperada   = Ressource.JogadorFichasInicial - _valorBigBlindEsperado;
            var mesaGerada         = MesaBuilder.Novo().JogadoresPorMesa(quantidadeJogadoresNaMesa).DeveIniciarPartida().ObterPrimeiraMesa();
            var mensagemSmallBlind = Mensagem.Gerar(Ressource.MesaAcaoBlind, mesaGerada.Jogadores[0].Nome, "small", _valorSmallBlindEsperado.ToString());
            var mensagemBigBlind   = Mensagem.Gerar(Ressource.MesaAcaoBlind, mesaGerada.Jogadores[1].Nome, "big", _valorBigBlindEsperado.ToString());
            var mensagemEsperada   = $"{mensagemSmallBlind}\r\n{mensagemBigBlind}";

            var mensagemAtual          = mesaGerada.IniciarMao();
            var indexJogadorSmallBlind = mesaGerada.JogadoresAtivos.FindIndex(j => j.Id == mesaGerada.IdJogadorSmallBlind);

            Assert.Equal(mensagemEsperada, mensagemAtual);
            Assert.Equal(quantidadeFichasJogadorSmallBlindEsperada, mesaGerada.JogadoresAtivos[indexJogadorSmallBlind].Fichas);
            Assert.Equal(quantidadeFichasJogadorBigBlindEsperada, mesaGerada.JogadoresAtivos[indexJogadorSmallBlind + 1].Fichas);
            Assert.Equal(valorPoteEsperado, mesaGerada.Pote);
        }
Exemple #8
0
        /// <summary>
        /// Verifica se a mão possui uma Quadra
        /// </summary>
        /// <returns>Retorna true caso houver Quadra na jogada, caso contrário false</returns>
        private bool VerificarQuadra()
        {
            try
            {
                (string Id, string Plural, string Peso)quadra = AgruparValor(_cartasShowdown, 4, null);

                if (quadra.Id != null)
                {
                    (string Nome, string Peso)kicker = ObterKickers(_cartasShowdown, quadra.Id, 1).First();
                    Classificacao = Mensagem.Gerar(Ressource.MaoClassificacaoQuadra, quadra.Plural, kicker.Nome);
                    Pontuacao     = long.Parse($"7{Texto.Repeat(quadra.Peso, 4)}{kicker.Peso}");
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"Erro ao Verificar Quadra - {ex.Message}", ex);
            }
        }