0%
In Bearbeitung

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.