Exemplo n.º 1
0
        public void RealizaJogada(Posicao origem, Posicao destino)
        {
            Peca pecaCapturada = ExecutaMovimento(origem, destino);

            if (ValidaPosicaoXeque(CorPecaJogador))
            {
                DesfazerMovimento(origem, destino, pecaCapturada);
                throw new TabuleiroException("Não é possível colocar-se em posição de xeque!");
            }

            Peca pecaMovida = Tabuleiro.Peca(destino);

            // promocao
            if (pecaMovida is Peao)
            {
                if ((pecaMovida.Cor == Cor.Branca && destino.Linha == 0) || (pecaMovida.Cor == Cor.Preta && destino.Linha == 7))
                {
                    pecaMovida = Tabuleiro.RetirarPeca(destino);
                    PecasJogo.Remove(pecaMovida);
                    Peca dama = new Dama(Tabuleiro, pecaMovida.Cor);
                    Tabuleiro.ColocarPeca(dama, destino);
                    PecasJogo.Add(dama);
                }
            }

            if (ValidaPosicaoXeque(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Xeque = true;
            }
            else
            {
                Xeque = false;
            }

            if (ValidaXequeMate(IdentificarCorAdversaria(CorPecaJogador)))
            {
                Terminada = true;
            }
            else
            {
                Turno++;
                MudaCorPeca();
            }

            // en passant
            if (pecaMovida is Peao && (destino.Linha == origem.Linha - 2 || destino.Linha == origem.Linha + 2))
            {
                PecaEnPassant = pecaMovida;
            }
            else
            {
                PecaEnPassant = null;
            }
        }
Exemplo n.º 2
0
 public void ColocarNovaPeca(char coluna, int linha, Peca peca)
 {
     Tabuleiro.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ConverterPosicao());
     PecasJogo.Add(peca);
 }