示例#1
0
        public void PerguntarPagarFlop()
        {
            foreach (var jog in this.Mesa.PartidasAtuais)
            {
                IPartida partida     = jog.Value;
                IJogador jogador     = jog.Key;
                IJogador banca       = partida.Banca;
                IRodada  rodadaAtual = partida.Rodadas.Last();
                IRodada  proximaRodada;

                IAcaoTomada acaoTomada = jogador.PreFlop(this.Mesa.RegrasMesaAtual.Flop);
                rodadaAtual.AddAcaoTomada(acaoTomada);

                switch (acaoTomada.Acao)
                {
                case AcoesDecisaoJogador.PayFlop:
                    partida.AddToPote(jogador.PagarValor(this.Mesa.RegrasMesaAtual.Flop), TipoJogadorTHB.Jogador);
                    partida.AddToPote(banca.PagarValor(this.Mesa.RegrasMesaAtual.Flop), TipoJogadorTHB.Banca);
                    proximaRodada = new RodadaTHB(TipoRodada.Flop, partida.PoteAgora, partida.CartasMesa);
                    break;

                case AcoesDecisaoJogador.Fold:
                    proximaRodada           = new RodadaTHB(TipoRodada.FimDeJogo, partida.PoteAgora, partida.CartasMesa);
                    partida.JogadorGanhador = VencedorPartida.Banca;
                    break;

                default:
                    throw new Exception("Ação não esperada.");
                }

                partida.AddRodada(proximaRodada);
            }

            this.EncerrarPartidasTerminadas();
        }
示例#2
0
        public void EncerrarPartidaJogador(IJogador j)
        {
            IPartida partidaAtual = this.Mesa.PartidasAtuais[j];

            j.AddPartidaHistorico(this.Mesa.PartidasAtuais[j]);
            this.Mesa.PartidasAtuais.Remove(j);
        }
示例#3
0
        internal override IJogador CalcularVencedor()
        {
            var             jogadores = ListarJogadores();
            var             grupos    = jogadores.Select(a => a.GrupoJogada).Distinct();
            List <IJogador> vencedoresProximaRodada = new List <IJogador>();
            List <IJogador> vencedoresGrupos        = new List <IJogador>();

            foreach (var grupo in grupos)
            {
                var jogadoresGrupoAtual  = jogadores.Where(a => a.GrupoJogada == grupo).ToArray();
                var vencedoresGrupoAtual = jogadoresGrupoAtual;

                while (vencedoresGrupoAtual.Count() > 1)
                {
                    for (int i = 0; i < vencedoresGrupoAtual.Count(); i += 2)
                    {
                        IJogador ganhadorJogada = ExecutorRodada.RealizarJogada(vencedoresGrupoAtual[i], vencedoresGrupoAtual[i + 1]);
                        vencedoresProximaRodada.Add(ganhadorJogada);
                    }

                    vencedoresGrupoAtual = vencedoresProximaRodada.ToArray();
                    vencedoresProximaRodada.Clear();
                }

                vencedoresGrupos.Add(vencedoresGrupoAtual.First());
            }

            IJogador vencedorCampeonato = vencedoresGrupos.Count() > 1 ? ExecutorRodada.RealizarJogada(vencedoresGrupos[0], vencedoresGrupos[1]) : vencedoresGrupos[0];

            return(vencedorCampeonato);
        }
示例#4
0
        public void PerguntarAumentarPreRiver()
        {
            foreach (var jog in this.Mesa.PartidasAtuais)
            {
                IJogador    jogador     = jog.Key;
                IPartida    partida     = jog.Value;
                IJogador    banca       = partida.Banca;
                IAcaoTomada acaoJogador = jogador.Turn(jog.Value.CartasMesa, 0);

                switch (acaoJogador.Acao)
                {
                case AcoesDecisaoJogador.Check:
                    partida.AddRodada(new RodadaTHB(TipoRodada.River, partida.PoteAgora, partida.CartasMesa));
                    break;

                case AcoesDecisaoJogador.Call:
                    partida.AddToPote(jogador.PagarValor(this.Mesa.RegrasMesaAtual.River), TipoJogadorTHB.Jogador);
                    partida.AddToPote(banca.PagarValor(this.Mesa.RegrasMesaAtual.River), TipoJogadorTHB.Banca);
                    partida.AddRodada(new RodadaTHB(TipoRodada.River, partida.PoteAgora, partida.CartasMesa));
                    break;

                case AcoesDecisaoJogador.Raise:
                    partida.AddToPote(jogador.PagarValor(this.Mesa.RegrasMesaAtual.River), TipoJogadorTHB.Jogador);
                    partida.AddToPote(banca.PagarValor(this.Mesa.RegrasMesaAtual.River), TipoJogadorTHB.Banca);
                    partida.AddRodada(new RodadaTHB(TipoRodada.River, partida.PoteAgora, partida.CartasMesa));
                    break;

                default: throw new Exception("Ação não esperada.");
                }
            }

            this.EncerrarPartidasTerminadas();
        }
        public ISimulacaoJogosResumo SimulaJogos(IJogador jogador, IAcaoProbabilidade acao = null)
        {
            ISimulacaoJogosResumo simulacao = new SimulacaoJogosResumo()
            {
                QuantidadeJogosSimuladosPretendidos = this.QuantidadeJogosSimuladosPretendidos,
                StackInicial             = this.StackInicial,
                QuantidadeJogosSimulados = 0,
                QuantidadeJogosGanhos    = 0,
                QuantidadeJogosPerdidos  = 0,
                QuantidadeJogosEmpatados = 0,
                DescricaoInteligencia    = "Foge se não tiver chance vencer maior que 50% em qualquer decisão tomada",
                StackFinal        = 0,
                AcaoProbabilidade = acao
            };

            IJogador banca = new Banca(this.Config);

            Comum.Mesa m = new Comum.Mesa(this.Config);

            ICroupier croupier = new Croupier(new CroupierConstructParam()
            {
                Jogador           = jogador,
                Banca             = banca,
                ConfiguracaoPoker = this.Config
            }
                                              );

            simulacao = this.GeraUmaSimulacao(simulacao, croupier, jogador);

            return(simulacao);
        }
 public void SimulaJogosResumoPersiste(int quantidadeSimulacoes, IJogador jogador)
 {
     for (int i = 0; i < quantidadeSimulacoes; i++)
     {
         ISimulacaoJogosResumo s = this.SimulaJogos(jogador);
         this.PersisteSimulacao(s);
     }
 }
示例#7
0
        /// <summary>
        /// Retira jogador da mesa.
        /// </summary>
        /// <param name="j">Jogador a sair.</param>
        public void RetirarJogadorDaMesa(IJogador j)
        {
            if (!this.Mesa.JogadoresNaMesa.Contains(j))
            {
                throw new DealerException("Tentando retirar jogador que não está na mesa.");
            }

            this.Mesa.JogadoresNaMesa.Remove(j);
        }
示例#8
0
        public IBuilderSitAndGo addJogador(uint quantidadePartidasExecutar, IJogador jogador)
        {
            IJogador Jogador = jogador;

            Jogador.Corrida = new Corrida(quantidadePartidasExecutar);

            this.Jogadores.Add(Jogador);
            return(this);
        }
示例#9
0
        public IBuilderSitAndGo SetBanca(IJogador jogador)
        {
            // Dealer Mesa
            if (this.Banca == null)
            {
                this.Banca = jogador;
            }

            return(this);
        }
示例#10
0
        public void Calcula(IJogador jogador, IJogador banca)
        {
            ISitAndGo SitAndGo =
                new BuilderSitAndGo(new ConfiguracaoTHBonus())
                .addJogador(jogador)
                .SetBanca(banca)
                .ToSitAndGo();

            SitAndGo.Executa();
        }
示例#11
0
        internal virtual void IncluirJogada(IJogador jogador)
        {
            if (QuantidadeJogadoresPermitidos.HasValue && !PermiteMaisJogadores())
            {
                throw new QuantidadeJogadoresException("Capacidade de jogadores esgotada!");
            }

            QuantidadeJogadoresParticipantes++;
            _jogadores.Add(jogador);
        }
示例#12
0
 /// <summary>
 /// Inicia um SitAndGo.
 /// </summary>
 /// <param name="configuracaoPoker">Valors da configuração</param>
 /// <param name="Banca">O Jogador que representa a Banca.</param>
 public SitAndGo(IConfiguracaoPoker configuracaoPoker, IJogador Banca, IJogador Jogador)
 {
     //todo: retirar a banca do parâmetro, para ficar desacoplado
     this.ConfiguracaoPoker = configuracaoPoker;
     this.Mesa      = new Mesa(this.ConfiguracaoPoker);
     this.Jogadores = new List <IJogador>()
     {
         Jogador
     };
     this.Croupier = new Croupier(this.Mesa, Banca, Jogador);
 }
示例#13
0
        internal IList <IPartida> GetJogadorGanhou(int numPartidasRetornadas, IJogador j = null)
        {
            IList <IPartida> retorno = new List <IPartida>();

            for (int i = 0; i < numPartidasRetornadas; i++)
            {
                retorno.Add(this.GetJogadorGanhou(j));
            }

            return(retorno);
        }
        internal override IJogador CalcularVencedor()
        {
            var jogadores = ListarJogadores();

            if (jogadores.Count != QuantidadeJogadoresPermitidos)
            {
                throw new QuantidadeJogadoresException(String.Format("Quantidade de jogadores diferente de {0}!", QuantidadeJogadoresPermitidos));
            }

            IJogador vencedor = ExecutorRodada.RealizarJogada(jogadores[0], jogadores[1]);

            return(vencedor);
        }
示例#15
0
 private void DistribuiCartas(IJogador jogador, Carta[] CartasMandatorias, IPartida p)
 {
     if (CartasMandatorias != null && CartasMandatorias.Length > 0)
     {
         if (CartasMandatorias.Length == 1)
         {
             jogador.ReceberCarta(CartasMandatorias[0].Clone(), p.PopDeck());
         }
         else
         {
             jogador.ReceberCarta(CartasMandatorias[0].Clone(), CartasMandatorias[1].Clone());
         }
     }
     else
     {
         jogador.ReceberCarta(p.PopDeck(), p.PopDeck());
     }
 }
示例#16
0
        internal IPartida GetJogadorGanhou(IJogador j = null)
        {
            uint stackInicialJogador = 20000;

            Comum.Mesa m      = new Comum.Mesa(this.ConfiguracaoPadrao);
            IJogador   banca  = new Banca(this.ConfiguracaoPadrao);
            ICroupier  dealer = new Croupier(m, banca);

            dealer.DealerPartida = new DealerPartidaMock(m, banca, Enuns.VencedorPartida.Jogador);

            IJogador jogador = j ?? new DummyJogadorTHB(this.ConfiguracaoPadrao, stackInicialJogador);

            m.AddParticipante(jogador);

            dealer.ExecutarNovaPartidaCompleta();

            //while(jogador.Historico.Last().JogadorGanhador != Enuns.VencedorPartida.Jogador)
            //    dealer.ExecutarNovaPartidaCompleta();

            return(jogador.Historico.Last());
        }
示例#17
0
        internal IJogador RealizarJogada(IJogador jogador01, IJogador jogador02)
        {
            IJogador vencedorRodada = null;

            if (jogador01.TipoJogada == jogador02.TipoJogada)
            {
                return(jogador01);
            }

            switch (jogador01.TipoJogada)
            {
            case TipoJogada.Pedra:
                if (jogador02.TipoJogada == TipoJogada.Tesoura)
                {
                    vencedorRodada = jogador01;
                }
                break;

            case TipoJogada.Papel:
                if (jogador02.TipoJogada == TipoJogada.Pedra)
                {
                    vencedorRodada = jogador01;
                }
                break;

            case TipoJogada.Tesoura:
                if (jogador02.TipoJogada == TipoJogada.Papel)
                {
                    vencedorRodada = jogador01;
                }
                break;

            default:
                vencedorRodada = jogador02;
                break;
            }

            return(vencedorRodada ?? jogador02);
        }
示例#18
0
 public JogoFERA(IJogador jogador1,
                 IJogador jogador2)
 {
     this._jogador1 = jogador1;
     this._jogador2 = jogador2;
 }
示例#19
0
 public JogoFODA(IJogador jogador1, IJogador jogador2)
 {
     _jogador1 = jogador1;
     _jogador2 = jogador2;
 }
示例#20
0
 public JogoFODA(IJogador jogador1, IJogador jogador2)
 {
     _jogadorA = jogador1;
     _jogadorB = jogador2;
 }
示例#21
0
 public JogoFODA(IJogador jogador1)
 {
     _jogador1 = jogador1;
 }
示例#22
0
 /// <summary>
 /// Solicita a primeira carta para o baralho utilizando padrão command. tem o jogador da vez como parametro
 /// </summary>
 private void ComprarCarta(IJogador j)
 {
     this.comando = new ComprarCartaCommand(this.Baralho);
     j.setCommand(comando);
     j.EnviaComand();
 }
示例#23
0
 //todo: retirar banca e instanciar como padrão
 public DealerPartida(Mesa mesa, IJogador Banca, Carta [] MaoBanca = null, Carta[] MaoJogador = null)
 {
     this.Mesa  = mesa;
     this.banca = Banca;
     this.SetMaosPreferenciais(MaoBanca, MaoJogador);
 }
示例#24
0
 public JogoFoda(IJogador jogadorA, IJogador jogadorB)
 {
     this._jogadorA = jogadorA;
     this._jogadorB = jogadorB;
 }
示例#25
0
 private void Valida(IJogador j, Carta c)
 {
     JogoHelper.Show(String.Format(Instrucoes.JogadaMaquina ,c.ToString()));
     if (this.CartaLancada.Naipe == c.Naipe)
     {
         j.MinhasCartas.Remove(c);
         this.CartaLancada = null;
         ChamaDesafio d = estado == EstadoJogadasEnum.JogadorTentacobrirDesafio ? new ChamaDesafio(this.Desafiar) : new ChamaDesafio(this.MaquinaDesafia);
         d();
     }
     else
     {
         ChamaDesafio d = estado == EstadoJogadasEnum.JogadorTentacobrirDesafio ? new ChamaDesafio(this.Desafio) : new ChamaDesafio(this.JogaMaquina);
         d();
     }
 }
示例#26
0
 public JogoFoda(IJogador jogador1, IJogador jogador2)
 {
     _jogador1 = jogador1;
     _jogador2 = jogador2;
 }
示例#27
0
 public jogoFoda(IJogador iJogador, IJogador iJogador2)
 {
     _iJogador  = iJogador;
     _iJogador2 = iJogador2;
 }
示例#28
0
 public JogoFoda(IJogador jogadorA, IJogador jogadorB)
 {
     _jogadorA = jogadorA;
     _jogadorB = jogadorB;
 }
示例#29
0
 public JogoFIFA(IJogador jogador)
 {
     _jogador = jogador;
 }
示例#30
0
 public JogoFODA(IJogador jogadorA, IJogador jogadorB)
 {
     _jogadorA = jogadorA;
     _jogadorB = jogadorB;
 }
示例#31
0
 public Jogo(IJogador jogador1, IJogador jogador2)
 {
     this.jogador1 = jogador1;
     this.jogador2 = jogador2;
 }
示例#32
0
 public JogoFODA(IJogador jogador1, IJogador jogador2, IJogador jogador3)
 {
     _jogador1 = jogador1;
     _jogador2 = jogador2;
     _jogador3 = jogador3;
 }