This is an old revision of the document!
Modularisierung
Einen Programmcode zu modularisieren bedeutet, diesen in kleine Einheiten aufzuteilen, die jeweils eine relativ einfach zu beschreibende Funktion erfüllen. Mit Hilfe dieser Einheiten können dann komplexere Funktionen «relativ einfach» beschrieben werden.
Das ganze Programm soll am Schluss wie folgt aussehen:
- Mit Bild markiertes Labyrinth aus einer Bilddatei erstellen.
- Start- und Zielpunkt festlegen.
- Einen Weg durch schwarz markierte Bereiche vom Start zum Ziel finden (durch Mauern hindurch, ohne diese zu öffnen).
- Weg im schwarzen Bereich so weit wie möglich erweitern und entsprechende Mauern öffnen.
- Restliches Labyrinth mit zufälligen Sackgassen füllen.
- Labyrinth ausgeben (als Text oder noch schöner als SVG).
Der Code für jeden dieser Punkte soll in eine eigene Funktion kommen (die evtl. ihrerseits in kleinere Funktionen aufgeteilt wird.
Damit der Code übersichtlich bleibt, wird für jeden der obigen Punkte eine eigene Datei angelegt. Die gewünschte Funktion kann dann mit import eingebunden werden.
- Laden Sie die Datei prod.zip herunter und entpacken Sie das Archiv zu ihren Programmierprojekten. Ich habe den Ordner
prodgenannt, Sie dürfen aber gerne einen besseren Namen wählen. - Studieren Sie den Code in der Datei
main.pyund führen Sie diesen aus. - Vervollständigen Sie den Code in der Datei
einlesen.pyund testen Sie das Programmmain.py. Zur Kontrolle, geben Sie das eingelesene Labyrinth aus. - Vervollständigen Sie den Code in der Datei
startzielsuchen.py, markieren immain.pydie Start- und Zielzelle und geben Sie das Labyrinth zur Kontrolle aus. - Erstellen Sie dann in analoger Weise folgende Dateien mit entsprechenden Funktionen:
wegdurchbildfinden.pymit der Funktiondef wegdurchbildfinden(lab:Laby, start:Zelle) → list[Zelle]:, die eine Liste mit Zellen von der Start- bis zur Zielzelle zurückgibt.wegerweitern.pymit der Funktiondef wegerweitern(lab:Laby, weg:list[Zelle]) → list[Zelle]:, die eine Liste mit Zellen vom erweiterten Weg zurückgibt und entsprechende Mauern im Labyrinth öffnet.komplettieren.pymit der Funktiondef komplettieren(lab:Laby, weg:list[Zelle]) → None:, gibt nichts zurück, aber komplettiert das Labyrinth.svgausgabe.pymit der Funktiondef svgausgabe(lab:Laby, dateipfad:str) → None:, die das Labyrinth im SVG-Format in die gegebene Datei speichert.