Tunnelerkennung – Lösung Teil 1
Ich zeige dir den ersten Teil der Lösung. Denn bevor man zum eigentlichen Tunnel kommt, hat man noch ein kleines Problem.
Meine Roboteranleitung:
Ok, den Tunnel haben wir gefunden. Also brauchen wir jetzt die Funktion, um durch den Tunnel zu fahren und, um die Fahne zu finden. Ich bin gespannt auf deine Lösung.
[lp_spoiler title="Komplettlösung anzeigen" class="da"]
//Roboterverhalten Hauptfunktion
function robotMain()
{
findeTunnel();
gehDurchTunnel();
}
//funktion um den tunnel eingang zu finden...
function findeTunnel()
{
while(vorneFrei() && !geraderTunnel())
{
geradeAus();
guckRechtsNachTunnel();
if (!vorneFrei())
{
dreheLinks();
}
}
}
//wenn rechts etwas frei ist, schau nach ob da ein tunnel eingang ist.
function guckRechtsNachTunnel()
{
if (rechtsFrei())
{
dreheRechts();
geradeAus();
if (!geraderTunnel()) {
umdrehen();
dreheRechts();
}
else {
//zeigText("Tunnel gefunden!!!");
}
}
}
//nur wenn in tunnel, gehe geradeaus...
function gehDurchTunnel()
{
while (inTunnel() && !inSackgasse())
{
if (geraderTunnel())
{
geradeAus();
}
else if (rechtsTunnel())
{
dreheRechts();
geradeAus();
}
else if (linksTunnel())
{
dreheLinks();
geradeAus();
}
}
}
//gib nur true zurück, wenn links und rechts wände sind, ergo wir in einem tunnel sind.
function inTunnel()
{
return (geraderTunnel() || rechtsTunnel() || linksTunnel());
}
function geraderTunnel()
{
return (!linksFrei() && !rechtsFrei());
}
function rechtsTunnel()
{
return (!vorneFrei() && !linksFrei() && rechtsFrei());
}
function linksTunnel()
{
return (!vorneFrei() && linksFrei() && !rechtsFrei());
}
function dreheRechts()
{
dreheLinks();
dreheLinks();
dreheLinks();
}
function umdrehen()
{
dreheLinks();
dreheLinks();
}
//gib nur true zurück, wenn roboter in einer Sackgasse sitzt.
function inSackgasse()
{
return (!linksFrei() && !rechtsFrei() && !vorneFrei());
}
Alterantiv: Hier kannst du den fertigen Quellcode herunterladen.
[/lp_spoiler]