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
Aus: ST-Computer 03 / 1988, Seite 76

Links

Copyright-Bestimmungen: siehe Über diese Seite