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);
                    Peca rainha = new Rainha(tab, p.cor);
                    tab.colocarPeca(rainha, destino);
                    pecas.Add(rainha);
                }
            }

            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;
            }
        }
Пример #2
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);

            //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);
                    Console.WriteLine("Para qual peça você quer promover? (C,T,B e D): ");
                    char escolha = char.Parse(Console.ReadLine());
                    if (escolha == 'd' || escolha == 'D')
                    {
                        Peca dama = new Rainha(tab, p.cor);
                        tab.colocarPeca(dama, destino);
                        pecas.Add(dama);
                    }
                    else if (escolha == 'c' || escolha == 'C')
                    {
                        Peca cavalo = new Cavalo(tab, p.cor);
                        tab.colocarPeca(cavalo, destino);
                        pecas.Add(cavalo);
                    }
                    else if (escolha == 'b' || escolha == 'B')
                    {
                        Peca bispo = new Bispo(tab, p.cor);
                        tab.colocarPeca(bispo, destino);
                        pecas.Add(bispo);
                    }
                    else if (escolha == 't' || escolha == 'T')
                    {
                        Peca torre = new Torre(tab, p.cor);
                        tab.colocarPeca(torre, destino);
                        pecas.Add(torre);
                    }
                    else
                    {
                        throw new TabuleiroException("Escolha inválida!");
                    }
                }
            }

            if (estaEmXeque(adversaria(JogadorAtual)))
            {
                xeque = true;
            }
            else
            {
                xeque = false;
            }
            if (testeXequeMate(adversaria(JogadorAtual)))
            {
                terminada = true;
            }
            else
            {
                turno++;
                mudaJogador();
            }

            //En Passant
            if (p is Peao && p.qntMovimentos == 1 && (destino.linha == origem.linha - 2 || destino.linha == origem.linha + 2))
            {
                vuneravelEmPassant = p;
            }
            else
            {
                vuneravelEmPassant = null;
            }
        }