Programming Republic of Perl Logo

Turtle graphics in Perl/Tk

Gedetaillieerde uitleg van de werking van het Perl/Tk programma (heel bruikbaar als frame voor je eigen Perl/Tk applicaties) op de Turtle Graphics uitleg pagina.

Een voorbeeld van uitbreidingen op Perl: het gebruik van de Tk user interface/grafische libray. Hiermee is het heel makkelijk om een kleine maar gebruiksvriendelijke 'applicatie' te maken, zoals de onderstaande 'Turtle graphics' (schilpad-tekenen). Turtle GraphicsLeuk om je kinderen te leren programmeren. Hoe teken je bijvoorbeeld een vierkant? Met de denkbeeldige schildpad ('turtle') een fluitje van een cent, kijk naar in de figuur hiernaast. Eenvoudig, nietwaar? Vandaar dat dit oorspronkelijk ook bedacht is om te leren programmeren, en met name wordt gebruikt bij de programmeertaal SmallTalk (al die ik het hier dus met Perl).

Toch kan je op deze manier heel ingewikkelde patronen maken, denk maar aan bijvoorbeeld de boom van Pythagoras, zoals hieronder weergegeven.

Maar waar het mij vooral om gaat is de kracht van Tk in combinatie met Perl. Het ziet er uit als een behoorlijk complex programma, maar voor die knoppen etc bied Tk heel wat hulp, eigenlijk is het een fluitje van een cent. Help-ballonnetjes, Alt-x shortcuts, files laden en opslaan, het is allemaal zo geregeld.

Bekijk het eens, ik heb het programma samen met wat voorbeeld-turtle-routines in een zip gepakt: turtle.zip, inclusief voorbeelden slechts 7 Kbyte! De uitleg van dit programma staat op deze paginas. Je hebt uiteraard wel een Perl met geinstalleerde Tk uitbreidingslibrary nodig (maar da's eenvoudig te vinden, op ActiveState voor Windows gebruikers, of anders op CPAN: Comprehensive Perl Archive Network).

Boom van PhytagorasDe schildpad kent de volgende commando's (kijk in de voorbeelden voor het gebruik er van):

  • Beweging (met optioneel de afstand/draaihoek): vooruit, links, rechts, spring (vooruit zonder lijn tekenen), huis (ga naar startpunt)
  • Kleur: wit, zwart, grijs, rood, groen, geel, blauw
  • Test: als (test) { opdrachten } anders { opdrachten }
  • Herhaling: voor (start .. end) { opdrachten }
  • Overigen: wis (wis het tekenveld)
  • Daarnaast zijn alle Perl commando's gewoon bruikbaar.

De boven weergegeven boom van Phytagoras ziet er dan als turtle-programma als volgt uit (probeer eens te volgen wat er gebeurt):

# boom van pythagoras (voorbeeld van recursie)

$lengte = 80; # lengte van eerste lijn

sub pythagoras
{ vooruit $lengte; # eerst recht vooruit
als ($arg0 <= 1) # dan als we niet meer detail willen
{ links; vooruit $lengte; links } # keren we om;
anders # maar anders gaan we dieper:
{ $lengte = $lengte / sqrt(2); # eerst de lijn wat kleiner maken
rechts 45; pytha($arg0-1);
rechts; pytha($arg0-1); rechts 45;
$lengte = $lengte * sqrt(2); # en hier de lijn weer als eerst
}
vooruit $lengte; # en afsluiten naar onderen
}

huis; spring -200; # mooi beginplekje
pythagoras 7; # 7 stappen diep

# einde van dit voorbeeld

Bekijk eens de voorbeelden, of probeer zelf iets leuks te tekenen! Of kijk hoe dit programma in Perl is gemaakt op de Turtle Graphics uitleg pagina's.