public void desfazerMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca dFM = tabu.removerPeca(destino); dFM.atualizarQtdMovimentosRetroativo(); if (pecaCapturada != null) { tabu.incluirPeca(pecaCapturada, destino); capturadas.Remove(pecaCapturada); } tabu.incluirPeca(dFM, origem); // jogada roque if (dFM is Rei && destino.coluna == origem.coluna + 2) { Posicao origemTorre = new Posicao(origem.linha, origem.coluna + 3); Posicao destinoTorre = new Posicao(origem.linha, origem.coluna + 1); Peca torre = tabu.removerPeca(destinoTorre); torre.atualizarQtdMovimentosRetroativo(); tabu.incluirPeca(torre, origemTorre); } if (dFM is Rei && destino.coluna == origem.coluna - 2) { Posicao origemTorre = new Posicao(origem.linha, origem.coluna - 4); Posicao destinoTorre = new Posicao(origem.linha, origem.coluna - 1); Peca torre = tabu.removerPeca(destinoTorre); torre.atualizarQtdMovimentosRetroativo(); tabu.incluirPeca(torre, origemTorre); } // jogada roque // jogada en passant if (dFM is Peao) { if (origem.coluna != destino.coluna && pecaCapturada == enPassant) { Peca peao = tabu.removerPeca(destino); Posicao posicaoPeao; if (dFM.cor == Cor.Branco) { posicaoPeao = new Posicao(3, destino.coluna); } else { posicaoPeao = new Posicao(4, destino.coluna); } tabu.incluirPeca(peao, posicaoPeao); } } // jogada en passant }