Ganz nützlich für viele Situationen können die folgenden beiden Methoden sein:
public void turnAround() { kara.turnLeft(); kara.turnLeft(); } public void moveBack() { turnAround(); kara.move(); turnAround(); }
Kara hat für Blätter nur den Sensor kara.onLeaf(), kann also nur feststellen, ob ein Blatt direkt unter ihm liegt. Wir wissen aber, wie man Funktionen programmiert, die ebenso einen booleschen Wert true oder false zurückliefern. Hier ein Beispiel:
public boolean leafFront() { boolean blatt=false; // false, wenn vorne Baum steht if (!kara.treeFront()) { // jetzt muss man nachschauen kara.move(); blatt=kara.onLeaf(); // blatt uebernimmt den booleschen moveBack(); // Funktionswert von onLeaf() } return blatt; }
Nun kann man in einem Programm (nach der Ergänzung von leafLeft()) auch Abfragen wie
if(leafFront() || leafLeft())
machen. Das erfordert zwar etwas mehr sportliche Bewegung für den Marienkäfer, aber das tut in Corona-Zeiten jedem ganz gut.
Kara steht auf dem ersten Blatt einer Blätterspur, die durch einen Wald führt und an einem Pilz endet (kara.mushroomFront()=true). Er soll rekursiv die Spur entlanglaufen bis zum Pilz, sich umdrehen und den gleichen Weg (den er sich rekursiv "gemerkt hat) zurückgehen. Die nötigen Methoden zum Nachsehen, wo der Weg jeweils weitergeht, sind noch zu ergänzen (siehe oben). Das Programm kann wieder folgendermaßen strukturiert sein:
import javakara.JavaKaraProgram; public class PacmanDurchWald extends JavaKaraProgram { public void einenSchrittWeiter() { if () { } else if () { } else if () { } else { } } // Ende von einenSchrittWeiter public void myProgram() { einenSchrittWeiter(); } } // Ende der Klasse PacmanDurchWald
Gib das komplette Programm hier ein.