====== 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 {{lehrkraefte:blc:informatik:glf25:labyrinthe:prod.zip}} herunter und entpacken Sie das Archiv zu ihren Programmierprojekten. Ich habe den Ordner ''prod'' genannt, Sie dürfen aber gerne einen besseren Namen wählen. * Studieren Sie den Code in der Datei ''main.py'' und führen Sie diesen aus. * Vervollständigen Sie den Code in der Datei ''einlesen.py'' und testen Sie das Programm ''main.py''. Zur Kontrolle, geben Sie das eingelesene Labyrinth aus. * Stellen Sie sicher, dass auch das Attribut ''bild'' bei allen Zellen auf 0 oder 1 gesetzt ist (0 schwarz, 1 weiss). * Vervollständigen Sie den Code in der Datei ''startzielsuchen.py'', markieren im ''main.py'' die Start- und Zielzelle und geben Sie das Labyrinth zur Kontrolle aus. * Erstellen Sie dann in analoger Weise folgende Dateien mit entsprechenden Funktionen: * ''wegdurchbildfinden.py'' mit der Funktion ''def wegdurchbildfinden(lab:Laby, start:Zelle) -> list[Zelle]:'', die eine Liste mit Zellen von der Start- bis zur Zielzelle zurückgibt. * ''wegerweitern.py'' mit der Funktion ''def 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.py'' mit der Funktion ''def komplettieren(lab:Laby, weg:list[Zelle]) -> None:'', gibt nichts zurück, aber komplettiert das Labyrinth. * ''svgausgabe.py'' mit der Funktion ''def svgausgabe(lab:Laby, dateipfad:str) -> None:'', die das Labyrinth im SVG-Format in die gegebene Datei speichert.