-
-
Save dockimbel/5af92963fa77423da737a74c62b07e80 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Red [needs: view] | |
turtle: #() | |
win: layout [ tfield: base 500x500 white draw [] | |
panel [ | |
history: text-list 180x350 data [] return | |
panel [ button "Save" [save request-file history/data] | |
button "Load" [commands: load request-file foreach cmd commands [process-cmd cmd]] ] | |
] | |
return | |
cmdfield: field 300x25 [process-cmd cmdfield/text] | |
error: text 100x25 ] | |
home: func[] [ | |
turtle/position: 250x250 | |
turtle/color: black | |
turtle/direction: 0 | |
turtle/pen-down: true | |
] | |
reset: func[] [ | |
clear history/data | |
clear tfield/draw | |
home | |
] | |
turn-by: func[degrees [integer!]] [ | |
turtle/direction: turtle/direction + degrees // 360 | |
] | |
move-by: func[distance [integer!]] [ | |
delta: make pair! compose [(to integer! (sine turtle/direction) * distance) (to integer! (cosine turtle/direction) * distance)] | |
if turtle/pen-down [append/only tfield/draw compose [line (translate-loc turtle/position) (translate-loc turtle/position + delta)]] | |
turtle/position: turtle/position + delta | |
] | |
translate-loc: func [loc [pair!]] [loc/y: 500 - loc/y loc] | |
set-color: func [color] [ | |
append/only tfield/draw compose [pen (color)] | |
] | |
draw-turtle: func[] [ | |
headpos: make pair! compose [(to integer! (sine turtle/direction) * 10) (to integer! (cosine turtle/direction) * 10)] | |
append/only tfield/draw compose [fill-pen green circle (translate-loc turtle/position) 10 | |
circle (translate-loc turtle/position + headpos) 3 fill-pen off] | |
] | |
turtle-repeat: func [cnt rblk] [ | |
loop cnt [parse rblk parse-rules] | |
] | |
parse-rules: [ | |
some [ | |
['fd | 'forward] set distance integer! (move-by distance) | | |
['bk | 'back] set distance integer! (move-by distance * -1) | | |
'right set degrees integer! (turn-by degrees) | | |
'left set degrees integer! (turn-by degrees * -1) | | |
['pu | 'penup] (turtle/pen-down: false) | | |
['pd | 'pendown] (turtle/pen-down: true) | | |
'color set value word! (set-color value) | | |
'repeat set value integer! set blk block! (turtle-repeat value blk) | | |
'reset (reset) | | |
'home (home) | | |
'quit (quit) | | |
set word word! (error/text: mold/only compose [Unknown Word (word)]) break | |
] | |
] | |
process-cmd: func[cmd [string!]] [ | |
remove back tail tfield/draw | |
error/text: "" | |
parse load/all cmd parse-rules | |
if empty? error/text [append history/data cmd cmdfield/text: none ] | |
draw-turtle | |
] | |
process-cmd "home" | |
view/no-wait win |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment