0%
In Bearbeitung

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]