public void DesfazerMovimento(Posicao origem, Posicao destino, Peca pCapturada) { Peca p = t.RemovePeca(destino); p.DecrMovimentos(); if (pCapturada != null) { t.AddPeca(pCapturada, destino); Capturadas.Remove(pCapturada); } t.AddPeca(p, origem); // #Jogada Especial Roque Pequeno if (p is Rei && destino.Coluna == origem.Coluna + 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna + 3); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna + 1); Peca T = t.RemovePeca(destinoT); T.DecrMovimentos(); t.AddPeca(T, origemT); } // #Jogada Especial Roque Grande if (p is Rei && destino.Coluna == origem.Coluna - 2) { Posicao origemT = new Posicao(origem.Linha, origem.Coluna - 4); Posicao destinoT = new Posicao(origem.Linha, origem.Coluna - 1); Peca T = t.RemovePeca(destinoT); T.DecrMovimentos(); t.AddPeca(T, origemT); } // #Jogada Especial En Passant if (p is Peao) { if (origem.Coluna != destino.Coluna && pCapturada == VulneravelEnPassant) { Peca peao = t.RemovePeca(destino); Posicao posP; if (p.Cor == Cor.Branca) { posP = new Posicao(3, destino.Coluna); } else { posP = new Posicao(4, destino.Coluna); } t.AddPeca(peao, posP); } } }