Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf24:laby:wegfindentodo [2025/05/13 19:23] – [Aufgabe 8] Ivo Blöchliger | lehrkraefte:blc:informatik:glf24:laby:wegfindentodo [2025/06/19 07:48] (current) – Ivo Blöchliger | ||
|---|---|---|---|
| Line 18: | Line 18: | ||
| * Führen Sie das Programm aus. | * Führen Sie das Programm aus. | ||
| * Studieren Sie das Programm und versuchen Sie, seine Funktionsweise zu verstehen. | * Studieren Sie das Programm und versuchen Sie, seine Funktionsweise zu verstehen. | ||
| - | * Warum und wie findet der mit '#' | ||
| * Führen Sie das Programm in einem 2x2-Labyrinth von Hand aus. Führen Sie die todo-Liste nach. | * Führen Sie das Programm in einem 2x2-Labyrinth von Hand aus. Führen Sie die todo-Liste nach. | ||
| Line 36: | Line 35: | ||
| </ | </ | ||
| * 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: | + | |
| + | <code python> | ||
| + | from zelle import Zelle | ||
| + | </ | ||
| + | | ||
| <code python> | <code python> | ||
| def findStart(l: | def findStart(l: | ||
| Line 48: | Line 51: | ||
| start = findStart(l) | start = findStart(l) | ||
| </ | </ | ||
| - | * Kommentieren Sie die '' | + | * Kommentieren Sie die '' |
| * In der while-Schleife, | * In der while-Schleife, | ||
| * Testen Sie das Programm. | * Testen Sie das Programm. | ||
| Line 63: | Line 66: | ||
| </ | </ | ||
| - | * Immer noch im Verzeichnis '' | + | * Immer noch im Verzeichnis '' |
| - | * | + | * Studieren Sie die Funktion in der Datei '' |
| + | * Zurück in der Datei '' | ||
| + | <code python> | ||
| + | from startzielpaar import startzielpaar | ||
| + | </ | ||
| + | * Ganz am Schluss, unmittelbar vor der Ausgabe, markieren Sie das Start/ | ||
| + | <code python> | ||
| + | p = startzielpaar(l) | ||
| + | p[0].mark = " | ||
| + | p[1].mark = " | ||
| + | </ | ||
| + | ===== Aufgabe 10 ===== | ||
| + | Bis jetzt haben wir Labyrinthe erzeugt, aber den Weg zwischen zwei Punkten nicht gespeichert, | ||
| + | |||
| + | Eine einfache Möglichkeit dafür ist folgende: | ||
| + | * immer, wenn ein neuer Nachbar besucht wird, wird 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 '' | ||
| + | |||
| + | * Speichern Sie die Datei {{lehrkraefte: | ||
| + | * Studieren und kommentieren Sie den Code in der Datei '' | ||
| + | * Speichern Sie die Datei {{lehrkraefte: | ||
| + | * Studieren Sie den Code der Datei '' | ||
| + | * Der erste Teil der Funktion '' | ||
| + | * 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 '' | ||
| + | * 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 '' | ||
| + | <code python> | ||
| + | def labyrinthNurMitWeg(laby: | ||
| + | # 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): | ||
| + | d = weg[i].dirTo(weg[i+1]) | ||
| + | weg[i].zustand(d, | ||
| + | </ | ||
| + | * In der Datei '' | ||
| + | <code python> | ||
| + | labyrinthNurMitWeg(laby, | ||
| + | </ | ||
| + | * In der Datei '' | ||
| + | * Testen Sie das Programm '' | ||
| + | * 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 '' | ||
| + | <code python> | ||
| + | def randWandAuf(zelle: | ||
| + | if zelle.y==0: | ||
| + | zelle.zustand(3, | ||
| + | elif zelle.y==zelle.laby.hoehe-1: | ||
| + | zelle.zustand(1, | ||
| + | elif zelle.x==0: | ||
| + | zelle.zustand(2, | ||
| + | elif zelle.x==zelle.lab.breite-1: | ||
| + | zelle.zustand(0, | ||
| + | |||
| + | def raenderOeffnen(paar: | ||
| + | randWandAuf(paar[0]) | ||
| + | randWandAuf(paar[1]) | ||
| + | paar[0].mark=" | ||
| + | paar[1].mark=" | ||
| + | </ | ||
| + | * Rufen Sie die Funktion in der Datei '' | ||
| + | <code python> | ||
| + | raenderOeffnen(paar) | ||
| + | </ | ||
| + | * Testen Sie das Programm '' | ||