locked
Problem mit Kampf

    Frage

  • Hi Leute

    ich habe ein kleines Problem und zwar greifen meine Ameisen die Käfer nicht an, trotz des Codes aus dem Turorial. Ich habe hier einen Ausschnitt des Codes eingefügt.

    public override void Sieht(Zucker zucker) {

    if (AktuelleLast == 0)

    if (!(Ziel is Käfer))

    GeheZuZiel(zucker);

    SprüheMarkierung(0, 100);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, zucker);

    richtung = Koordinate.BestimmeRichtung(this, zucker);

    SprüheMarkierung(richtung, entfernung);

    }

    Der Käfer wird praktisch ignoriert. So können die Tiere meine Ameisen so nach und nach vernichten.

    Danke für Eure Hilfe!

    gruß, Needless

     

     

     

     

    Mittwoch, 13. Dezember 2006 19:30

Alle Antworten

  • Hallo,

    Ich würde dir gerne helfen, aber der Codeausschnitt ist wohl nich der, der zu deinem Problem passt oder!?

    Denn in der "Sieht(Zucker zucker)" hat ein Käferangriff eigentlich nichts zu suchen, und das ist bei dir ja auch nicht der Fall. Kopier doch einfach noch mal deine "Sieht(Käfer käfer)" hier rein.

    marco

    Donnerstag, 14. Dezember 2006 07:58
  • Hi,

    Danke für Deine Antwort. Ich habe mich verguckt.  Natürlich hier die "Käfer" Methode.

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

    if (AnzahlInSichtweite * MaximaleEnergie > käfer.AktuelleEnergie)

    GreifeAn(käfer);

    else

    GeheWegVon(käfer);

    SprüheMarkierung(0, 100);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, käfer);

    richtung = Koordinate.BestimmeRichtung(this, käfer);

    SprüheMarkierung(richtung, entfernung);

    }

     

    Danke für Eure Mühe.

     

    Gruß, needless

    Freitag, 15. Dezember 2006 17:07
  • Hallo,

    Ein Problem könnte sein, dass du nach dem "GreifeAn(käfer)" noch die Markierung sprühst..bin mir an der Stelle nicht sicher, aber setz die SprühMarkierung mal davor. Außerdem könnte es sein, dass deine Ameise bereits Nahrung trägt, und sie deshalb den Käfer nicht angreift!?

    marco

    Samstag, 16. Dezember 2006 13:43
  • Hi.

    Ich habe nun den Code geändert. Leider bringt das nichts. Nachwievor werden die Käfer ignoriert. Hier ist der komplette Code:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using AntMe;

    namespace AntMe.Spieler.MatthiasHaeberle {

    [Spieler(

    Name = "Deutschland",

    Vorname = "M",

    Nachname = "H"

    )]

    [Typ(

    Name = "Sammler",

    GeschwindigkeitModifikator = 1,

    DrehgeschwindigkeitModifikator = -1,

    EnergieModifikator = 1,

    LastModifikator = 1,

    ReichweiteModifikator = -1,

    SichtweiteModifikator = -1

    )]

    [Typ(

    Name = "Kämpfer",

    GeschwindigkeitModifikator = 1,

    DrehgeschwindigkeitModifikator = -1,

    EnergieModifikator = 1,

    LastModifikator = -1,

    ReichweiteModifikator = -1,

    SichtweiteModifikator = 1

    )]

    public class MeineAmeise : Ameise {

    public MeineAmeise(Volk volk, int typIndex)

    : base(volk, typIndex) {

    }

    public static string BestimmeTyp(Dictionary<string, int> anzahl) {

    if (anzahl["Sammler"] < 75)

    return "Sammler";

    else

    return "Kämpfer";

    }

    public override void Wartet() {

    GeheGeradeaus();

    }

    public override void Sieht(Zucker zucker) {

    if (AktuelleLast == 0)

    if (!(Ziel is Käfer))

    GeheZuZiel(zucker);

    SprüheMarkierung(0, 100);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, zucker);

    richtung = Koordinate.BestimmeRichtung(this, zucker);

    SprüheMarkierung(richtung, entfernung);

    }

    public override void Sieht(Obst obst) {

    if (AktuelleLast == 0 && BrauchtNochTräger(obst))

    GeheZuZiel(obst);

    SprüheMarkierung(0, 100);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, obst);

    richtung = Koordinate.BestimmeRichtung(this, obst);

    SprüheMarkierung(richtung, entfernung);

    }

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

    if (AnzahlInSichtweite * MaximaleEnergie > käfer.AktuelleEnergie)

    GreifeAn(käfer);

    else

    SprüheMarkierung(0, 100);

    GeheWegVon(käfer);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, käfer);

    richtung = Koordinate.BestimmeRichtung(this, käfer);

    SprüheMarkierung(richtung, entfernung);

    }

    public override void GreiftAn(Käfer käfer)

    {

    if (AktuelleEnergie < MaximaleEnergie / 2)

    GeheZuBau();

    }

    public override void Sieht(Markierung markierung) {

    if (Ziel == null)

    DreheInRichtung(markierung.Information);

    GeheGeradeaus();

    }

    public override void ZielErreicht(Zucker zucker) {

    Nimm(zucker);

    GeheZuBau();

    }

    public override void ZielErreicht(Obst obst) {

    if (BrauchtNochTräger(obst))

    Nimm(obst);

    GeheZuBau();

    }

    public override void IstUnterwegs() {

    if (Ziel is Bau && AktuelleLast > 0 && GetragenesObst == null);

    SprüheMarkierung(Richtung + 180);

    }

    public override void IstMüde() {

    }

    }

    }

     

    Danke für die Hilfe.

     

    gruß, needless :D

    Samstag, 16. Dezember 2006 15:54
  • Eigentlich müssten Deine Ameisen immer von den Käfern weglaufen (also nicht wirklich ignoriren). Das Problem ist eine fehlende Klammerung bei dem if. Ohne Klammern wird nur jeweils der nächste Befehl ausgeführt. Und das direkt zu sehen, rückt man den Code eigentlich ein. Das sieht hier nicht so aus, als ob Du das gemacht hast, kann aber auch beim copy&paste verloren gegangen sein.
    Du hast jetzt das:

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

    if (AnzahlInSichtweite * MaximaleEnergie > käfer.AktuelleEnergie)

                GreifeAn(käfer);

    else

                SprüheMarkierung(0, 100);



    GeheWegVon(käfer);

    int entfernung, richtung;

    entfernung = Koordinate.BestimmeEntfernung(this, käfer);

    richtung = Koordinate.BestimmeRichtung(this, käfer);

    SprüheMarkierung(richtung, entfernung);

    }



    Aber was du willst, ist das:

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

            if (AnzahlInSichtweite * MaximaleEnergie > käfer.AktuelleEnergie)

                        GreifeAn(käfer);

            else

            {

                        SprüheMarkierung(0, 100);

                        GeheWegVon(käfer);

                        int entfernung, richtung;

                        entfernung = Koordinate.BestimmeEntfernung(this, käfer);

                        richtung = Koordinate.BestimmeRichtung(this, käfer);

                        SprüheMarkierung(richtung, entfernung);

            }

    }


    Ciao,

      Wolfram

    Samstag, 16. Dezember 2006 21:11
  • Hi

    Danke für deine Antwort. Mir ist aufgefallen, dass die Energie meiner Ameisen nur 25 Punkte beträgt. Auch direkt nach dem Start des Spiels. Ohne "Feindkontakt".

    Sonntag, 17. Dezember 2006 16:48
  • AnzahlInSichtweite war fehlerhaft. Der Fehler wurde behoben, das neue Release kommt in den nächsten Tagen.
    Mittwoch, 17. Januar 2007 21:01