123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/usr/bin/ruby
- include('Turtle.sf')
- class LSystem(
- angle = 90,
- scale = 1,
- xoff = 0,
- yoff = 0,
- len = 5,
- color = 'black',
- width = 500,
- height = 500,
- turn = 0,
- ) {
- method execute(string, repetitions, filename, rules) {
- var theta = angle.deg2rad
- var turtle = Turtle(
- x: width,
- y: height,
- angle: turn,
- scale: scale,
- color: color,
- xoff: xoff,
- yoff: yoff,
- )
- var stack = []
- var table = Hash(
- '+' => { turtle.turn(theta) },
- '-' => { turtle.turn(-theta) },
- ':' => { turtle.mirror },
- '[' => { stack.push(turtle.state) },
- ']' => { turtle.setstate(stack.pop) },
- )
- repetitions.times {
- string.gsub!(/(.)/, {|c| rules{c} \\ c })
- }
- string.each_char { |c|
- if (table.contains(c)) {
- table{c}.run
- }
- elsif (c.is_uppercase) {
- turtle.forward(len)
- }
- }
- turtle.save_as(filename)
- }
- }
|