Hi Bowen,
Nice! Thanks for sharing. One minor suggestion, rather than
Apply[Sequence, # -> OptionValue[#] & /@ Options[Line][[All, 1]]]
consider using FilterRules
. The more common way of handling options is like this
ClearAll@walker;
Options[walker] = Join[Options@Line, Options@Graphics];
walker[afunc_, range_List, opts : OptionsPattern[]] :=
Graphics[
Line[AnglePath[afunc /@ Range @@ range],
Sequence @@ FilterRules[{opts}, Options[Line]]],
Sequence @@ FilterRules[{opts}, Options[Graphics]]];