예제 #1
0
        public static int gerarValorCarta(Carta carta, Carta manilha)
        {
            int valorManilha = manilha.Valor == 13 ? 1 : manilha.Valor == 7 ? 10 : manilha.Valor + 1;

            int pesoCarta = carta.Valor - 3;

            if (pesoCarta < 1)
            {
                pesoCarta = pesoCarta + 13;
            }
            if (pesoCarta > 4)
            {
                pesoCarta = pesoCarta - 3;
            }

            if (carta.Valor == valorManilha)
            {
                pesoCarta = 10;

                switch (carta.Naipe)
                {
                case Naipes.ouros:
                    pesoCarta = pesoCarta + 1;
                    break;

                case Naipes.espadas:
                    pesoCarta = pesoCarta + 2;
                    break;

                case Naipes.copas:
                    pesoCarta = pesoCarta + 3;
                    break;

                case Naipes.paus:
                    pesoCarta = pesoCarta + 4;
                    break;
                }
            }

            return(pesoCarta);
        }
예제 #2
0
        public virtual Carta Jogar(List <Carta> cartasRodada, Carta manilha)
        {
            // encontra maior da mesa
            if (_mao.Count == 3)
            {
                ordenar(manilha);
            }
            Carta maiorMesa = cartasRodada.LastOrDefault();

            for (int i = 0; i < cartasRodada.Count - 1; i++)
            {
                if (TrucoAuxiliar.comparar(cartasRodada[i], maiorMesa, manilha) > 0)
                {
                    maiorMesa = cartasRodada[i];
                }
            }
            //descarta
            Carta carta = _mao[0];

            if (maiorMesa == null)
            {
                _mao.RemoveAt(0);
                return(carta);
            }
            else
            {
                for (int i = 0; i < _mao.Count; i++)
                {
                    carta = _mao[i];
                    if (TrucoAuxiliar.comparar(carta, maiorMesa, manilha) > 0)
                    {
                        _mao.RemoveAt(i);
                        return(carta);
                    }
                }
                carta = _mao[0];
                _mao.RemoveAt(0);
                return(carta);
            }
        }
예제 #3
0
        public Carta terceiroJogar(List <Carta> cartasMesa, Carta manilha)
        {
            Carta carta = _mao[0];

            if (TrucoAuxiliar.gerarValorCarta(cartasMesa[0], manilha) > TrucoAuxiliar.gerarValorCarta(cartasMesa[1], manilha))
            {
                carta = _mao[0];
                _mao.RemoveAt(0);
            }
            else
            {
                for (int i = 0; i < _mao.Count; i++)
                {
                    if (TrucoAuxiliar.compara(_mao[i], cartasMesa[1], manilha) > 0)
                    {
                        carta = _mao[i];
                        _mao.RemoveAt(i);
                        break;
                    }
                }
            }
            return(carta);
        }
예제 #4
0
        public override void novaCarta(Carta carta, Jogador jogador, Carta manilha)
        {
            if (cartasMao == null || cartasMao.Count == 4)
            {
                cartasMao = new List <Tuple <Jogador, Carta> >();
            }

            cartasMao.Add(new Tuple <Jogador, Carta>(jogador, carta));

            if (cartasMao.Count == 4)
            {
                cartasMao = cartasMao.OrderByDescending(x => x.Item2.valor(manilha)).ToList();
                if (cartasMao[0].Item2.compara(cartasMao[1].Item2, manilha) == 0 &&
                    cartasMao[0].Item1.IDEquipe == IDEquipe)
                {
                    pontosRodada = 1;
                }
            }

            cartasNaoUasadas.Remove(carta);

            avaliarTruco(manilha);
        }
예제 #5
0
        public override Carta Jogar(List <Carta> cartasRodada, Carta manilha)
        {
            // encontra maior da mesa
            if (_mao.Count == 3)
            {
                ordenar(manilha);
            }

            Carta maiorMesa = cartasRodada.LastOrDefault();

            for (int i = 0; i < cartasRodada.Count - 1; i++)
            {
                if (TrucoAuxiliar.comparar(cartasRodada[i], maiorMesa, manilha) > 0)
                {
                    maiorMesa = cartasRodada[i];
                }
            }

            //descarta
            Carta carta = _mao.LastOrDefault();

            if (cartasRodada.Count == 0)
            {
                _mao.Remove(carta);
                return(carta);
            }

            if (cartasRodada.Count == 1)
            {
                carta = _mao[0];
                _mao.RemoveAt(0);
                return(carta);
            }


            if (cartasRodada.Count == 2)
            {
                if (TrucoAuxiliar.comparar(cartasRodada[0], cartasRodada[1], manilha) > 0)
                {
                    carta = _mao[0];
                    _mao.RemoveAt(0);
                    return(carta);
                }
                else
                {
                    for (int i = 0; i < _mao.Count; i++)
                    {
                        if (TrucoAuxiliar.comparar(cartasRodada[1], cartasRodada[0], manilha) > 0 && TrucoAuxiliar.comparar(_mao[i], cartasRodada[1], manilha) > 0)
                        {
                            carta = _mao[i];
                            _mao.RemoveAt(i);
                            return(carta);
                        }
                        else
                        {
                            if (TrucoAuxiliar.comparar(cartasRodada[1], cartasRodada[0], manilha) > 0 && TrucoAuxiliar.comparar(cartasRodada[1], _mao[i], manilha) > 0)
                            {
                                carta = _mao[0];
                                _mao.RemoveAt(0);
                                return(carta);
                            }
                        }
                    }
                }
                _mao.Remove(carta);
                return(carta);
            }

            if (cartasRodada.Count == 3)
            {
                if (TrucoAuxiliar.comparar(cartasRodada[1], cartasRodada[0], manilha) > 0 && TrucoAuxiliar.comparar(cartasRodada[1], cartasRodada[2], manilha) > 0)
                {
                    carta = _mao[0];
                    _mao.RemoveAt(0);
                    return(carta);
                }
                else
                {
                    if (TrucoAuxiliar.comparar(cartasRodada[0], cartasRodada[1], manilha) > 0 || TrucoAuxiliar.comparar(cartasRodada[2], cartasRodada[1], manilha) > 0)
                    {
                        carta = _mao.Last();
                        return(carta);
                    }
                }
            }



            _mao.Remove(carta);
            return(carta);
        }
예제 #6
0
 public static int compara(this Carta a, Carta b, Carta manilha)
 {
     return(comparar(a, b, manilha));
 }
예제 #7
0
 public static int valor(this Carta a, Carta manilha)
 {
     return(gerarValorCarta(a, manilha));
 }
예제 #8
0
        public override Carta Jogar(List <Carta> cartasRodada, Carta manilha)
        {
            if (_mao.Count == 3)
            {
                foreach (var item in _mao)
                {
                    cartasNaoUasadas.Remove(item);
                }
            }

            if (probabilidadeVitoria(manilha) > 70)
            {
                pedirTruco();
            }

            switch (_mao.Count)
            {
            case 3:
                #region PrimeiraJogada
                switch (cartasRodada.Count)
                {
                case 0:
                    #region SerPrimeiroJogar
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                case 1:
                    #region SerPrimeirodaDuplaJogar
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                case 2:
                    #region SerPenultimoJogar
                    if (cartasRodada[0].compara(cartasRodada[1], manilha) > 0 && cartasRodada[0].valor(manilha) > 7)
                    {
                        return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));
                    }
                    if (menorQMata(cartasRodada[1], manilha) != null)
                    {
                        return(jogarCarta(menorQMata(cartasRodada[1], manilha), manilha));
                    }
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                case 3:
                    #region SerUltimo
                    if (menorQMata(cartasRodada[2], manilha) != null)
                    {
                        return(jogarCarta(menorQMata(cartasRodada[2], manilha), manilha));
                    }
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                default:
                    break;
                }
                break;
                #endregion

            case 2:
            case 1:
                #region SegundaOuUltimaJogada
                switch (cartasRodada.Count)
                {
                case 0:
                    #region SerPrimeiroJogar
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                case 1:
                    #region SerPrimeirodaDuplaJogar
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).First(), manilha));

                    #endregion

                case 2:
                    #region SerPenultimoJogar
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).Last(), manilha));

                    #endregion

                case 3:
                    #region SerUltimo
                    return(jogarCarta(_mao.OrderBy(x => x.valor(manilha)).Last(), manilha));

                    #endregion

                default:
                    break;
                }
                break;
                #endregion

            default:
                break;
            }

            return(_mao.OrderBy(x => x.valor(manilha)).First());
        }
예제 #9
0
        public override Escolha trucado(Jogador trucante, Truco pedido, Carta manilha)
        {
            if (trucante.IDEquipe == IDEquipe)
            {
                equipeTrucante = IDEquipe;
                trucoAtual     = pedido;
                return(Escolha.aceitar);
            }
            else
            {
                switch (pedido)
                {
                case Truco.truco:
                    if (90 > probabilidadeVitoria(manilha) && probabilidadeVitoria(manilha) > 50)
                    {
                        return(Escolha.aceitar);
                    }
                    else if (probabilidadeVitoria(manilha) >= 80)
                    {
                        return(Escolha.aumentar);
                    }
                    else
                    {
                        return(Escolha.correr);
                    }

                case Truco.seis:
                    if ((Equipe.BuscaID(IDEquipe).PontosEquipe >= 9 && probabilidadeVitoria(manilha) > 75) ||
                        (probabilidadeVitoria(manilha) < 90 && probabilidadeVitoria(manilha) > 75))
                    {
                        return(Escolha.aceitar);
                    }
                    else if (probabilidadeVitoria(manilha) >= 90)
                    {
                        return(Escolha.aumentar);
                    }
                    else
                    {
                        return(Escolha.correr);
                    }

                case Truco.nove:
                    if ((Equipe.BuscaID(IDEquipe).PontosEquipe >= 6 && probabilidadeVitoria(manilha) > 75) ||
                        (probabilidadeVitoria(manilha) < 90 && probabilidadeVitoria(manilha) > 75))
                    {
                        return(Escolha.aceitar);
                    }
                    else if (probabilidadeVitoria(manilha) >= 90)
                    {
                        return(Escolha.aumentar);
                    }
                    else
                    {
                        return(Escolha.correr);
                    }

                case Truco.doze:
                    if ((Equipe.BuscaID(IDEquipe).PontosEquipe >= 3 && probabilidadeVitoria(manilha) > 75) ||
                        (probabilidadeVitoria(manilha) < 90 && probabilidadeVitoria(manilha) > 75))
                    {
                        return(Escolha.aceitar);
                    }
                    else if (probabilidadeVitoria(manilha) >= 90)
                    {
                        return(Escolha.aumentar);
                    }
                    else
                    {
                        return(Escolha.correr);
                    }

                case Truco.jogo:
                    if (probabilidadeVitoria(manilha) > 80)
                    {
                        return(Escolha.aceitar);
                    }
                    else
                    {
                        return(Escolha.correr);
                    }

                default:
                    return(Escolha.aceitar);
                }
            }
        }
예제 #10
0
 private Carta jogarCarta(Carta a, Carta manilha)
 {
     avaliarTruco(manilha);
     _mao.Remove(a);
     return(a);
 }
예제 #11
0
        public override Carta Jogar(List <Carta> cartasRodada, Carta manilha)
        {
            // encontra maior da mesa
            if (_mao.Count == 3)
            {
                ordenar(manilha);
            }

            RegraTrucar(manilha);
            Carta carta;

            switch (_mao.Count)
            {
                #region case 3
            case 3:
                //Carta maiorMesa = cartasRodada.LastOrDefault();

                if (cartasRodada.Count == 0)
                {
                    if (TrucoAuxiliar.gerarValorCarta(_mao[1], manilha) > 7)
                    {
                        carta = _mao[1];
                        _mao.RemoveAt(1);
                        return(carta);
                    }
                    else
                    {
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                }

                if (cartasRodada.Count == 1)
                {
                    if (TrucoAuxiliar.compara(_mao[1], cartasRodada[0], manilha) > 0)
                    {
                        carta = _mao[1];
                        _mao.RemoveAt(1);
                        return(carta);
                    }
                    else
                    {
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                }

                if (cartasRodada.Count == 2)
                {
                    if (TrucoAuxiliar.compara(cartasRodada[0], cartasRodada[1], manilha) > 0)
                    {
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                    else
                    {
                        for (int i = 0; i < _mao.Count; i++)
                        {
                            carta = _mao[i];
                            if (TrucoAuxiliar.comparar(carta, cartasRodada[1], manilha) > 0)
                            {
                                _mao.RemoveAt(i);
                                return(carta);
                            }
                        }
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                }

                if (cartasRodada.Count == 3)
                {
                    if (TrucoAuxiliar.compara(cartasRodada[1], cartasRodada[0], manilha) > 0 && TrucoAuxiliar.compara(cartasRodada[1], cartasRodada[2], manilha) > 0)
                    {
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        ganhoPrimeira = true;
                        return(carta);
                    }
                    else
                    {
                        for (int i = 0; i < _mao.Count; i++)
                        {
                            carta = _mao[i];
                            if (TrucoAuxiliar.comparar(carta, cartasRodada[0], manilha) > 0 && TrucoAuxiliar.comparar(carta, cartasRodada[2], manilha) > 0)
                            {
                                _mao.RemoveAt(i);
                                ganhoPrimeira = true;
                                return(carta);
                            }
                        }
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                }

                return(null);

                #endregion

                #region case 2
            case 2:


                //Carta maiorMesa = cartasRodada.LastOrDefault();

                if (cartasRodada.Count == 0)
                {
                    ganhoPrimeira = true;
                    carta         = _mao[0];
                    _mao.RemoveAt(0);
                    return(carta);
                }

                if (cartasRodada.Count == 1)
                {
                    carta = _mao[0];
                    _mao.RemoveAt(0);
                    return(carta);
                }
                if (cartasRodada.Count == 2)
                {
                    carta = _mao[1];
                    _mao.RemoveAt(1);
                    return(carta);
                }
                if (cartasRodada.Count == 3)
                {
                    if (TrucoAuxiliar.compara(cartasRodada[1], cartasRodada[0], manilha) > 0 && TrucoAuxiliar.compara(cartasRodada[1], cartasRodada[2], manilha) > 0)
                    {
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                    else
                    {
                        for (int i = 0; i < _mao.Count; i++)
                        {
                            carta = _mao[i];
                            if (TrucoAuxiliar.comparar(carta, cartasRodada[0], manilha) > 0 && TrucoAuxiliar.comparar(carta, cartasRodada[2], manilha) > 0)
                            {
                                _mao.RemoveAt(i);
                                return(carta);
                            }
                        }
                        carta = _mao[0];
                        _mao.RemoveAt(0);
                        return(carta);
                    }
                }

                return(null);

                #endregion

                #region case 1
            case 1:
                carta = _mao[0];
                _mao.RemoveAt(0);
                return(carta);

            default: return(null);

                #endregion
            }
        }
예제 #12
0
        public override Escolha trucado(Jogador trucante, Truco valor, Carta manilha)
        {
            int ptsMinhaEqp = Equipe.BuscaID(this.IDEquipe).PontosEquipe;
            int ptsEqpAdv   = Equipe.BuscaID(trucante.IDEquipe).PontosEquipe;
            int x           = ManilhasNaMao(manilha);

            if ((ptsEqpAdv > ptsMinhaEqp && ptsEqpAdv + valorJogoTruco(valor) < 15) && ptsMinhaEqp - ptsEqpAdv > valorJogoTruco(valor))
            {
                if (cartasUsadas.Count < 4 && x > 0)
                {
                    return(Escolha.aceitar);
                }

                if (cartasUsadas.Count < 4 && _mao[0].valor(manilha) > 8)
                {
                    return(Escolha.aceitar);
                }

                if (ganhoPrimeira && x > 0)
                {
                    return(Escolha.aumentar);
                }

                if (ganhoPrimeira && (cartasUsadas.Count > 3 || cartasUsadas.Count < 8) && (_mao[0].valor(manilha) > 8 || _mao[1].valor(manilha) > 8))
                {
                    return(Escolha.aceitar);
                }

                if ((cartasUsadas.Count > 3 || cartasUsadas.Count < 8) && (_mao[0].valor(manilha) > 10))
                {
                    return(Escolha.aceitar);
                }


                if (ganhoPrimeira && (_mao[0].valor(manilha) > 7))
                {
                    return(Escolha.aceitar);
                }
            }
            return(Escolha.correr);

            //if (x >= 2)
            //    return Escolha.aumentar;
            //if (x == 1)
            //    return Escolha.aceitar;
            //if (ptsEqpAdv > 9 && ptsMinhaEqp < 5)
            //    return Escolha.aumentar;
            //if (_mao.Count == 3)
            //{
            //    if (_mao[0].valor(manilha) > 7)
            //        return Escolha.aceitar;
            //}
            //if (_mao.Count == 2)
            //{
            //    if (_mao[0].valor(manilha) > 7)
            //        return Escolha.aceitar;
            //}

            //if (_mao.Count == 0 && cartasUsadas.Last().valor(manilha) > 8)
            //    return Escolha.aceitar;

            //if (_mao.Count == 1 &&_mao[0].valor(manilha) <= 3)
            //    return Escolha.correr;
            //else
            //    return Escolha.aceitar;
        }
예제 #13
0
        public void Rodar(Jogador[] jogadoresParametro)
        {
            // Inicialização dos sinais do truco
            jogadores = jogadoresParametro;
            this.ligaEventos();

            // variaveis de controle
            int[] eqp1 = new int[2];
            int[] eqp2 = new int[2];
            eqp1[0] = jogadores[0].IDEquipe;
            eqp2[0] = jogadores[1].IDEquipe;

            // Mão de doze
            if (Equipe.BuscaID(eqp1[0]).PontosEquipe >= 12 || Equipe.BuscaID(eqp2[0]).PontosEquipe >= 12)
            {
                pontos = 3;
                log.logar("Mão de 12");
                log.logar("");
            }

            int indempate = 0;

            //Loop das rodadas
            for (int i = 0; i < 3; i++)
            {
                #region loop da rodada
                ListaCartas = new List <Carta>();
                Carta maior1  = null;
                Carta maior2  = null;
                int   imaior1 = 0;
                int   imaior2 = 0;

                for (int j = 0; j < 4; j++)
                {
                    #region loop da mão
                    ListaCartas.Add(jogadores[j].Jogar(ListaCartas, Manilha));
                    Carta X = ListaCartas.Last();
                    log.logar(jogadores[j].nome + " jogou {0}, peso: {1}", X.ToString(), TrucoAuxiliar.gerarValorCarta(X, Manilha));
                    novaCarta(X, jogadores[j], Manilha);

                    if (jogadores[j].IDEquipe == eqp1[0] && TrucoAuxiliar.comparar(ListaCartas[j], maior1, Manilha) > 0)
                    {
                        maior1    = ListaCartas[j];
                        imaior1   = j;
                        indempate = j;
                    }
                    if (jogadores[j].IDEquipe == eqp2[0] && TrucoAuxiliar.comparar(ListaCartas[j], maior2, Manilha) > 0)
                    {
                        maior2    = ListaCartas[j];
                        imaior2   = j;
                        indempate = j;
                    }
                    if (correu > -1)
                    {
                        log.logar($"Equipe {Equipe.BuscaID(correu)} correu do truco.");
                        Equipe vencedora = Equipe.BuscaID(jogadores.Where(x => x.IDEquipe != correu).First().IDEquipe);
                        vencedora.GanharPontos(pontos);
                        log.logar("A {0}, ganhou a rodada !", vencedora.ToString());
                        desligaEventos();
                        return;
                    }
                    #endregion
                }

                if (TrucoAuxiliar.comparar(maior1, maior2, Manilha) == 0)
                {
                    if (i == 0)
                    {
                        eqp1[1] += 3;
                        eqp2[1] += 3;
                    }
                    else
                    {
                        eqp1[1] += 2;
                        eqp2[1] += 2;
                    }
                    log.logar("*Empate*");
                    jogadores = Reordenar(jogadores, indempate);
                }
                else
                {
                    if (TrucoAuxiliar.comparar(maior1, maior2, Manilha) > 0)
                    {
                        if (i == 0)
                        {
                            eqp1[1] += 3;
                        }
                        else
                        {
                            eqp1[1] += 2;
                        }

                        log.logar("\nA equipe do jogador{0}, ganhou a mão.", jogadores[imaior1].nome);
                        log.logar("");
                        jogadores = Reordenar(jogadores, imaior1);
                    }
                    else
                    {
                        if (i == 0)
                        {
                            eqp2[1] += 3;
                        }
                        else
                        {
                            eqp2[1] += 2;
                        }
                        log.logar("\nA equipe do jogador{0}, ganhou a mão.", jogadores[imaior2].nome);
                        log.logar("");
                        jogadores = Reordenar(jogadores, imaior2);
                    }
                }

                if (eqp1[1] != eqp2[1] && (eqp1[1] == 5 || eqp2[1] == 5))
                {
                    break;
                }
                #endregion
            }

            if (correu == eqp2[0])
            {
                Equipe.BuscaID(eqp1[0]).GanharPontos(pontos);
                log.logar("A {0}, ganhou a rodada !", Equipe.BuscaID(eqp1[0]).ToString());
            }
            else if (correu == eqp1[0])
            {
                Equipe.BuscaID(eqp2[0]).GanharPontos(pontos);
                log.logar("A {0}, ganhou a rodada !", Equipe.BuscaID(eqp2[0]).ToString());
            }
            else
            {
                if (eqp1[1] > eqp2[1])
                {
                    Equipe.BuscaID(eqp1[0]).GanharPontos(pontos);
                    log.logar("A {0}, ganhou a rodada !", Equipe.BuscaID(eqp1[0]).ToString());
                }
                else if (eqp1[1] < eqp2[1])
                {
                    Equipe.BuscaID(eqp2[0]).GanharPontos(pontos);
                    log.logar("A {0}, ganhou a rodada !", Equipe.BuscaID(eqp2[0]).ToString());
                }
                else
                {
                    log.logar("\n*Empate na rodada, ninguem ganhou pontos*");
                }
            }
            desligaEventos();
        }
예제 #14
0
 public void ReceberCarta(Carta c)
 {
     _mao.Add(c);
 }
예제 #15
0
 protected void ordenar(Carta manilha)
 {
     _mao = _mao.OrderBy(x => TrucoAuxiliar.gerarValorCarta(x, manilha)).ToList();
 }
예제 #16
0
 public virtual Escolha trucado(Jogador trucante, Truco valor, Carta manilha)
 {
     return(Escolha.aceitar);
 }