예제 #1
0
        private Rodada Ataque(Carta descarteAtual, Baralho pilhaDescarte)
        {
            Rodada rodada = new Rodada();

            rodada.Resultado    = ResultadoRodada.CompraIndireta;
            rodada.carta        = descarteAtual;
            rodada.corDeclarada = descarteAtual.Cor;
            if (descarteAtual.Valor == ValorCarta.Pular)
            {
                Console.WriteLine("Jogador: " + Posicao.ToString() + " Bloqueado");
                return(rodada);
            }
            else if (descarteAtual.Valor == ValorCarta.CompraDois)
            {
                Console.WriteLine("Jogador " + Posicao.ToString() + " Comprou 2 cartas");
                deck.AddRange(pilhaDescarte.Compra(2));
            }
            else if (descarteAtual.Valor == ValorCarta.CompraQuatro)
            {
                Console.WriteLine("Jogador " + Posicao.ToString() + " Comprou 4 cartas");
                deck.AddRange(pilhaDescarte.Compra(4));
            }

            return(rodada);
        }
예제 #2
0
        public Rodada jogadaAtual(Rodada rodadaAnterior, Baralho pilhaCompra)
        {
            Rodada rodada = new Rodada();

            if (rodadaAnterior.Resultado == ResultadoRodada.Pular ||
                rodadaAnterior.Resultado == ResultadoRodada.CompraDois ||
                rodadaAnterior.Resultado == ResultadoRodada.CompraQuatro)
            {
                return(Ataque(rodadaAnterior.carta, pilhaCompra));
            }
            else if ((rodadaAnterior.Resultado == ResultadoRodada.TrocaCor ||
                      rodadaAnterior.Resultado == ResultadoRodada.CompraIndireta ||
                      rodadaAnterior.Resultado == ResultadoRodada.Comprarjogar) &&
                     valorCorrespondente(rodadaAnterior.corDeclarada))
            {
                rodada = jogandoCartas(rodadaAnterior.corDeclarada);
            }
            else if (valorCorrespondente(rodadaAnterior.carta))
            {
                rodada = jogandoCartas(rodadaAnterior.carta);
            }
            else //Compra carta e verifica se poder ser jogada
            {
                rodada = comprarCarta(rodadaAnterior, pilhaCompra);
            }

            exibirRodada(rodada);
            return(rodada);
        }
예제 #3
0
        private void exibirRodada(Rodada rodada)
        {
            Console.ReadKey();
            if (rodada.Resultado == ResultadoRodada.Compra)
            {
                Console.WriteLine("Jogador: " + Posicao.ToString() + " Comprou");
            }
            if (rodada.Resultado == ResultadoRodada.Comprarjogar)
            {
                Console.WriteLine("Jogador: " + Posicao.ToString() + " Comprou porque não tinha cartas");
            }

            if (rodada.Resultado == ResultadoRodada.CartaComum ||
                rodada.Resultado == ResultadoRodada.Pular ||
                rodada.Resultado == ResultadoRodada.CompraDois ||
                rodada.Resultado == ResultadoRodada.TrocaCor ||
                rodada.Resultado == ResultadoRodada.CompraQuatro ||
                rodada.Resultado == ResultadoRodada.Comprarjogar ||
                rodada.Resultado == ResultadoRodada.CompraQuatro)
            {
                Console.WriteLine("Jogador: " + Posicao.ToString() + " descartou a carta " + rodada.carta.valorExibibo);
                if (rodada.carta.Cor == CorCarta.CORINGA)
                {
                    Console.WriteLine("Jogador " + Posicao.ToString() + " declarou " + rodada.corDeclarada.ToString() + " como nova cor");
                }
                if (rodada.Resultado == ResultadoRodada.InverteJogo)
                {
                    Console.WriteLine(" Sentido do jogo invertido");
                }
            }
            if (deck.Count == 1)
            {
                Console.WriteLine("Jogador " + Posicao.ToString() + " Gritou Uno!");
            }
        }
예제 #4
0
 private void descartarCarta(Rodada rodadaAtual)
 {
     if (rodadaAtual.Resultado == ResultadoRodada.CartaComum ||
         rodadaAtual.Resultado == ResultadoRodada.CompraQuatro ||
         rodadaAtual.Resultado == ResultadoRodada.Pular ||
         rodadaAtual.Resultado == ResultadoRodada.TrocaCor ||
         rodadaAtual.Resultado == ResultadoRodada.InverteJogo)
     {
         pilhaDescarte.Insert(0, rodadaAtual.carta);
     }
 }
예제 #5
0
        private Rodada comprarCarta(Rodada rodadaAnterior, Baralho pilhaDescarte)
        {
            Rodada rodada      = new Rodada();
            var    compraCarta = pilhaDescarte.Compra(1);

            deck.AddRange(compraCarta);

            if (valorCorrespondente(rodadaAnterior.carta))
            {
                rodada           = jogandoCartas(rodadaAnterior.carta);
                rodada.Resultado = ResultadoRodada.Compra;
            }
            else
            {
                rodada.Resultado = ResultadoRodada.Comprarjogar;
                rodada.carta     = rodadaAnterior.carta;
            }

            return(rodada);
        }
예제 #6
0
        public void Jogar()
        {
            int  i       = 0;
            bool passado = true;

            //Exibindo deck dos jogadores
            foreach (var jogador in Jogadores)
            {
                jogador.exibirDeck();
            }

            Console.ReadLine();

            Rodada rodadaAtual = new Rodada()
            {
                Resultado = ResultadoRodada.JogoIniciado, carta = pilhaDescarte.First(), corDeclarada = pilhaDescarte.First().Cor
            };

            Console.WriteLine("Carta de inicio: " + rodadaAtual.carta.valorExibibo);

            while (!Jogadores.Any(x => !x.deck.Any()))
            {
                if (pilhaCompra.Cartas.Count < 4)
                {
                    var cartaAtual = pilhaDescarte.First();

                    //Embaralhar pilha de descarte para mover pra compra
                    pilhaCompra.Cartas = pilhaDescarte.Skip(1).ToList();
                    pilhaCompra.Embaralhar();

                    //Deixa apenas a ultima carta jogada na pilha de descarte
                    pilhaDescarte = new List <Carta>();
                    pilhaDescarte.Add(cartaAtual);

                    Console.WriteLine("Cartas Embaralhadas");
                }

                var jogadorAtual = Jogadores[i];

                rodadaAtual = Jogadores[i].jogadaAtual(rodadaAtual, pilhaCompra);

                descartarCarta(rodadaAtual);

                if (rodadaAtual.Resultado == ResultadoRodada.InverteJogo)
                {
                    passado = !passado;
                }

                if (passado)
                {
                    i++;
                    if (i >= Jogadores.Count) //zera contador de player
                    {
                        i = 0;
                    }
                }
                else
                {
                    i--;
                    if (i < 0)
                    {
                        i = Jogadores.Count - 1;
                    }
                }
            }
            var vencedor = Jogadores.Where(x => !x.deck.Any()).First();

            MessageBox.Show("Jogador " + vencedor.Posicao.ToString() + " Ganhou 🏆🏆🏆" + MessageBoxButtons.OK
                            );
            Console.WriteLine("Jogador " + vencedor.Posicao.ToString() + " Ganhou!");

            Console.ReadKey();
        }
예제 #7
0
        private Rodada jogandoCartas(CorCarta cor)
        {
            var rodada = new Rodada();

            rodada.Resultado = ResultadoRodada.CartaComum;
            var partida = deck.Where(x => x.Cor == cor || 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.Pular))
            {
                rodada.carta        = partida.First(x => x.Valor == ValorCarta.Inverter);
                rodada.Resultado    = ResultadoRodada.Pular;
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(rodada.carta);

                return(rodada);
            }

            var corPartida = partida.Where(x => x.Cor == cor);

            if (corPartida.Any())
            {
                rodada.carta        = corPartida.First();
                rodada.corDeclarada = rodada.carta.Cor;
                deck.Remove(corPartida.First());

                return(rodada);
            }

            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);
        }
예제 #8
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);
        }