lehrkraefte:blc:informatik:glf24:laby:wegfindentodo

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf24:laby:wegfindentodo [2025/05/14 09:39] – [Aufgabe 9] Ivo Blöchligerlehrkraefte:blc:informatik:glf24:laby:wegfindentodo [2025/06/19 07:48] (current) Ivo Blöchliger
Line 35: Line 35:
 </code> </code>
   * Damit kann die Bildinformation von jeder Zelle angefragt werden.   * Damit kann die Bildinformation von jeder Zelle angefragt werden.
-  * Fügen Sie folgende Funktion (nach den import-Zeilen) ein, um eine Startzelle mit Bildwert 1 (schwarz) zu finden:+  * Importieren Sie zusätzliche die Klasse ''Zelle'' indem Sie folgende Zeile am Anfang vom Programm hinzufügen: 
 +<code python> 
 +from zelle import Zelle 
 +</code> 
 +  * Fügen Sie folgende Funktion (nach den «''from ... import ...''»-Zeilen) ein, um eine Startzelle mit Bildwert 1 (schwarz) zu finden:
 <code python> <code python>
 def findStart(l:Laby)->Zelle: def findStart(l:Laby)->Zelle:
Line 78: Line 82:
 Bis jetzt haben wir Labyrinthe erzeugt, aber den Weg zwischen zwei Punkten nicht gespeichert, bzw. nicht bestimmt. Bis jetzt haben wir Labyrinthe erzeugt, aber den Weg zwischen zwei Punkten nicht gespeichert, bzw. nicht bestimmt.
  
-Eine einfache Möglichkeit besteht darinauf jeder Zelle zu markierenwoher man gekommen ist. Dann kann man mit diesen Markierungen von der Zielzelle zurück zur Startzelle finden.+Eine einfache Möglichkeit dafür ist folgende: 
 +  * immerwenn ein neuer Nachbar besucht wirdwird der Nachbar mit der Richtung markiert, in der man zurück kommt. 
 +  * Dann kann man mit diesen Markierungen von der Zielzelle (von jeder Zelle!) zurück zur Startzelle finden.
  
 +Damit ist es Zeit, das Hauptprogramm ''main.py'' zu beginnen. Von dort werden alle Funktionen aufgerufen.
  
 +  * Speichern Sie die Datei {{lehrkraefte:blc:informatik:glf24:laby:main.py}} im Verzeichnis ''labyrinth''.
 +  * Studieren und kommentieren Sie den Code in der Datei ''main.py''. Ausführbar ist der Code aber noch nicht:
 +  * Speichern Sie die Datei {{lehrkraefte:blc:informatik:glf24:laby:wegaufbild.py}} ebenfalls im Verzeichnis ''labyrinth''.
 +  * Studieren Sie den Code der Datei ''wegaufbild.py''.
 +    * Der erste Teil der Funktion ''wegaufbild'' findet alle Wege.
 +    * Der zweite Teil bestimmt den Weg vom Ziel zum Start und macht eine Liste aus allen Zellen (in der korrekten Reihenfolge).
 +  * Führen Sie jetzt ''main.py'' aus. Eventuell müssen/können Sie den Namen der .pnm-Datei anpassen.
 +  * Der Weg soll jetzt noch markiert werden und alle Wände, ausser jenen für den Weg, geschlossen werden.
 +  * Fügen Sie dazu folgende Funktion nach den imports in der Datei ''wegaufbild.py'' hinzu:
 +<code python>
 +def labyrinthNurMitWeg(laby:Laby, weg:list[Zelle]) -> None:
 +    # Alle Markierungen löschen
 +    laby.clearMarks()
 +    # Alle Wände schliessen
 +    laby.closeAll()
 +    # Weg-Zellen mit # markieren
 +    for zelle in weg:
 +        zelle.mark = "#"
 +    # Wände auf dem weg öffnen
 +    for i in range(len(weg)-1):      # Vom ersten bis vorletztem Weg-Element
 +        d = weg[i].dirTo(weg[i+1])   # Richtung des Wegs an Stelle i
 +        weg[i].zustand(d, True)      # Wand in diese Richtung öffnen
 +</code>
 +  * In der Datei ''wegaufbild.py'', zu unterst, untermittelbar vor dem ''return'', rufen Sie die Funktion wie folgt auf:
 +<code python>
 +    labyrinthNurMitWeg(laby, weg)
 +</code>
 +  * In der Datei ''main.py'', fügen Sie als letzte Zeile ''print(laby)'' hinzu, um das Labyrinth auszugeben.
 +  * Testen Sie das Programm ''main.py''.
 +  * Als letztes sollen noch die Wände von Start- und Zielzelle nach aussen geöffnet werden. Fügen Sie die beiden folgenden Funktionen in der Datei ''wegaufbild.py'' nach den imports hinzu:
 +<code python>
 +def randWandAuf(zelle:Zelle) -> None:
 +    if zelle.y==0:
 +        zelle.zustand(3, True)
 +    elif zelle.y==zelle.laby.hoehe-1:
 +        zelle.zustand(1, True)
 +    elif zelle.x==0:
 +        zelle.zustand(2, True)
 +    elif zelle.x==zelle.lab.breite-1:
 +        zelle.zustand(0, True)
 +
 +def raenderOeffnen(paar: list[Zelle]) -> None:
 +    randWandAuf(paar[0])
 +    randWandAuf(paar[1])
 +    paar[0].mark="S"
 +    paar[1].mark="Z"
 +</code>
 +  * Rufen Sie die Funktion in der Datei ''wegaufbild.py'' zuunterst, unmittelbar vor dem ''return'' auf:
 +<code python>
 +    raenderOeffnen(paar)
 +</code>
 +  * Testen Sie das Programm ''main.py''.
  • lehrkraefte/blc/informatik/glf24/laby/wegfindentodo.1747215587.txt.gz
  • Last modified: 2025/05/14 09:39
  • by Ivo Blöchliger