public void undoMove(Position origin, Position destination, Piece capturedPiece) { Piece p = board.removePiece(destination); p.decreaseMovementNumber(); if (capturedPiece != null) { board.placeApiece(capturedPiece, destination); captured.Remove(capturedPiece); } board.placeApiece(p, origin); // #jogadaespecial roque pequeno if (p is King && destination.column == origin.column + 2) { Position originT = new Position(origin.line, origin.column + 3); Position destinastionT = new Position(origin.line, origin.column + 1); Piece T = board.removePiece(destinastionT); T.decreaseMovementNumber(); board.placeApiece(T, originT); } // #jogadaespecial roque grande if (p is King && destination.column == origin.column - 2) { Position originT = new Position(origin.line, origin.column - 4); Position destinastionT = new Position(origin.line, origin.column - 1); Piece T = board.removePiece(destinastionT); T.decreaseMovementNumber(); board.placeApiece(T, originT); } // #jogadaespecial en passant if (p is Pawn) { if (origin.column != destination.column && capturedPiece == enPassantVulnerable) { Piece peao = board.removePiece(destination); Position posP; if (p.color == Color.WHITE) { posP = new Position(3, destination.column); } else { posP = new Position(4, destination.column); } board.placeApiece(peao, posP); } } }