Turtle-Grafiken: Die Schildkröte geht fremd

Turtle-Graphik ist nicht nur LOGO Vorbehalten. Auch in anderen Hochsprachen wie Pascal lassen sich geeignete Routinen aufbauen.

Die hier vorgestellte Include-Datei läßt sich in jedes Programm einbinden. Allerdings sind die Routinen an GEM gebunden. TURTLE.INC stellt die vier Bewegungskommandos vorwaerts, rueckwaerts, rechts und links zur Verfügung. Zusätzlich sind zwei Routinen vorhanden, die die Turtle an einer bestimmte Stelle auf dem Bildschirm mit einer bestimmten Ausrichtung plaziert.

ST Pascal Plus 2.0 akzeptiert Konstanten-, Typen-, Variablen- und andere Mehrfachdeklarationen. Daher ist es möglich, alle notwendigen Routinen in einer Include-Datei zusammenzufassen. Sie darf aber erst nach Einfügen der GEM-Dateien eingefügt werden, da die Turtle-Datei Routinen des GEM benutzt.

Eine kurze Erläuterung. Mit der Routine init_turtle legt man einen beliebigen Startpunkt auf dem Bildschirm fest. Zusätzlich wird eine Grundausrichtung vorgegeben. turtle_home hat eine geringere Funktion. Sie entspricht init_turtle, setzt aber die Turtle in die Mitte mit Ausrichtung nach oben, vorwaerts bewegt die Turtle pixelweise vorwärts, das heißt in die durch den Winkel festgelegte Richtung, rueckwaerts verfährt analog, jedoch in die entgegengesetzte Richtung. Mit rechts und links kann man die Turtle-Richtung ändern. Hierbei ist immer ein Winkel von der Grundrichtung aus gemeint. Beispiel: Die Turtle bewegt sich in Richtung 90 Grad. Nun soll sie sich mit rechts(lO) drehen. Die neue Richtung ist dann 80 Grad. Bevor man eine der vier Bewegungsroutinen aufruft, sollte man die Turtle auf den Bildschirm mit init_turtle oder turtle_home setzen. Ansonsten gibt's nichts Besonderes zu beachten. Das kleine Beispielprogramm veranschaulicht Nutzungsmöglichkeiten der Turtle-Routinen.

Das Ergebnis des Demonstrationsprogrammms

TURTLE.INC

(* Include-Datei für Turtle-Routinen *)
(* Entwickelt mit ST Pascal Plus 2.0 *)
(* Dietmar Rabich, Dülmen   *)

type turtle_daten = record 
        pos_x,pos_y,winkel : short_integer; 
        end;

var turtle : turtle_daten; {* globale Variablenvereinbarung *)

(* Turtle vorwärts bewegen *)

procedure vorwaerts (n:short__integer) ;

(* Umrechnung in Bogenma_ *) 
    function bogen{x:real):real;
        const pi=3.14159265;
    begin 
        bogen:=x*pi/180;
    end;

    begin 
        with turtle do 
        begin
            pos_x:=pos_x+short_round(cos(bogen(winkel))*n);
            pos_y:=pos_y-short_round(sin(bogen(winkel))*n);
            line_to(pos_x,pos_y);
        end;
    end;

    (* Turtle rückwärts bewegen *) 
    procedure rueckwaerts(n:short_integer);

    begin
        vorwaerts(-n);
    end;

    (* Turtle rechts drehen *) 
    procedure rechts(w:short_integer);

    begin 
        with turtle do 
        begin
            winkel:=winkel-w; 
            while winkela<0 do 
                winkel:=winkel+360;
        end;
    end;

    (* Turtle links drehen *) 
    procedure links (w:short_integer);

    begin
        with turtle do 
        begin
            winkel:=winkel+w; 
            while winkel>360 do 
                winkel:=winkel-360;
        end;
    end;

    (* Turtle Position und Winkel zuordnen *) 
    procedure init_turtle (x, y, w: short_integer) ;

    begin 
        with turtle do
        begin
            pos_x:=x; 
            pos_y:=y;
            winkel:=w;
        end;
        rechts(0);
        links(0);
        move_to(x, y);
    end;

    (* Turtle in die Mitte mit Ausrichtung nach oben *) 
    procedure turtle_home;

    begin
        init_turtle(320,200,90);
    end;

(* Demonstrationsprogramm für die Include-Datei TURTLE. INC *) (* Entwickelt mit ST Pascal Plus 2.0. Dietmar Rabich *) program demo__turtle; const { $I \INCLUDEXGEMCONST.INC } type {$I \INCLUDE\GEMTYPE.INC } {$I \INCLUDE\GEMSUBS.INC } {$I \INCLUDE\TURTLE. INC } (* <- Hier wird die Turtle-Datei eingelesen *) procedure quadrat(laenge:short_integer;dreh:boolean); var i : short_integer; begin if laenge>5 then for i:=1 to 4 do begin vorwaerts(laenge); if dreh then links(90) else rechts(90); quadrat(laenge div 2,not(dreh)); end; end; begin if init_gem>=0 then begin init_mouse; hide_mouse; clear_sereen; init_turtle(384,264, 90); quadrat(12 8,true); show_mouse; exit_gem; readln; end; end.


Dietmar Rabich



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]