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