Rebol3 Code Examplex
Simple turtle graphics
A beginner-friendly way to draw shapes and patterns by moving a “turtle” with commands like forward, turn, and pen up/down.
Rebol [
title: "Rosetta code: Simple turtle graphics"
file: %Simple_turtle_graphics.r3
url: https://rosettacode.org/wiki/Simple_turtle_graphics
needs: blend2d
]
turtle: context [
cmds: [] pen-color: white
scale: 8.0 ;; 100 units → 800 pixels
x: y: 50.0
deg: 0.0
down: false
init: does [
x: y: 50.0 deg: 0.0 down: false
append clear cmds [
fill-all 0.0.0 line-width 4 pen on
]
]
penup: does [ down: false repend cmds ['pen off] ]
pendown: does [ down: true repend cmds ['pen pen-color] ]
forward: func [n /local nx ny] [
nx: x + (n * cosine deg)
ny: y - (n * sine deg)
repend cmds [
'line scale * as-pair x y
scale * as-pair nx ny
]
x: nx
y: ny
]
turn: func [a] [ deg: deg - a ]
home: does [
x: y: 50.0 deg: 0.0 down: false
repend cmds ['pen off]
]
]
with turtle [
draw-house: does [
turn 180
forward 45
turn 180
pendown
;; Square base
forward 30
turn 90
forward 30
turn 90
forward 30
turn 90
forward 30
;; Roof (equilateral triangle top)
turn 30
forward 30
turn 120
forward 30
home
]
draw-bar: function [data [block!]] [
turn 90
forward 30
turn -90
pendown
mx: first find-max data
foreach v data [
h: v / mx * 50
w: 45.0 / length? data
turn -90
forward h
turn 90
forward w
turn 90
forward h
turn -90
]
turn 180
forward 45
home
]
init
draw-house
penup
draw-bar [50 33 200 130 50]
]
browse save %Simple_turtle_graphics.png draw 800x800 turtle/cmds