Ejemplo n.º 1
0
 private bool valorCorrespondente(Carta carta)
 {
     return(deck.Any(x => x.Cor == carta.Cor || x.Valor == carta.Valor || x.Cor == CorCarta.CORINGA));
 }
Ejemplo n.º 2
0
        private Rodada jogandoCartas(Carta descarteAtual)
        {
            var rodada = new Rodada();

            rodada.Resultado = ResultadoRodada.CartaComum;
            var partida = deck.Where(x => x.Cor == descarteAtual.Cor || x.Valor == descarteAtual.Valor || x.Cor == CorCarta.CORINGA).ToList();

            if (partida.All(x => x.Valor == ValorCarta.CompraQuatro))
            {
                rodada.carta        = partida.First();
                rodada.corDeclarada = selecionarCor();
                rodada.Resultado    = ResultadoRodada.CompraQuatro;
                deck.Remove(partida.First());

                return(rodada);
            }

            if (partida.Any(x => x.Valor == ValorCarta.CompraDois))
            {
                rodada.carta        = partida.First(x => x.Valor == ValorCarta.CompraDois);
                rodada.Resultado    = ResultadoRodada.CompraDois;
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(rodada.carta);

                return(rodada);
            }

            if (partida.Any(x => x.Valor == ValorCarta.Pular))
            {
                rodada.carta        = partida.First(x => x.Valor == ValorCarta.Pular);
                rodada.Resultado    = ResultadoRodada.Pular;
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(rodada.carta);

                return(rodada);
            }

            if (partida.Any(x => x.Valor == ValorCarta.Inverter))
            {
                rodada.carta        = partida.First(x => x.Valor == ValorCarta.Inverter);
                rodada.Resultado    = ResultadoRodada.InverteJogo;
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(rodada.carta);

                return(rodada);
            }

            var corPartida   = partida.Where(x => x.Cor == descarteAtual.Cor);
            var valorPartida = partida.Where(x => x.Valor == descarteAtual.Valor);

            if (corPartida.Any() && valorPartida.Any())
            {
                var correspondingColor = deck.Where(x => x.Cor == corPartida.First().Cor);
                var correspondingValue = deck.Where(x => x.Valor == valorPartida.First().Valor);
                if (correspondingColor.Count() >= correspondingValue.Count())
                {
                    rodada.carta        = corPartida.First();
                    rodada.corDeclarada = rodada.carta.Cor;
                    deck.Remove(corPartida.First());

                    return(rodada);
                }
                else
                {
                    rodada.carta        = valorPartida.First();
                    rodada.corDeclarada = rodada.carta.Cor;
                    deck.Remove(valorPartida.First());

                    return(rodada);
                }
                //Seleciona a melhor carta
            }
            else if (corPartida.Any())
            {
                rodada.carta        = corPartida.First();
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(corPartida.First());

                return(rodada);
            }
            else if (valorPartida.Any())
            {
                rodada.carta        = valorPartida.First();
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(valorPartida.First());

                return(rodada);
            }

            //Deixar troca cor por ultimo
            if (partida.Any(x => x.Valor == ValorCarta.TrocaCor))
            {
                rodada.carta        = partida.First(x => x.Valor == ValorCarta.TrocaCor);
                rodada.corDeclarada = selecionarCor();
                rodada.Resultado    = ResultadoRodada.TrocaCor;
                deck.Remove(rodada.carta);

                return(rodada);
            }

            //Passa o resultado para a rodada
            rodada.Resultado = ResultadoRodada.Comprarjogar;
            return(rodada);
        }