Programming Republic of Perl LogoPerl Doolhoven

Een voorbeeld van programmeren in Perl: soms wil je, als ontspanning of als deel van een programma, een doolhof hebben. Maar hoe maak (fabriceer, niet: los op) je een doolhof? Hier een programma, in twee versies:

  • Tekstueel doolhofsimple_maze.pl, een eenvoudige versie die een ASCII doolhof maakt van 30 x 10 vakjes. Heel geschikt om het algoritme te beklijken. Op het voorbeeld hiernaast heb ik dit even aangepast tot 10 x 8, om niet de hele pagina in beslag te nemen.
  • Grafisch doolhofdoolhof.pl, een uitgebreidere versie met allerlei opties, onder andere om ze als plaatjes (in plaats van tekst) op te slaan. Hier is de gekozen afmeting 40 bij 20, even 90o gedraaid ivm beschikbare ruimte. Maar het kan ook bijvoorbeeld 1000 bij 1000 aan (al moet je dan wel een A3-formaat printer en een goed vergrootglas hebben......). Je ziet hier ook al een van de extra's: de grote kamer in het midden. Kan je met opties kiezen (perl -w doolhof.pl -? voor een lijst met opties).

Hoe werkt het?

Simpel doolhofHet basis-idee is vrij simpel. Stel je een lege kamer voor, met een deur aan iedere kant. Dit is het meest simpele doolhof. Maar nu: als je hier een muur in plaatst die aan een uiteinde aan een bestaande muur aansluit, maar die aan de andere uiteinde vrij staat, dan is dit nog steeds een doolhof met een route van begin naar einde. Zie het plaatje hiernaast.

Al iets moeilijkerEn hoeveel muren je op deze manier toevoegd, er blijft altijd een, maar ook precies een, route beschikbaar, die alleen steeds ingewikkelder wordt. Op dit principe werkt ook het programma. Eerst wordt een lege rechthoek gemaakt, en vervolgens worden hier muren in geplaatst, altijd beginnend op een bestaande muur.

Wat heb je hier verder voor nodig? Eigenlijk alleen Perl, voor de tekst-versie. Maar als je de extra opties wilt gebruiken, zoals de graphics output, is ook de GD library nodig. Op de PC is dit te downloaden van de 'ActiveState' site. Voor Linux moet je even op CPAN kijken. That's all.