Neko im Labyrinth [Java] (Algorithmen)
Helfen Sie Neko den Weg durch das Labyrinth zu finden.
Öffnen Sie dazu die Datei Labyrinth.jar (Web-Code) mit Ihrer Java-Entwicklungsumgebung.
Sie finden dann die Datei NekoRennt.java im Paket (=Verzeichnis) /aufgabe/. Öffnen Sie diese. Unten im Quelltext finden Sie die leere Funktion
void rennen() {
}
die Ihren Programmcode enthalten soll, der Neko den Weg durch das Labyrinth weist.
Sie können Neko mit verschiedenen Methoden des Objekts l der Klasse Labyrinth steuern. Die Beschreibung dieser Methoden finden Sie, wenn Sie den Ordner /labyrinth/ und darin die Datei index.html im Unterordner /doc/ öffnen. Um Neko um 90° nach rechts zu drehen, geben Sie
l.nekoTurnRight();
ein.
Helfen Sie nun Neko durch das Labyrinth,
- nur mit relativen Drehungen, also ohne die Methoden absDirectionIsFree(int dir) und nekoMoveAbs(int direction) zu verwenden und
- nur mit absoluten Drehungen, also ohne die Methoden relDirectionIsFree (int dir), nekoForward(), nekoTurnLeft() und nekoTurnRight() zu verwenden.
Dateien:
0 Kommentare
1 Lösung(en)
// Teil 1
package aufgabe;
import labyrinth.Labyrinth;
import labyrinth.Loesung;
class NekoRenntLoesungRel implements Loesung {
static private final int breite = 1000, hoehe = 900, anzSpalten = 20;
Labyrinth l = new Labyrinth(breite, hoehe, anzSpalten, this);
public NekoRenntLoesungRel() {
l.run();
}
public void rennen() {
while(!(l.isExit() || l.isError() || l.isStopped())) {
// wenn es keine rechte Wand gibt
if(l.relDirectionIsFree(0)) {
// um 90 Grad nach rechts drehen und dann vorwaerts laufen
l.nekoTurnRight();
l.nekoForward();
} else {
// solange Neko nicht vorwaerts laufen kann
while(!l.relDirectionIsFree(1))
// um 90 Grad nach links drehen
l.nekoTurnLeft();
// und dann vorwaerts laufen
l.nekoForward();
}
}
}
public static void main(String[] args) {
new NekoRenntLoesungRel();
}
}
// Teil 2
package aufgabe;
import labyrinth.Labyrinth;
import labyrinth.Loesung;
class NekoRenntLoesungAbs implements Loesung {
static private final int breite = 1000, hoehe = 900, anzSpalten = 20;
Labyrinth l = new Labyrinth(breite, hoehe, anzSpalten, this);
int orientation = 0;
public NekoRenntLoesungAbs() {
l.run();
}
public void rennen() {
while(!(l.isExit() || l.isError() || l.isStopped())) {
// wenn es keine rechte Wand gibt
if(l.absDirectionIsFree((orientation + 3) % 4)) {
// um 90 Grad nach rechts drehen und dann vorwaerts laufen
orientation = (orientation + 3) % 4;
l.nekoMoveAbs(orientation);
} else {
// solange Neko nicht vorwaerts laufen kann
while(!l.absDirectionIsFree(orientation))
// um 90 Grad nach links drehen
orientation = (orientation + 1) % 4;
// und dann vorwaerts laufen
l.nekoMoveAbs(orientation);
}
}
if(l.isExit() || l.isError())
orientation = 0;
}
public static void main(String[] args) {
new NekoRenntLoesungAbs();
}
}
Verifikation/Checksumme:
Wenn die Lösung stimmt und Neko das Ende des Labyrinths erreicht, brüllt sie dort wie ein Löwe. Wenn Neko nicht dorthin gehen kann, wo es das Programm ihr aufträgt oder wenn Neko endlos im Kreis läuft, bleibt sie sitzen und miaut.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | gkzx-fvi8 |
Autor: | Michael Weiss () |