private void undoMove(Position origin, Position destination, Piece catchedPiece) { Piece p = Bd.GetPiece(destination); p.DecrementQtMovies(); if (catchedPiece != null) { Bd.PutPiece(catchedPiece, destination); catched.Remove(catchedPiece); } Bd.PutPiece(p, origin); //#Jogada especial Roque pequeno if (p is King && destination.Coluna == origin.Coluna + 2) { Position tOrigin = new Position(origin.Linha, origin.Coluna + 3); Position tDestination = new Position(origin.Linha, origin.Coluna + 1); Piece T = Bd.GetPiece(tOrigin); T.DecrementQtMovies(); Bd.PutPiece(T, tDestination); } //#Jogada especial Roque grande if (p is King && destination.Coluna == origin.Coluna - 2) { Position tOrigin = new Position(origin.Linha, origin.Coluna - 4); Position tDestination = new Position(origin.Linha, origin.Coluna - 1); Piece T = Bd.GetPiece(tOrigin); T.DecrementQtMovies(); Bd.PutPiece(T, tDestination); } //#Jogada especial En Passant if (p is Pawn) { if (origin.Coluna != destination.Coluna && catchedPiece == vulnerableEnPassant) { Piece pawn = Bd.GetPiece(destination); Position posP; if (p.Color == Color.White) { posP = new Position(3, destination.Coluna); } else { posP = new Position(4, destination.Coluna); } Bd.PutPiece(pawn, posP); } } }