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; } }
public void ColocarNovaPeca(char coluna, int linha, Peca peca) { Tabuleiro.ColocarPeca(peca, new PosicaoXadrez(coluna, linha).ConverterPosicao()); PecasJogo.Add(peca); }