AntMe! - Auf der Nahrungssuche: Unterschied zwischen den Versionen

Aus DMUW-Wiki
Wechseln zu: Navigation, Suche
K
(kat AntMe!)
 
(52 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:
  
  
'''Ziel dieses Lernpfads:''' Unsere Ameisen wollen das auch können.
+
<div style="border: 1px solid #dfdfdf; background-color:#dfdfdf; font-size:1px; height:8px; border-bottom:1px solid #dfdfdf;"></div>
 +
<div style="border:1px solid #dfdfdf; background-color:#FEFEFE; align:center; padding:7px;margin-bottom:10px;">
 +
== Ziele des Lernpfads ==
 +
* neue unbekannte Methoden von ''AntMe!'' entdecken und anwenden
 +
* Logikfehler in der Programmierung erkennen und verbessern
 +
* Äpfel und Zucker in den Bau tragen
 +
* Routinen programmieren, welche die Ameisen vor Wanzen schützen
 +
</div>
  
{| class="wikitable"
+
 
|-
+
Deine Ameisen wollen das auch können.<br /><br />
| {{Aufgabe-Mathe|Wie könnten die Methoden <tt>Sieht(Zucker zucker)</tt> und <tt>ZielErreicht(Zucker zucker)</tt> aussehen?}}
+
[[Bild:Krüger_ZuckerHolen.gif|center]]
 +
<br /><br />
 +
{{Aufgabe-Mathe|
 +
 
 +
Wie könnten die Methoden <tt>Sieht(Zucker zucker)</tt> und <tt>ZielErreicht(Zucker zucker)</tt> aussehen?
 +
 
 +
}}
 
<div class="lueckentext-quiz">
 
<div class="lueckentext-quiz">
public override void Sieht(Zucker zucker)
+
<tt>
{
+
:public override void Sieht(Zucker zucker)
 +
:{
 
   
 
   
'''GeheZuZiel'''(zucker);
+
::'''GeheZuZiel'''(zucker);
 
   
 
   
}
+
:}
 
   
 
   
public override void ZielErreicht(Zucker zucker)
+
:public override void ZielErreicht(Zucker zucker)
{
+
:{
 
   
 
   
'''Nimm'''(zucker);
+
::'''Nimm'''(zucker);
 
   
 
   
'''GeheZuBau'''();
+
::'''GeheZuBau'''();
 
   
 
   
}
+
:}
 +
</tt>
 
</div>
 
</div>
|| [[Bild:Krüger_ZuckerHolen.gif|right]]
 
|}
 
  
<quiz>
+
{{Aufgabe-Mathe|
{'''Etwas Unerwartetes tritt auf.'''}
+
  
 +
Implementiere die richtige Lösung in deiner Simulation!<br />
 +
Welches Verhalten zeigen die Ameisen? Löse dafür das folgende Quiz!
 +
 +
}}
 +
 +
== Etwas Unerwartetes tritt auf ==
 +
 +
<quiz display="simple">
 
{ Was passiert mit den Ameisen? }
 
{ Was passiert mit den Ameisen? }
 
- Sie holen sich den Zucker am Zuckerberg und bringen ihn in ihren Bau.
 
- Sie holen sich den Zucker am Zuckerberg und bringen ihn in ihren Bau.
Zeile 47: Zeile 67:
 
- diese Implementierung ist falsch und muss grundsätzlich verändert werden
 
- diese Implementierung ist falsch und muss grundsätzlich verändert werden
  
{ Mit welcher Methode könnte die Ameise den Zucker in ihren Bau bringen? }
+
{ Mit welcher Methode bringen die Ameisen den Zucker in den Bau? }
- <div style="border: 2px solid #dfdfdf;"><tt>public override void Sieht(Zucker zucker)<br />}<br />if (AktuelleEnergie > 5)<br />{<br />GeheZuZiel(zucker);<br />}<br />}</tt></div>
+
- <div style="border: 1px solid blue;border-style:dashed;"><tt>public override void Sieht(Zucker zucker)<br />{<br /><span style="color:white">Lö</span>if (AktuelleEnergie > 5)<br /><span style="color:white">su</span>{<br /><span style="color:white">un 2</span>GeheZuZiel(zucker);<br /><span style="color:white">is</span>}<br />}</tt></div>
- <div style="border: 2px solid #dfdfdf;"><tt>public override void Sieht(Zucker zucker)<br />{<br /> if (AktuelleLast == 0)<br /> {<br />   GeheZuZiel(zucker);<br /> }<br />}</tt></div>
+
+ <div style="border: 1px solid blue;border-style:dashed;"><tt>public override void Sieht(Zucker zucker)<br />{<br /><span style="color:white">t </span>if (AktuelleLast == 0)<br /><span style="color:white">ri</span>{<br /><span style="color:white">chti</span>GeheZuZiel(zucker);<br /><span style="color:white">g.</span>}<br />}</tt></div>
- <div style="border: 2px solid #dfdfdf;"><tt>public override void ZielErreicht(Zucker zucker)<br />{<br />Nimm(zucker);<br />DreheUmWinkel(180);<br />GeheZuBau();<br />}</tt></div>
+
- <div style="border: 1px solid blue;border-style:dashed;"><tt>public override void ZielErreicht(Zucker zucker)<br />{<br /><span style="color:white">öö</span>Nimm(zucker);<br /><span style="color:white">üü</span>DreheUmWinkel(180);<br /><span style="color:white">ää</span>GeheZuBau();<br />}</tt></div>
 
</quiz>
 
</quiz>
  
 +
== Wie der Zucker in den Bau kommt ==
  
{| class="wikitable"
 
|-
 
| {{Aufgabe-Mathe|Implementiere die richtige Lösung in deinen Quellcode, so dass die Ameisen den Zucker in ihren Bau tragen.}}
 
|| Die Ameisen bringen den Zucker in ihren Bau. Vergleiche deine Lösung mit dem Video.{{versteckt|<br />{{#ev:youtube|YO8AwXn9jVQ|600}}}}
 
|}
 
  
 +
{{Aufgabe-Mathe|
  
 +
Implementiere die richtige Lösung in deinen Quellcode, so dass die Ameisen den Zucker in ihren Bau tragen.
  
 +
}}
 +
<br />
 +
Die Ameisen bringen den Zucker in ihren Bau. Vergleiche deine Lösung mit dem Video.{{versteckt|<br />{{#ev:youtube|YO8AwXn9jVQ|600}}}}
  
  
 +
{{Aufgabe-Mathe|
  
<div class="suchsel-quiz">
+
Löse das Schüttel-Rätsel!
Finde die Wörter! ''(Waagrecht (von links nach rechts), senkrecht (von oben nach unten)  
+
 
und schräg (von links unten nach rechts oben oder von oben links nach unten rechts),  
+
}}
gefundene Wörter werden grün markiert)''
+
<div class="schuettel-quiz">
 +
In der Methode <tt>'''Sieht'''(Zucker zucker)</tt> wenden wir einen Trick an. Das Problem ist: die Ameisen bleiben mit ihrem '''Zucker''' am Berg stehen. Sie machen das, weil sie den Zucker aufnehmen und beim Weggehen erneut die '''Methode''' <tt>Sieht(Zucker zucker)</tt> aufgerufen wird. Mit einer <tt>if</tt>-'''Bedingung''' überprüfen wir, ob die Ameise bereits eine '''Last''' trägt.<br />
 +
Den alten Code:
 +
 
 +
public override void Sieht(Zucker zucker)
 +
{
 +
  GeheZuZiel(zucker);
 +
}
 +
 
 +
ändern wir wie folgt ab:
 +
 
 +
public override void Sieht(Zucker zucker)
 +
{
 +
  if (AktuelleLast == 0)
 +
  {
 +
    GeheZuZiel(zucker);
 +
  }
 +
}
 +
 
 +
<tt>AktuelleLast</tt> ist ein '''Attribut''' der Klasse ''Ameise'', welches das getragene Gewicht der Ameise speichert.
 +
</div>
 +
&nbsp;
 +
&nbsp;
 +
 
 +
{{Aufgabe-Mathe |
 +
 
 +
[[Bild:Krüger_Red_Apple.jpg|left|100px]]
 +
 
 +
 
 +
1. Überlege dir mit deinem Nachbarn ein Verfahren, so dass die Ameisen einen Apfel nach Hause tragen.<br />
 +
2. Nutze die Methode <tt>BrauchtNochTräger(obst)</tt>, damit die Ameisen den Weg zum Apfel nicht umsonst gehen.
 +
 
 +
 
 +
}}
 +
 
 +
== Kommentare interpretieren ==
 +
 
 +
 
 +
{{Aufgabe-Mathe|
 +
 
 +
Kommentare sind sehr wichtig in der Programmierung. Mit ihnen kann bei großen Softwareprojekten die richtige Methode gefunden werden. Auch in ''AntMe!'' gibt es Kommentare (gekennzeichnet durch <tt>///</tt>) zu jeder Methode.<br />
 +
Ordne den Kommentaren die passende Methode zu!
 +
 
 +
}}
 +
 
 +
<div class="lueckentext-quiz">
 
{|
 
{|
| Ameise
+
|-
 +
|
 +
/// <summary>
 +
/// Wird einmal aufgerufen, wenn die Ameise ein Obststück
 +
/// als Ziel hat und bei diesem ankommt.
 +
/// </summary>
 +
/// <param name="obst">Das Obstück.</param>
 +
|| <tt>'''public override void ZielErreicht'''(Obst obst)</tt>
 +
|-
 +
|
 +
 
 +
/// <summary>
 +
/// Wird wiederholt aufgerufen, wenn die Ameise mindestens
 +
/// eine Wanze sieht.
 +
/// </summary>
 +
/// <param name="wanze">Die nächstgelegene Wanze.</param>
 +
|| <tt>'''public override void SiehtFeind'''(Wanze wanze)</tt>
 
|-
 
|-
| ZielErreicht
+
|
 +
/// <summary>
 +
/// Wird wiederholt aufgerufen, wenn die Ameise von einer
 +
/// Wanze angegriffen wird.
 +
/// </summary>
 +
/// <param name="wanze">Die angreifende Wanze.</param>
 +
|| <tt>'''public override void WirdAngegriffen'''(Wanze wanze)</tt>
 
|-
 
|-
| AktuelleLast
+
|
 +
/// <summary>
 +
/// Liefert die aktuelle Last
 +
/// </summary>
 +
|| <tt>'''public int AktuelleLast'''()</tt>
 
|-
 
|-
| Sieht
+
|
 +
/// <summary>
 +
/// Lässt die Ameise in entgegengesetzte Richtung
 +
/// davon laufen
 +
/// </summary>
 +
/// <param name="ziel">Objekt, vor dem weggerannt
 +
///  werden soll</param>
 +
/// <param name="entfernung">Entfernung, die zurückgelegt
 +
///  werden soll</param>
 +
|| <tt>'''public void GeheWegVon'''(Spielobjekt ziel, int entfernung)</tt>
 
|}
 
|}
 +
</div>
  
 +
== Die Flucht vor den Wanzen ==
 +
 +
 +
{|
 +
|-
 +
| [[Bild:Krüger_Angriff.png]] ||
 +
Für den Schutz der Ameisen betrachten wir diese beiden Methoden. Mit Hilfe einer intelligenten Routine sterben in Zukunft weniger Ameisen.
 +
 +
/// <summary>
 +
/// Wird wiederholt aufgerufen, wenn die Ameise mindestens
 +
/// eine Wanze sieht.
 +
/// </summary>
 +
/// <param name="wanze">Die nächstgelegene Wanze.</param>
 +
public override void SiehtFeind(Wanze wanze)
 +
{
 +
}
 +
 +
/// <summary>
 +
/// Wird wiederholt aufgerufen, wenn die Ameise von
 +
/// einer Wanze angegriffen wird.
 +
/// </summary>
 +
/// <param name="wanze">Die angreifende Wanze.</param>
 +
public override void WirdAngegriffen(Wanze wanze)
 +
{
 +
}
 +
|}
 +
 +
 +
{{#ev:youtube|efIZe9VwRes|600}}
 +
 +
 +
Die Ameisen bringen den Apfel in eine falsche Richtung, wenn ihnen eine Wanze über den Weg läuft. Sie laufen mit einer wesentlich langsameren Geschwindigkeit. Deshalb sollen sie den Zucker oder den Apfel abwerfen.
 +
Dafür gibt es folgende Methode:<br /><br />
 +
<tt>'''LasseNahrungFallen()'''</tt><br />Die Ameise lässt die gerade getragene Nahrung fallen. Zucker geht dabei verloren, Äpfel bleiben liegen und können wieder aufgenommen werden. Der Befehl muss nicht ausgeführt werden um Nahrung in den Bau zu schaffen. Das passiert automatisch.<br />
 +
<div align="right">siehe auch:{{pdf|Krüger_Befehlsliste.pdf|Befehlsliste}}<ref>Quelle: [http://antme.net http://antme.net]</ref></div>
 +
 +
 +
{{Aufgabe-Mathe|
 +
 +
Verändere das Verhalten der Ameise!<br />
 +
Schreibe dazu den Quellcode in die Methode <tt>SiehtFeind(Wanze wanze)</tt> und <tt>WirdAngegriffen(Wanze wanze)</tt>, so dass die Ameise ihre Nahrung fallen lässt, wenn sie eine Wanze sieht oder angegriffen wird.
 +
 +
}}
 +
{{Lösung versteckt|
 +
Die Implentierung könnte so aussehen:
 +
{{#ev:youtube|7gGcGMH4XpE|600}}
 +
}}
 +
 +
 +
{{Aufgabe-Mathe|
 +
 +
Immernoch sterben zu viele Ameisen. Das liegt daran, dass sie die Nahrung nicht fallen lassen, wenn sie müde werden und in ihren Bau wollen.<br />
 +
Ergänze die fehlende Implementierung bei deinem Ameisenvolk!
 +
 +
}}
 +
{{Lösung versteckt|
 +
public override void WirdMüde()
 +
{
 +
  LasseNahrungFallen();
 +
  GeheZuBau();
 +
}
 +
}}
 +
 +
 +
<div style="border: 1px solid #dfdfdf; background-color:#dfdfdf; font-size:1px; height:8px; border-bottom:1px solid #dfdfdf;"></div>
 +
<div style="border:1px solid #dfdfdf; background-color:#FEFEFE; align:center; padding:7px;margin-bottom:10px;">
 +
 +
== Das kannst du jetzt ==
 +
* den Ameisen eine eigene künstliche Intelligenz zur Nahrungssuche beibringen
 +
* die Ameisen vor Wanzen schützen
 +
* neue Methoden von ''AntMe!'' kennengelernt, die später für die individuelle Stärke des Volkes nützlich sein könnten
 
</div>
 
</div>
 +
 +
 +
Unsere Ameisen schützen sich jetzt vor den Wanzen. Arbeite den nächsten Lernpfad durch, indem sich die Ameisen durch eine geschickte Kommunikationen vor Feinden warnen und die Nahrung gemeinsam in den Bau bringen. [[../AntMe!_-_Eine_Ameisenstraße|<math>\Rightarrow</math> Zum nächsten Lernpfad: AntMe! - Eine Ameisenstraße]]
 +
 +
[[../|<math>\Leftarrow</math> zurück zum Hauptmenü]]
 +
 +
== Quellen ==
 +
<references />
 +
 +
 +
[[Kategorie:Lernpfad AntMe!]]

Aktuelle Version vom 1. Dezember 2011, 22:58 Uhr

Mathematik-digital Pfeil-3d.png
Lernpfad

Auf der Nahrungssuche


Teil 2 der Lernpfadgruppe: Programmieren mit AntMe!

Pdf20.gif Kompetenzaufbau


Ziele des Lernpfads

  • neue unbekannte Methoden von AntMe! entdecken und anwenden
  • Logikfehler in der Programmierung erkennen und verbessern
  • Äpfel und Zucker in den Bau tragen
  • Routinen programmieren, welche die Ameisen vor Wanzen schützen


Deine Ameisen wollen das auch können.

Krüger ZuckerHolen.gif



  Aufgabe   Stift.gif


Wie könnten die Methoden Sieht(Zucker zucker) und ZielErreicht(Zucker zucker) aussehen?


public override void Sieht(Zucker zucker)
{
GeheZuZiel(zucker);
}
public override void ZielErreicht(Zucker zucker)
{
Nimm(zucker);
GeheZuBau();
}

  Aufgabe   Stift.gif


Implementiere die richtige Lösung in deiner Simulation!
Welches Verhalten zeigen die Ameisen? Löse dafür das folgende Quiz!


Etwas Unerwartetes tritt auf

1. Was passiert mit den Ameisen?

Sie holen sich den Zucker am Zuckerberg und bringen ihn in ihren Bau.
Sie laufen zum Zuckerberg, nehmen sich ein Stück Zucker und bleiben stehen.
Sie ignorieren den Zuckerberg und laufen weiter, ohne Zucker.

2. Welche Methode muss für das richtige Verhalten angepasst werden?

ZielErreicht(Zucker zucker) und Sieht(Zucker zucker)
ZielErreicht(Zucker zucker)
Sieht(Zucker zucker)
diese Implementierung ist falsch und muss grundsätzlich verändert werden

3. Mit welcher Methode bringen die Ameisen den Zucker in den Bau?

public override void Sieht(Zucker zucker)
{
if (AktuelleEnergie > 5)
su{
un 2GeheZuZiel(zucker);
is}
}
public override void Sieht(Zucker zucker)
{
t if (AktuelleLast == 0)
ri{
chtiGeheZuZiel(zucker);
g.}
}
public override void ZielErreicht(Zucker zucker)
{
ööNimm(zucker);
üüDreheUmWinkel(180);
ääGeheZuBau();
}

Punkte: 0 / 0


Wie der Zucker in den Bau kommt

  Aufgabe   Stift.gif


Implementiere die richtige Lösung in deinen Quellcode, so dass die Ameisen den Zucker in ihren Bau tragen.



Die Ameisen bringen den Zucker in ihren Bau. Vergleiche deine Lösung mit dem Video.



  Aufgabe   Stift.gif


Löse das Schüttel-Rätsel!


In der Methode Sieht(Zucker zucker) wenden wir einen Trick an. Das Problem ist: die Ameisen bleiben mit ihrem Zucker am Berg stehen. Sie machen das, weil sie den Zucker aufnehmen und beim Weggehen erneut die Methode Sieht(Zucker zucker) aufgerufen wird. Mit einer if-Bedingung überprüfen wir, ob die Ameise bereits eine Last trägt.
Den alten Code:

public override void Sieht(Zucker zucker)
{
  GeheZuZiel(zucker);
}

ändern wir wie folgt ab:

public override void Sieht(Zucker zucker)
{
  if (AktuelleLast == 0)
  {
    GeheZuZiel(zucker);
  }
}

AktuelleLast ist ein Attribut der Klasse Ameise, welches das getragene Gewicht der Ameise speichert.

   

  Aufgabe   Stift.gif


Krüger Red Apple.jpg


1. Überlege dir mit deinem Nachbarn ein Verfahren, so dass die Ameisen einen Apfel nach Hause tragen.
2. Nutze die Methode BrauchtNochTräger(obst), damit die Ameisen den Weg zum Apfel nicht umsonst gehen.


Kommentare interpretieren

  Aufgabe   Stift.gif


Kommentare sind sehr wichtig in der Programmierung. Mit ihnen kann bei großen Softwareprojekten die richtige Methode gefunden werden. Auch in AntMe! gibt es Kommentare (gekennzeichnet durch ///) zu jeder Methode.
Ordne den Kommentaren die passende Methode zu!


/// <summary>
/// Wird einmal aufgerufen, wenn die Ameise ein Obststück
/// als Ziel hat und bei diesem ankommt.
/// </summary>
/// <param name="obst">Das Obstück.</param>
public override void ZielErreicht(Obst obst)
/// <summary>
/// Wird wiederholt aufgerufen, wenn die Ameise mindestens 
/// eine Wanze sieht.
/// </summary>
/// <param name="wanze">Die nächstgelegene Wanze.</param>
public override void SiehtFeind(Wanze wanze)
/// <summary>
/// Wird wiederholt aufgerufen, wenn die Ameise von einer
/// Wanze angegriffen wird.
/// </summary>
/// <param name="wanze">Die angreifende Wanze.</param>
public override void WirdAngegriffen(Wanze wanze)
/// <summary>
/// Liefert die aktuelle Last
/// </summary>
public int AktuelleLast()
/// <summary>
/// Lässt die Ameise in entgegengesetzte Richtung 
/// davon laufen
/// </summary>
/// <param name="ziel">Objekt, vor dem weggerannt
///   werden soll</param>
/// <param name="entfernung">Entfernung, die zurückgelegt
///   werden soll</param>
public void GeheWegVon(Spielobjekt ziel, int entfernung)

Die Flucht vor den Wanzen

Krüger Angriff.png

Für den Schutz der Ameisen betrachten wir diese beiden Methoden. Mit Hilfe einer intelligenten Routine sterben in Zukunft weniger Ameisen.

/// <summary>
/// Wird wiederholt aufgerufen, wenn die Ameise mindestens
/// eine Wanze sieht.
/// </summary>
/// <param name="wanze">Die nächstgelegene Wanze.</param>
public override void SiehtFeind(Wanze wanze)
{
}
/// <summary>
/// Wird wiederholt aufgerufen, wenn die Ameise von
/// einer Wanze angegriffen wird.
/// </summary>
/// <param name="wanze">Die angreifende Wanze.</param>
public override void WirdAngegriffen(Wanze wanze)
{
}



Die Ameisen bringen den Apfel in eine falsche Richtung, wenn ihnen eine Wanze über den Weg läuft. Sie laufen mit einer wesentlich langsameren Geschwindigkeit. Deshalb sollen sie den Zucker oder den Apfel abwerfen. Dafür gibt es folgende Methode:

LasseNahrungFallen()
Die Ameise lässt die gerade getragene Nahrung fallen. Zucker geht dabei verloren, Äpfel bleiben liegen und können wieder aufgenommen werden. Der Befehl muss nicht ausgeführt werden um Nahrung in den Bau zu schaffen. Das passiert automatisch.

siehe auch:Pdf20.gif Befehlsliste[1]


  Aufgabe   Stift.gif


Verändere das Verhalten der Ameise!
Schreibe dazu den Quellcode in die Methode SiehtFeind(Wanze wanze) und WirdAngegriffen(Wanze wanze), so dass die Ameise ihre Nahrung fallen lässt, wenn sie eine Wanze sieht oder angegriffen wird.


Die Implentierung könnte so aussehen:


  Aufgabe   Stift.gif


Immernoch sterben zu viele Ameisen. Das liegt daran, dass sie die Nahrung nicht fallen lassen, wenn sie müde werden und in ihren Bau wollen.
Ergänze die fehlende Implementierung bei deinem Ameisenvolk!


public override void WirdMüde()
{
  LasseNahrungFallen();
  GeheZuBau();
}


Das kannst du jetzt

  • den Ameisen eine eigene künstliche Intelligenz zur Nahrungssuche beibringen
  • die Ameisen vor Wanzen schützen
  • neue Methoden von AntMe! kennengelernt, die später für die individuelle Stärke des Volkes nützlich sein könnten


Unsere Ameisen schützen sich jetzt vor den Wanzen. Arbeite den nächsten Lernpfad durch, indem sich die Ameisen durch eine geschickte Kommunikationen vor Feinden warnen und die Nahrung gemeinsam in den Bau bringen. \Rightarrow Zum nächsten Lernpfad: AntMe! - Eine Ameisenstraße

\Leftarrow zurück zum Hauptmenü

Quellen

  1. Quelle: http://antme.net