예제 #1
0
        public void ExecutarJogada(Posicao origem, Posicao destino)
        {
            Peca PecaCapturada = ExecutarMovimento(origem, destino);

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

            Peca p = Tab.Peca(destino);

            // #jogadaEspecial Promoção
            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);
                    Peca rainha = new Rainha(p.Cor, Tab);
                    Tab.ColocarPeca(rainha, destino);
                    Pecas.Add(rainha);
                }
            }

            if (EstaEmXeque(Adversario(JogadorAtual)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (XequeMate(Adversario(JogadorAtual)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudarJogador();
            }

            // #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) // método que executa a jogada de movimento de peça
        {
            Peca pecaCapturada = executaMovimento(origem, destino);

            if (estaEmCheque(jogadorAtual)) // testando se a jogada feita não colocou o rei do jogador em xeque, o que inviabiliza a jogada
            {
                desfazMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Você não pode se colocar em xeque");
            }
            Peca p = tab.peca(destino);

            // #jogadaespecial Promocao do Peao
            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 Promovida = new Rainha(tab, p.cor);
                    tab.colocarPeca(Promovida, destino);
                    pecas.Add(Promovida);
                }
            }

            if (estaEmCheque(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))
            {
                vulneralEnPassant = p;
            }
            else
            {
                vulneralEnPassant = null;
            }
        }