Karol im Labyrinth
Karol soll so programmiert werden, dass er selbständig den Weg durch ein beliebiges Labyrinth findet.
Der Ausgang soll dabei durch eine Marke gekennzeichnet sein. Erarbeiten Sie mit den folgenden Arbeitsaufträgen
Schritt für Schritt eine Lösung und ergänzen Sie damit die Programmvorlage.
Versuchen Sie sich zuerst allgemein eine möglichst einfache Strategie zu überlegen, mit der man jedes
ebene Labyrinth überwinden kann. Vergleichen Sie dann Ihre Idee mit dem Lösungsvorschlag.
Lösung
|
Erstellen Sie für den zentralen Teil der Lösungsidee aus Arbeitsauftrag 1 ein Struktogramm.
Verwenden Sie dabei soweit sinnvoll keine Java-Syntax, sondern weitgehend eigene Worte (vgl. Java-Überblick).
Lösung
|
Ein Problem bei dieser Vorgehensweise ist, dass Karol keine vordefinierten Methoden hat,
die es ihm erlauben festzustellen, was sich rechts bzw. links von ihm befindet.
Deshalb müssen zuerst entsprechende, neue "Sensorenmethoden" geschrieben werden.
Schreiben Sie eine Methode istRechtsWand() bzw. istLinksWand() ,
die durch Rückgabe eines boolean Wertes angibt, ob sich rechts bzw. links von der aktuellen Position Karols eine Wand befindet.
Tipp
Lösung
|
Verwenden Sie im Folgenden die Lösungsidee wie im Arbeitsauftrag 2 als Struktogramm umgesetzt.
Setzen Sie nun die Strategie (Variante rechts und Variante links) aus Arbeitsauftrag 1 mit Hilfe
der Methoden aus Arbeitsauftrag 3 in eine Methode durchwandereLabyrinth() um.
Das Labyrinth ist überwunden, wenn Karol die Marke am Ausgang erreicht.
Sie können die Methode testen: Verwenden bei
der Erzeugung von welt den Konstruktor ohne Parameter,
dann erscheint ein Dateiauswahlfenster (Vorsicht: kann hinter anderen
Fenstern verborgen sein!), in dem Sie die Welt-Datei
labyrinth.kdw, die sich im Ordner BlueJ-Projekte befindet,
angeben können.
Lösung
|
|