#!/usr/bin/ruby require('Image::Magick') class Turtle( x = 500, y = 500, angle = 0, scale = 1, mirror = 1, xoff = 0, yoff = 0, color = 'black', ) { has im = %O<Image::Magick>.new(size => "#{x}x#{y}") method init { angle.deg2rad! im.ReadImage('canvas:white') } method forward(r) { var (newx, newy) = (x + r*sin(angle), y + r*-cos(angle)) im.Draw( primitive => 'line', points => join(' ', round(x * scale + xoff), round(y * scale + yoff), round(newx * scale + xoff), round(newy * scale + yoff), ), stroke => color, strokewidth => 1, ) (x, y) = (newx, newy) } method save_as(filename) { im.Write(filename) } method turn(theta) { angle += theta*mirror } method state { [x, y, angle, mirror] } method setstate(state) { (x, y, angle, mirror) = state... } method mirror { mirror.neg! } }