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); }
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); } }
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); }
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); }
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); }
public static int compara(this Carta a, Carta b, Carta manilha) { return(comparar(a, b, manilha)); }
public static int valor(this Carta a, Carta manilha) { return(gerarValorCarta(a, manilha)); }
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()); }
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); } } }
private Carta jogarCarta(Carta a, Carta manilha) { avaliarTruco(manilha); _mao.Remove(a); return(a); }
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 } }
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; }
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(); }
public void ReceberCarta(Carta c) { _mao.Add(c); }
protected void ordenar(Carta manilha) { _mao = _mao.OrderBy(x => TrucoAuxiliar.gerarValorCarta(x, manilha)).ToList(); }
public virtual Escolha trucado(Jogador trucante, Truco valor, Carta manilha) { return(Escolha.aceitar); }