Beispiel #1
0
        private Peca EscolhePromo(Tabuleiro tabuleiro, Cor cor)
        {
            char resp = ' ';
            int  aux  = 0;

            while (aux == 0)
            {
                System.Console.Write("Escolha sua promoção(D/B/T/C): ");
                resp = char.Parse(Console.ReadLine());

                if (resp == 'd' || resp == 'D')
                {
                    Peca p = new Dama(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 't' || resp == 'T')
                {
                    Peca p = new Torre(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 'b' || resp == 'B')
                {
                    Peca p = new Bispo(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }
                else if (resp == 'c' || resp == 'C')
                {
                    Peca p = new Cavalo(tabuleiro, cor);
                    if (FoiCapturada(p))
                    {
                        return(p);
                    }
                }

                Console.WriteLine("Peça inexistente, tente novamente!");
                Console.WriteLine();
            }
            return(null);
        }
        public void escolhaPromocao(string s)
        {
            pecaPromocao = tab.retirarPeca(posicaoPecaPromocao);
            pecas.Remove(pecaPromocao);
            Peca p;
            int  i = 0;

            if (int.TryParse(s, out i))
            {
                switch (i)
                {
                case 1:
                    p = new Dama(tab, pecaPromocao.cor);
                    break;

                case 2:
                    p = new Bispo(tab, pecaPromocao.cor);
                    break;

                case 3:
                    p = new Torre(tab, pecaPromocao.cor);
                    break;

                case 4:
                    p = new Cavalo(tab, pecaPromocao.cor);
                    break;

                default:
                    p = new Dama(tab, pecaPromocao.cor);
                    break;
                }
                tab.colocarPeca(p, posicaoPecaPromocao);
                pecas.Add(p);
                promocao = false;
            }
            else
            {
                p = new Dama(tab, pecaPromocao.cor);
                tab.colocarPeca(p, posicaoPecaPromocao);
                pecas.Add(p);
                promocao = false;
                throw new TabuleiroException("Valor digitado não é um número óu é inválido! Peça será uma Dama!");
            }
        }
Beispiel #3
0
        public void checarPromocao()
        {
            if (promocao != null)
            {
                Console.WriteLine("Peao promovido! Escolha uma promocao:");
                Console.WriteLine("1 - Bispo.");
                Console.WriteLine("2 - Cavalo.");
                Console.WriteLine("3 - Dama.");
                Console.WriteLine("4 - Torre.");
                int     n       = 3;
                Posicao destino = promocao.pos;
                tab.retirarPeca(destino);
                pecas.Remove(promocao);
                Peca nova = new Dama(tab, promocao.cor);

                if (int.TryParse(Console.ReadLine(), out n))
                {
                    if (n == 1)
                    {
                        nova = new Bispo(tab, promocao.cor);
                    }
                    else if (n == 2)
                    {
                        nova = new Cavalo(tab, promocao.cor);
                    }
                    else if (n == 4)
                    {
                        nova = new Torre(tab, promocao.cor);
                    }
                }

                tab.adicionarPeca(nova, destino);
                pecas.Add(nova);
                promocao = null;
            }
        }
        /// <summary>
        /// metodo que executa a jogada passada pelo jogador e solicita confirmacoes de xeque e xequemate
        /// </summary>
        /// <param name="origem"></param>
        /// <param name="destino"></param>
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = tab.peca(destino);

            //#jogadaEspecial Promocao
            if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Amarela && destino.linha == 7))
            {
                bool pergunta = false;
                while (!pergunta)
                {
                    Console.WriteLine("Deseja transformar seu Peao em qual Peca? D/C/T/B");
                    char resposta = char.Parse(Console.ReadLine());
                    if (resposta == 'd' || resposta == 'D')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca dama = new Dama(tab, p.cor);
                        tab.colocarPeca(dama, destino);
                        pecas.Add(dama);
                        pergunta = true;
                    }
                    else if (resposta == 'c' || resposta == 'C')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca cavalo = new Cavalo(tab, p.cor);
                        tab.colocarPeca(cavalo, destino);
                        pecas.Add(cavalo);
                        pergunta = true;
                    }
                    else if (resposta == 't' || resposta == 'T')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca torre = new Torre(tab, p.cor);
                        tab.colocarPeca(torre, destino);
                        pecas.Add(torre);
                        pergunta = true;
                    }
                    else if (resposta == 'b' || resposta == 'B')
                    {
                        p = tab.retirarPeca(destino);
                        pecas.Remove(p);
                        Peca bispo = new Bispo(tab, p.cor);
                        tab.colocarPeca(bispo, destino);
                        pecas.Add(bispo);
                        pergunta = true;
                    }
                    else
                    {
                        Console.WriteLine("Opcao invalida");
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }



            if (testeXequemate(adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }


            //#JogadaEspecial En Passant
            if (p is Peao && destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
Beispiel #5
0
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmXeque(JogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = Tab.peca(destino);

            //jogada especial promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    bool result = false;
                    Console.WriteLine();
                    Console.Write("Qual peça deseja substituir seu Peão 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                    int opcao = int.Parse(Console.ReadLine());

                    while (!result)
                    {
                        if (opcao < 1)
                        {
                            result = false;
                            Console.Write("Opção inválida! Informe uma das seguintes opções 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                            opcao = int.Parse(Console.ReadLine());
                        }
                        else if (opcao > 4)
                        {
                            result = false;
                            Console.Write("Opção inválida! Informe uma das seguintes opções 1-Dama 2-Cavalo 3-Bispo 4-Torre: ");
                            opcao = int.Parse(Console.ReadLine());
                        }
                        else
                        {
                            result = true;
                        }
                    }
                    p = Tab.retirarPeca(destino);
                    Pecas.Remove(p);

                    switch (opcao)
                    {
                    case 1:
                        Peca dama = new Dama(p.Cor, Tab);
                        Tab.colocarPeca(dama, destino);
                        Pecas.Add(dama);
                        break;

                    case 2:
                        Peca cavalo = new Cavalo(p.Cor, Tab);
                        Tab.colocarPeca(cavalo, destino);
                        Pecas.Add(cavalo);
                        break;

                    case 3:
                        Peca bispo = new Bispo(p.Cor, Tab);
                        Tab.colocarPeca(bispo, destino);
                        Pecas.Add(bispo);
                        break;

                    case 4:
                        Peca torre = new Torre(p.Cor, Tab);
                        Tab.colocarPeca(torre, destino);
                        Pecas.Add(torre);
                        break;
                    }
                }
            }

            if (estaEmXeque(adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }
            if (testeXequemate(adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                mudaJogador();
            }

            // jogada especial en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                vuleravelEmPassant = p;
            }
            else
            {
                vuleravelEmPassant = null;
            }
        }
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))
            {
                desfazMvimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque.");
            }

            Peca p = tab.peca(destino);

            // Promoção
            if (p is Peao)
            {
                if ((p.cor == Cor.Branca && destino.linha == 0) || (p.cor == Cor.Preta && destino.linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);
                    bool foiPromovido = false;
                    Console.WriteLine("Informe a peça desejada (D, T, B, C): ");
                    while (foiPromovido == false)
                    {
                        string promovida = Console.ReadLine();
                        if (promovida == "C")
                        {
                            Peca cavalo = new Cavalo(tab, p.cor);
                            tab.colocarPeca(cavalo, destino);
                            pecas.Add(cavalo);
                            foiPromovido = true;
                        }
                        else if (promovida == "D")
                        {
                            Peca dama = new Dama(tab, p.cor);
                            tab.colocarPeca(dama, destino);
                            pecas.Add(dama);
                            foiPromovido = true;
                        }
                        else if (promovida == "T")
                        {
                            Peca torre = new Torre(tab, p.cor);
                            tab.colocarPeca(torre, destino);
                            pecas.Add(torre);
                            foiPromovido = true;
                        }
                        else if (promovida == "B")
                        {
                            Peca bispo = new Bispo(tab, p.cor);
                            tab.colocarPeca(bispo, destino);
                            pecas.Add(bispo);
                            foiPromovido = true;
                        }
                        else
                        {
                            Console.WriteLine("Peça informada não é válida");
                            Console.WriteLine("Informe a peça desejada (D, T, B, C): ");
                            promovida    = Console.ReadLine();
                            foiPromovido = false;
                        }
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversaria(jogadorAtual)))
            {
                terminada = true;
                Console.WriteLine("XEQUE MATE");
            }
            else
            {
                turno++;
                mudaJogador();
            }

            //enPassant
            if (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (EstaEmXeque(JogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }
            Peca p = Tab.peca(destino);

            // #jogadaespecial promocao

            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = Tab.RetirarPeca(destino);
                    Pecas.Remove(p);
                    Console.WriteLine();
                    Console.Write("Escolha entre Bispo, Cavalo, Dama e Torre (B/C/D/T): ");
                    Char pecaescolhida = char.Parse(Console.ReadLine());
                    if (pecaescolhida == 'B')
                    {
                        Peca peca = new Bispo(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'C')
                    {
                        Peca peca = new Cavalo(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'D')
                    {
                        Peca peca = new Dama(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else if (pecaescolhida == 'T')
                    {
                        Peca peca = new Torre(Tab, p.Cor);
                        Tab.ColocarPeca(peca, destino);
                        Pecas.Add(peca);
                    }
                    else
                    {
                        throw new TabuleiroException("Peça inválida!");
                    }
                }
            }

            if (EstaEmXeque(Adversaria(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }
            if (TesteXequemate(Adversaria(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaJogador();
            }


            //#Jogadaespecial en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                VulneravelEnPassant = p;
            }
            else
            {
                VulneravelEnPassant = null;
            }
        }
        public void realizarJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = executarMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = tab.peca(destino);

            // #jogadaespecial promocao
            if (p is Peao)
            {
                if ((p.cor == Cor.Branco && destino.Linha == 0) || (p.cor == Cor.Preto && destino.Linha == 7))
                {
                    p = tab.retirarPeca(destino);
                    pecas.Remove(p);

                    ConsoleColor aux = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine();
                    Console.WriteLine("#--- PROMOÇÃO! ---#");
                    Console.WriteLine("Opções de promoção:");
                    Console.WriteLine(" - Dama[D]\n - Torre[T]\n - Bispo[B]\n - Cavalo[C]");
                    Console.ForegroundColor = aux;
                    Console.Write("Digite o caractere da opção escolhida: ");

                    char escolha = char.Parse(Console.ReadLine());

                    switch (escolha)
                    {
                    //DAMA
                    case 'D':
                        Peca dama = new Dama(tab, p.cor);
                        tab.colocarPeca(destino, dama);
                        pecas.Add(dama);
                        break;

                    case 'd':
                        Peca dama1 = new Dama(tab, p.cor);
                        tab.colocarPeca(destino, dama1);
                        pecas.Add(dama1);
                        break;

                    //TORRE
                    case 'T':
                        Peca torre = new Torre(tab, p.cor);
                        tab.colocarPeca(destino, torre);
                        pecas.Add(torre);
                        break;

                    case 't':
                        Peca torre1 = new Torre(tab, p.cor);
                        tab.colocarPeca(destino, torre1);
                        pecas.Add(torre1);
                        break;

                    //BISPO
                    case 'B':
                        Peca bispo = new Bispo(tab, p.cor);
                        tab.colocarPeca(destino, bispo);
                        pecas.Add(bispo);
                        break;

                    case 'b':
                        Peca bispo1 = new Bispo(tab, p.cor);
                        tab.colocarPeca(destino, bispo1);
                        pecas.Add(bispo1);
                        break;

                    //CAVALO
                    case 'C':
                        Peca cavalo = new Cavalo(tab, p.cor);
                        tab.colocarPeca(destino, cavalo);
                        pecas.Add(cavalo);
                        break;

                    case 'c':
                        Peca cavalo1 = new Cavalo(tab, p.cor);
                        tab.colocarPeca(destino, cavalo1);
                        pecas.Add(cavalo1);
                        break;
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (testeXequemate(adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }


            // #jogadaespecial en passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }
Beispiel #9
0
        //realiza as jogadas em turno
        public void realizaJogada(Posicao origem, Posicao destino)
        {
            Peca capturada = executaMovimento(origem, destino);

            if (estaEmXeque(jogadorAtual))
            {
                desfazMovimento(origem, destino, capturada);
                throw new TabuleiroException("Você não pode se colocar em xeque!");
            }

            Peca p = tab.peca(destino);

            // # JOGADA ESPECIAL PROMOÇÃO
            if (p is Peao)
            {
                if ((p.cor == Cor.Branco && destino.linha == 0) || (p.cor == Cor.Preto && destino.linha == 7))
                {
                    tab.retirarPeca(destino);
                    pecas.Remove(p);
                    Peca dama   = new Dama(tab, p.cor);
                    Peca cavalo = new Cavalo(tab, p.cor);
                    Peca bispo  = new Bispo(tab, p.cor);
                    Peca torre  = new Torre(tab, p.cor);
                    Console.WriteLine("Escolha a peça que substituira o Peão: ");
                    Console.WriteLine("DAMA(rainha) = 1");
                    Console.WriteLine("CAVALO       = 2");
                    Console.WriteLine("BISPO        = 3");
                    Console.WriteLine("TORRE        = 4");
                    Console.Write("Sua Escolha: ");
                    int num = int.Parse(Console.ReadLine());
                    switch (num)
                    {
                    case 1:
                        tab.colocarPeca(dama, destino);
                        pecas.Add(dama);
                        break;

                    case 2:
                        tab.colocarPeca(cavalo, destino);
                        pecas.Add(cavalo);
                        break;

                    case 3:
                        tab.colocarPeca(bispo, destino);
                        pecas.Add(bispo);
                        break;

                    case 4:
                        tab.colocarPeca(torre, destino);
                        pecas.Add(torre);
                        break;

                    default:
                        throw new TabuleiroException("Escolha incorreta!, PERDEU A PEÇA!!!");
                    }
                }
            }

            if (estaEmXeque(adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudarJogador();
            }
            // # JOGADA ESPECIAL EN PASSANT
            vulneravelEnPassant = (p is Peao && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2)) ? p : null;
        }
Beispiel #10
0
        public void RealizaJogada(Posicao origem, Posicao destino, string opPromocao)
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (EstaEmXeque(jogadorAtual))
            {
                DesfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não podes colocar-te em xeque!");
            }

            Peca p = tab.GetPeca(destino);

            // #jogadaespecial Promocao
            if (p is Peao)
            {
                if ((p.Cor == Cor.Branca && destino.Linha == 0) || (p.Cor == Cor.Preta && destino.Linha == 7))
                {
                    p = tab.RetirarPeca(destino);
                    Pecas.Remove(p);
                    if (opPromocao != null && opPromocao != "N")
                    {
                        switch (opPromocao)
                        {
                        case "D":
                        {
                            Peca dama = new Dama(p.Cor, tab);
                            tab.ColocarPeca(dama, destino);
                            Pecas.Add(dama);
                            break;
                        }

                        case "B":
                        {
                            Peca bispo = new Bispo(p.Cor, tab);
                            tab.ColocarPeca(bispo, destino);
                            Pecas.Add(bispo);
                            break;
                        }

                        case "C":
                        {
                            Peca cavalo = new Cavalo(p.Cor, tab);
                            tab.ColocarPeca(cavalo, destino);
                            Pecas.Add(cavalo);
                            break;
                        }

                        case "T":
                        {
                            Peca torre = new Torre(p.Cor, tab);
                            tab.ColocarPeca(torre, destino);
                            Pecas.Add(torre);
                            break;
                        }

                        default:
                        {
                            throw new TabuleiroException("Peça errada para Promocao!");
                        }
                        }
                    }
                }
            }

            if (EstaEmXeque(Adversaria(jogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }

            if (TesteXequeMate(Adversaria(jogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                Turno++;
                mudaJogador();
            }


            //#jogadaespecial En Passant
            if (p is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                vulneravelEnPassant = p;
            }
            else
            {
                vulneravelEnPassant = null;
            }
        }