public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca p = Tab.RetirarPeca(destino); p.DecrementarQteDeMovimentos(); Tab.ColocarPeca(p, origem); if (pecaCapturada != null) { Tab.ColocarPeca(pecaCapturada, destino); _capturadas.Remove(pecaCapturada); } //#JogadaEspecial - Roque pequeno if (p 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 = Tab.RetirarPeca(origemTorre); torre.DecrementarQteDeMovimentos(); Tab.ColocarPeca(torre, destinoTorre); } //#JogadaEspecial - Roque grande if (p 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 = Tab.RetirarPeca(origemTorre); torre.DecrementarQteDeMovimentos(); Tab.ColocarPeca(torre, destinoTorre); } //#JogadaEspecial - En Passant if (p is Peao) { if (destino.coluna != origem.coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = Tab.RetirarPeca(destino); Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(3, destino.coluna); } else { posP = new Posicao(4, destino.coluna); } Tab.ColocarPeca(peao, posP); } } }