public void DesfazMovimento(Posicao origem, Posicao destino, Peca pecaCapturada) { Peca p = Tabuleiro.RetirarPeca(destino); p.DecrementarQtMovimentos(); if (pecaCapturada != null) { Tabuleiro.ColocarPeca(pecaCapturada, destino); _capturadas.Remove(pecaCapturada); } Tabuleiro.ColocarPeca(p, origem); // #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 t = Tabuleiro.RetirarPeca(destinoTorre); t.DecrementarQtMovimentos(); Tabuleiro.ColocarPeca(t, origemTorre); } // #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 t = Tabuleiro.RetirarPeca(destinoTorre); t.DecrementarQtMovimentos(); Tabuleiro.ColocarPeca(t, origemTorre); } // #jogadaespecial En Pessant if (p is Peao) { if (origem.Coluna != destino.Coluna && pecaCapturada == VulneravelEnPassant) { Peca peao = Tabuleiro.RetirarPeca(destino); Posicao posPeao; if (p.Cor == Cor.Branca) { posPeao = new Posicao(3, destino.Coluna); } else { posPeao = new Posicao(4, destino.Coluna); } Tabuleiro.ColocarPeca(peao, posPeao); } } }