locked
Problem mit Property AnzahlInSichtweite

    Frage

  • Hallo!

    Erstmal ein großes Lob an das AntMe-Team. Ich finde das Projekt klasse
    Ich habe eine Frage. Wie kann man die Anzahl befreundeter Insekten in Sichtweite des Insekts ermitteln? Property AnzahlInSichtweite ist bei mir immer gleich 0. Die Methode BerechneAnzahl() aus Bucket.cs bekommt b = null (auch immer) und endet sich am Anfang

    public void BerechneAnzahl() {

    List<IBucketElement>[,] b = bucket as List<IBucketElement>[,];

    if (b == null)

    return;

    ...

    Donnerstag, 9. November 2006 10:05

Alle Antworten

  • Hi Ali,

    die Eigenschaft zur Ermittlung der umliegenden, befreundeten Ameisen ist "AnzahlInSichtweite". Dabei werden wirklich nur die Ameisen gezählt die im Sichtradius liegen. Möglicherweise hast du immer nur im falschen Moment die Variable geprüft?

    Was das Problem bei BerechneAnzahl() angeht:
    Die Methode beendet sich am Anfang nur dann selbst wenn "b == null" ist. Sollte nach einem if nur ein einziger Befehl kommen braucht man die Klammern nicht zu setzen. Das ist auf den ersten Blick ein wenig ungewohnt und verwirrend.
    Was genau da passiert und warum das so ist kann dir Wolfgang sicher besser erläutern, aber ich denke nicht, dass da der Fehler zu finden ist.

    Viel Erfolg beim KIen
    vom Tom
    Donnerstag, 9. November 2006 10:16
  • So sieht der Code aus (ist sinnlos, nur für die Prüfung):

    public override void Sieht(Käfer käfer) {

    int i = this.AnzahlInSichtweite;

    if (i > 0)

    {

    Console.WriteLine(i);

    }

    }

    Der Haltepunkt auf Console.WriteLine(i) gesetzt. Programme läuft aber ohne Unterbrechung.

    Die AntMe!--Kits habe ich am 7.11 runtergeladen.

    Donnerstag, 9. November 2006 10:44
  • Vielleicht sehen deine Ameisen wirklich keine anderen Ameisen während sie den Käfer sehen. Teste doch mal im Warte() auf AnzahlInSichtweite. Da müssten sie dann auf jedenfall mal andere Ameisen sehen, denn Warte wird ja aufgerufen sobald sie aus dem Ameisenbau kommen. Da sind dann ja genug andere Ameisen in der Nähe.

    marco

    Donnerstag, 9. November 2006 11:01
  • guter Ansatz. Aber du musst dabei beachten, dass erst zu jeder neuen Runde eine neue Ameise hinzu kommt. Wenn du also den ersten "Wartet"-Durchlauf debuggst wird da trotzdem 0 rauskommen. Erst bei kommenden Runden sollte dieser Wert langsam steigen.
    Donnerstag, 9. November 2006 16:32
  • Die Anzahl wird berechnet, bevor irgendein Ereignis an die Ameisen geworfen wird. Es spielt also keine Rolle, wann du es abfrägst. Die Bucket Klasse ist nicht dafür gedacht, daß du sie selbst verwendest.
    Dienstag, 14. November 2006 13:17
  • Ich hab wahrscheinlich das gleiche Problem mit der AnzahlInSichtweite:
    diesen Block:
    if (AnzahlInSichtweite > 0)
    {
    Console.WriteLine(" anzahl: " + AnzahlInSichtweite);
    }
    habe ich in allen Methoden und ich bekomme keine einzige Benachrichtigung einer gesichteten Ameise.

    edit: habe gerade in einem anderen thread gelesen, dass es wohl am WriteLine liegt. Wie kann ich das sonst prüfen?
    Samstag, 18. November 2006 18:08
  • Stimmt. Da deine Ameisen eine Klassenbibliothek sind und keine Konsolenanwendung, gibt es keine Konsole in die du hineinschreiben könntest. Sobald ich wieder mehr Zeit habe (warscheinlich erst ab dem 14. Dezember) schaue ich mir die Sache mit AnzahlInSichtweite genauer an. Es steht auf jeden Fall schon auf der To-Do-Liste für die Beta 2.
    Sonntag, 19. November 2006 14:56
  • Hi,

    habe das selbe Problem

    public override void Sieht(Käfer käfer)
            {
                /*int Entfernung, Richtung;
                Entfernung = Koordinate.BestimmeEntfernung(this, käfer);
                Richtung = Koordinate.BestimmeRichtung(this, käfer);
                SprüheMarkierung(Richtung+720, Entfernung);*/

                if (AnzahlInSichtweite > 0)
                {
                    BleibStehen();
                }


    habe bei BleibStehen() einen Breakpoint gesetzt. Tja, leider wurde nie angehalten.

     Gruß Joe
    Sonntag, 3. Dezember 2006 14:08