public void UndoTheMovement(Position origin, Position destiny, Piece capturedPice) { Piece piece = Board.RemovePiece(destiny); piece.DecrementNumberOfMovements(); if (capturedPice != null) { Board.InsertPiece(capturedPice, destiny); Captured.Remove(capturedPice); } Board.InsertPiece(piece, origin); //#SpecialPlay Castling short if (piece is King && destiny.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Line, origin.Column + 3); Position rookDestiny = new Position(origin.Line, origin.Column + 1); Piece rook = Board.RemovePiece(rookDestiny); rook.DecrementNumberOfMovements(); Board.InsertPiece(rook, rookOrigin); } //#SpecialPlay Castling long if (piece is King && destiny.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Line, origin.Column - 4); Position rookDestiny = new Position(origin.Line, origin.Column - 1); Piece rook = Board.RemovePiece(rookDestiny); rook.DecrementNumberOfMovements(); Board.InsertPiece(rook, rookOrigin); } //#SpecialPlay En Passant if (piece is Pawn) { if (origin.Column != destiny.Column && capturedPice == VulnerableEnPassant) { Piece pawn = Board.RemovePiece(destiny); Position pawnPosition; if (piece.Color == Color.White) { pawnPosition = new Position(3, destiny.Column); } else { pawnPosition = new Position(4, destiny.Column); } Board.InsertPiece(pawn, pawnPosition); } } }