locked
Hinweis: Was tun wenn die Ameise beim Zuckerholen zickt?

    Frage

  • Du hast Deine Ameise angewiesen zum Zucker zu gehen, den zu nehmen und danach zum Bau zu laufen und sie bleibt einfach stehen?

    Dann bist Du warscheinlich in die selbe Falle wie Uwe und ich gelaufen und hast den Code komplett in die Sieht(Zucker zucker) Methode geschrieben. Das ist nur leider der falsche Platz dafür, denn wenn die Ameise den Zucker sieht, ist sie noch lange nicht dort angekommen. Der richtige Platz dafür ist die Methode Zielerreicht(Zucker zucker). Dann klappts auch.

    Übrigens: Unbedingt auch daran denken in der Methode Sieht() immer zu prüfen ob die Ameise schon ein Ziel hat. Sonst bleibt sie einfach zwischen Auftrag und Neusichtung hin und hergerissen stehen :)

    Weiter viel Spaß & Grüße,
    Dirk

     

     

    Freitag, 3. November 2006 15:30

Antworten

  • Hallo,

    Also so wie ich das sehe ist das verhalten korrekt. Denn:
    Bei Beispiel 1 sieht sie den Zucker, geht hin und ZielErreicht wird ausgelöst. Nur direkt danach nach der "GeheZuBau" Methode wird wieder das Ereignis Sieht(zucker) ausgelöst und sie geht wieder zum zucker. Also kann GeheZuBau nie zuende ausgeführt werden, da sie ja immer wieder den Zucker sieht und hingeht.
    Daher in Beispiel 2 ja auch vorher die Prüfung, ob bereits ein Ziel vorhanden ist, und nur wenn nicht, geht sie zum Zucker.

    Hoffe es ist verständlich...

    Viel spaß noch,
    marco

    Samstag, 4. November 2006 09:14

Alle Antworten

  •  

    Bei mir Zicken die Ameisen immer noch rum am Zuckern.

    Dazu mal folgendes:


    Bsp. 1:

    public override void Sieht(Zucker zucker) {

    GeheZuZiel(zucker);

    }

     

    public override void ZielErreicht(Zucker zucker) {

    Nimm(zucker);

    if (AktuelleLast == MaximaleLast)

    GeheZuBau();

    }


    Bsp.2:

    public override void Sieht(Zucker zucker) {

    if (Ziel == null && AktuelleLast < MaximaleLast)

    GeheZuZiel(zucker);

    }

    public override void ZielErreicht(Zucker zucker) {

    Nimm(zucker);

    if (AktuelleLast == MaximaleLast)

    GeheZuBau();

    }


    Wie man nun sieht ist die ZielErreicht Methode der Klasse der Demo Armeisen entnommen.

    Jedoch ist es nun so, dass beim ersten Beispiel mit nur "GeheZuZiel(zucker);" meine Armeisen den Zucker nicht aufnehmen. Obwohl sie es eigentlich laut der ZielErreicht Methode tun sollte, was auch das 2. Bsp. zeigt. Denn mit dem Bsp. 2 funktioniert auf alles einwandfrei. Die Armeisen gehen hin, nehmen den Zucker auf und kehren zum Bau zurück.

    Beim 1. Beispiel bleiben die Ameisen aber nur am Zucker stehen.

    Meiner Meinung nach sollte auch das erste Beispiel ausreichen um erfoglreich Zucker zu ernten.

    Samstag, 4. November 2006 00:11
  • Hallo,

    Also so wie ich das sehe ist das verhalten korrekt. Denn:
    Bei Beispiel 1 sieht sie den Zucker, geht hin und ZielErreicht wird ausgelöst. Nur direkt danach nach der "GeheZuBau" Methode wird wieder das Ereignis Sieht(zucker) ausgelöst und sie geht wieder zum zucker. Also kann GeheZuBau nie zuende ausgeführt werden, da sie ja immer wieder den Zucker sieht und hingeht.
    Daher in Beispiel 2 ja auch vorher die Prüfung, ob bereits ein Ziel vorhanden ist, und nur wenn nicht, geht sie zum Zucker.

    Hoffe es ist verständlich...

    Viel spaß noch,
    marco

    Samstag, 4. November 2006 09:14