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.
(* 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.