Labyrinth-Challenge
Eine neue Aufgabe wartet auf dich. Hier musst du etwas aufpassen und bereits existierenden Code lesen:
Aufgaben und Lösungen:
[lp_spoiler title="Beispielcode für die Aufgabe zum herunterladen" class="da"]
//Roboterverhalten Hauptfunktion
function robotMain()
{
//durch Tunnel gehen
gehDurchTunnel();
}
//nur wenn in tunnel, gehe geradeaus...
function gehDurchTunnel()
{
var zielErreicht = false;
while (inTunnel() && !zielErreicht)
{
durchLabyrinthGehen();
//wenn wir alle aufgaben erledigt haben können wir aufhören zu arbeiten
}
}
function durchLabyrinthGehen()
{
//in einer Sackgasse müssen wir uns umdrehen...
if (inSackgasse())
{
umdrehen();
}
//gucken wie und wo wir stehen, darauf reagieren...
//bei entscheidungen wird grundsätzlich immer links gegangen!!!
if (geraderTunnel())
{
geradeAus();
}
else if (rechtsTunnel())
{
dreheRechts();
geradeAus();
}
else if (linksTunnel())
{
dreheLinks();
geradeAus();
}
else if (linkerZweig() || abZweig())
{ //hier wirds interessant!
dreheLinks();
geradeAus();
} // was ist mit rechts abzweigungen???
}
//gib wahr zurück wenn wir vor einer abzweigung stehen
function steheVorAbzweigung()
{
return (linkerZweig() || rechterZweig() || abZweig());
}
// entscheidung notwendig, wir sind an einer abzweigung
function linkerZweig()
{
return (vorneFrei() && linksFrei() && !rechtsFrei());
}
// entscheidung notwendig, wir sind an einer abzweigung
function rechterZweig()
{
return (vorneFrei() && !linksFrei() && rechtsFrei());
}
//wir können nur nach link oder rechts...
function abZweig()
{
//return (!vorneFrei() && linksFrei() && rechtsFrei());
return false;
}
//gerader Tunnel: Roboter kann nur geradeAus oder zurück...
function geraderTunnel()
{
return (!linksFrei() && !rechtsFrei());
}
//roboter kann nicht geradeAus aber nach RECHTS
function rechtsTunnel()
{
return (!vorneFrei() && !linksFrei() && rechtsFrei());
}
//roboter kann nicht geradeAus aber nach LINKS
function linksTunnel()
{
return (!vorneFrei() && linksFrei() && !rechtsFrei());
}
//gib nur true zurück, wenn links und rechts wände sind, ergo wir in einem tunnel sind.
function inTunnel()
{
//wenn gerader Tunnel oder rechtsKurve oder linksKurve, dann bin ich im Tunnel!!!
return (geraderTunnel() || rechtsTunnel() || linksTunnel() || steheVorAbzweigung());
}
//gib nur true zurück, wenn roboter in einer Sackgasse sitzt.
function inSackgasse()
{
return (!linksFrei() && !rechtsFrei() && !vorneFrei());
}
//3 mal dreheLinks()
function dreheRechts()
{
dreheLinks();
dreheLinks();
dreheLinks();
}
//nur 180 Grad Drehung
function umdrehen()
{
dreheLinks();
dreheLinks();
}
Alternativ: Hier gibt es den Beispielcode für die Aufgabe zum herunterladen.
[/lp_spoiler]
[lp_spoiler title="Gelöste Aufgabe als Code zum herunterladen" class="da"]
//Roboterverhalten Hauptfunktion
function robotMain()
{
geradeAus();
gehDurchTunnel();
}
//nur wenn in tunnel, gehe geradeaus...
function gehDurchTunnel()
{
var zielErreicht = false;
while (inTunnel() && !zielErreicht)
{
ballSammeln();
durchLabyrinthGehen();
//wenn wir alle aufgaben erledigt haben können wir aufhören zu arbeiten
zielErreicht = (flaggeErreicht() && anzahlBaelle() == 3);
}
}
function ballSammeln() {
if (platzBelegt()) {
hebAuf();
}
}
function durchLabyrinthGehen()
{
//in einer Sackgasse müssen wir uns umdrehen...
if (inSackgasse())
{
umdrehen();
}
//gucken wie und wo wir stehen, darauf reagieren...
//bei entscheidungen wird grundsätzlich immer links gegangen!!!
if (geraderTunnel())
{
geradeAus();
}
else if (rechtsTunnel())
{
dreheRechts();
geradeAus();
}
else if (linksTunnel())
{
dreheLinks();
geradeAus();
}
else if (linkerZweig() || abZweig())
{ //hier wirds interessant!
dreheLinks();
geradeAus();
}
else if (rechterZweig())
{ //
geradeAus();
}
}
function steheVorAbzweigung()
{
return (linkerZweig() || rechterZweig() || abZweig());
}
// entscheidung notwendig, wir sind an einer abzweigung
function linkerZweig()
{
return (vorneFrei() && linksFrei() && !rechtsFrei());
}
// entscheidung notwendig, wir sind an einer abzweigung
function rechterZweig()
{
return (vorneFrei() && !linksFrei() && rechtsFrei());
}
function abZweig()
{
return (!vorneFrei() && linksFrei() && rechtsFrei());
}
//gerader Tunnel: Roboter kann nur geradeAus oder zurück...
function geraderTunnel()
{
return (!linksFrei() && !rechtsFrei());
}
//roboter kann nicht geradeAus aber nach RECHTS
function rechtsTunnel()
{
return (!vorneFrei() && !linksFrei() && rechtsFrei());
}
//roboter kann nicht geradeAus aber nach LINKS
function linksTunnel()
{
return (!vorneFrei() && linksFrei() && !rechtsFrei());
}
//gib nur true zurück, wenn links und rechts wände sind, ergo wir in einem tunnel sind.
function inTunnel()
{
//wenn gerader Tunnel oder rechtsKurve oder linksKurve, dann bin ich im Tunnel!!!
return (geraderTunnel() || rechtsTunnel() || linksTunnel() || steheVorAbzweigung());
}
//gib nur true zurück, wenn roboter in einer Sackgasse sitzt.
function inSackgasse()
{
return (!linksFrei() && !rechtsFrei() && !vorneFrei());
}
//3 mal dreheLinks()
function dreheRechts()
{
dreheLinks();
dreheLinks();
dreheLinks();
}
//nur 180 Grad Drehung
function umdrehen()
{
dreheLinks();
dreheLinks();
}
Alternativ: Gelöste Aufgabe als Code zum herunterladen
[/lp_spoiler]
[lp_spoiler title="Quellcode zur zweiten Aufgabe zum Nachlesen" class="da"]
//Roboterverhalten Hauptfunktion
function robotMain()
{
var text = holeText();
var zahl1 = 15;
var zahl2 = 10;
var zahl3 = 5;
var durchlauf = 0;
var letzterName = "Banane";
var text3 = "";
while (durchlauf < zahl3) {
var text2 = nameWechseln(letzterName);
letzterName = text2;
//immer dranhängen
text3 = text3 + text2;
durchlauf++;
}
zeigText(text3);
}
function nameWechseln(letzterName)
{
var name = "Arek";
var name2 = "Roboter";
var name3 = "Banane";
if (letzterName != name)
{
return name;
}
else if (letzterName != name2)
{
return name2;
}
}
Alternativ: Quellcode zur zweiten Aufgabe zum Nachlesen als Download.
[/lp_spoiler]
[lp_spoiler title="Lösung zu Aufgabe 2 anzeigen" class="da"]
ArekRoboterArekRoboterArek
Alternativ: Lösung herunterladen
[/lp_spoiler]
Die Lösungen für Ballsammler und Schnitzeljagd gibt es im Exkurs.