タートルグラフィックス

<?php
    // タートルグラフィック用ライブラリ
    
    // キャンバス(GD)の初期化
    function initCanvas($w, $h){
        global $img, $black;
        global $angle, $nx, $ny, $pen_color;
        // GD イメージの初期化
        $img = imagecreatetruecolor($w, $h);
        $black = rgb(0, 0, 0);
        imagefilledrectangle($img, 0, 0, $w, $h, rgb(255,255,255));
        imagerectangle($img, 0, 0, $w-1, $h-1, $black);
        // タートルのパラメーターを初期化
        $angle = $nx = $ny = 0;
        $pen_color = $black;
        return $img;
    }
    // GD用の色番号の取得
    function rgb($r, $g, $b){
        global $img;
        return imagecolorallocate($img, $r, $g, $b);
    }
    
    // 位置の移動
    function move($x, $y){
        global $nx, $ny;
        $nx = $x; $ny = $y;
    }
    // 進む
    function forward($dist, $isPenDown=true, $color=null){
        global $nx, $ny, $angle;
        global $img, $pen_color;
        $x = cos(deg2rad($angle)) * $dist;
        $y = sin(deg2rad($angle)) * $dist;
        $dx = $nx + $x;
        $dy = $ny + $y;
        if ($isPenDown){
            if ($color == null) $color = $pen_color;
            imageline($img, $nx, $ny, $dx, $dy, $color);
        }
        $nx = $dx;
        $ny = $dy;
    }
    // 向きを変える
    function turn($d, $absolute = FALSE){
        global $angle;
        if ($absolute){
            $angle = $d; return;
        }
        $angle = ($angle + $d) % 360;
        if ($angle < 0) $angle += 360;
    }
    function drawCanvas($w, $h, $file, $callback){
        $img = initCanvas($w, $h);
        $callbck($w, $h);
        imagepng($img, $file);
        echo "<img src='$file'>";
    }
    // ペンの色を変更する
    function setPenColor($color){
        global $pen_color;
        $pen_color = $color;
    }
    function forward_red($dist){
        forward($dist, true, rgb(255,0,0));
    }