locked
Sammelthread: Probleme mit Befehlen

    Frage

  • So da das nicht mein letztes Problem sein wird, mache ich es mal gleich zum Sammelthread.

    Ich bin dann gleich mal der erste. Ich will darstellen, dass meine Ameise etwas tut, wenn sie keine Makierung sieht.
    1.
    if (Typ=="Späher" && ??? )
    SprüheMarkierung (2, 5);
    GeheZuBau();
    else
    GeheGeradeaus();
    2. Kann ich irgendwie einstellen, in welchen Winkel die Ameise von den Wänden abprallt(mir fällt kein besserer Ausdruck ein).
    3. Wie kann ich es richtig darstellen?
    if (Typ == "Späher" && Ziel is Bau && IstMüde=false)
    Montag, 6. November 2006 17:27

Antworten

  • Heyho,

    ich versuche mal auf alle Probleme hier eine knappe Antwort zu posten - ich hoffe es hilft.

    Ameisen-Abprallproblem:
    Man kann nicht bestimmen in welchem Winkel die Ameise abprallt. Es zählt Eingangswinkel=Ausgangswinkel. Ich frage mich aber eher was du damit bezwecken willst und ob man das nicht auf anderem Weg erreichen könnte.


    sieht(Markierung)-Problem:
    Auf eine Markierung zu reagieren macht prinzipiell nur im "sieht(Markiering)" Ereignis sinn. Nur dort hat man Zugriff auf die gesichtete Markierung. Überall sonst gibt es keine Möglichkeit herauszufinden ob die Ameise überhaupt eine Markierung sieht oder nicht. Das ist in etwa auch das was Corax geschrieben hat. Die Prüfung auf "markierung != null" kannst du dir aber sparen weil das Ereignis nur ausgeführt wird wenn da auch tatsächlich eine Markierung ist - markierung ist daher niemals null. Das ist übrigens auch das Problem wenn du die Meldung "markierung gibts in diesem Kontext nicht" erhältst. Das bedeutet, dass die Variable nicht existiert. Diese Variable gibt es nämlich nur innerhalb von "sieht(Markierung)".
    Du kannst das Problem lösen indem du das Markierungshandling ausschließlich auf den sieht(Markierung)-block beschränkst.

    Richtungsermittlungsproblem:
    Prinzipiell sollte das, was du da gemacht hast funktionieren. Du nimmst einen Richtungswert, addierst 180 hinzu um die Gegenrichtung zu erhalten.
    Interessant ist vielleicht auch ein weitere Ansatz über die Hilfsfunktionen der Koordinaten-Klasse. Du hast die Möglichkeit eine direkte Richtung zu ermitteln indem du den Befehl "Koordinate.BestimmeRichtung(this, käfer);" verwendest. Als Rückgabewert erhältst du den absoluten Winkel von der aktuellen Ameise zum käfer.

    Viel Erfolg damit

    vom Tom
    Mittwoch, 8. November 2006 01:34

Alle Antworten

  • also zu deinem Problem 1:

    if ((Typ=="Späher") && (markierung == null)) //doppelte klammer weil mathem. übersichtlicher
    { // fehlt in deinem Beispiel, ist aber wichtig sonst Fehler bei else
    SprüheMarkierung(2,5);
    GeheZuBau();
    }
    else
    GeheGeradeaus();

    das müsste funktionieren, wenn du dies in sieht(Markierung) einträgst.
    Bei Deinem Problem 2 muss ich leider passen
    Montag, 6. November 2006 17:43
  •  corax02 Schrieb:
    (markierung == null))


    Geht nicht, trotzdem danke.
    Montag, 6. November 2006 18:13
  • Ist klar, dass das nicht funktioniert, denn wenn es im Sieht(Markierung markierung) steht, ist markierung natürlich nie null.
    Wenn, muss es im IstUnterwegs z.b. stehen. bin mir aber nicht sicher ob es da seinen zweck erfüllt.
    Zu deinem 2. Problem: Dafür gibt es keine Ereignisse und deshalb gehe ich davon aus, dass das nicht möglich ist.

    marco

    Montag, 6. November 2006 19:23
  • Ich meine damit, dass der Befehl falsch ist.

    Der Name "markierung" ist im aktuellen Kontext nicht vorhanden.



    *edit* Habe schon wieder ein neues Problem.^^

      int Gegner ;
                Gegner=Richtung+180;
                    SprüheMarkierung(Gegner);

    geht nicht, warum auch immer.
    Montag, 6. November 2006 20:33
  •  Suicid0 Schrieb:
    Ich meine damit, dass der Befehl falsch ist.

    Der Name "markierung" ist im aktuellen Kontext nicht vorhanden.



    *edit* Habe schon wieder ein neues Problem.^^

      int Gegner ;
                Gegner=Richtung+180;
                    SprüheMarkierung(Gegner);

    geht nicht, warum auch immer.


    frage: was möchtest du mit diesem quellcode erreichen?
    wenn die ameise den weg bis zum gegner markieren soll, funktioniert das nicht.
    dazu musst du die "IstUnterwegs" funktion umschreiben, oder entsprechend anpassen.
    so in die richtung: wenn vor dir der gegner, gehe weg und markiere den weg.

    Montag, 6. November 2006 22:27
  • Ich habe ja Gegner initialisiert und deklariert. Richtung +180 ist eine int Zahl.Warum kann ich diese dann nicht in Sprühemarkierung einsetzen?
    Dienstag, 7. November 2006 15:46
  • Heyho,

    ich versuche mal auf alle Probleme hier eine knappe Antwort zu posten - ich hoffe es hilft.

    Ameisen-Abprallproblem:
    Man kann nicht bestimmen in welchem Winkel die Ameise abprallt. Es zählt Eingangswinkel=Ausgangswinkel. Ich frage mich aber eher was du damit bezwecken willst und ob man das nicht auf anderem Weg erreichen könnte.


    sieht(Markierung)-Problem:
    Auf eine Markierung zu reagieren macht prinzipiell nur im "sieht(Markiering)" Ereignis sinn. Nur dort hat man Zugriff auf die gesichtete Markierung. Überall sonst gibt es keine Möglichkeit herauszufinden ob die Ameise überhaupt eine Markierung sieht oder nicht. Das ist in etwa auch das was Corax geschrieben hat. Die Prüfung auf "markierung != null" kannst du dir aber sparen weil das Ereignis nur ausgeführt wird wenn da auch tatsächlich eine Markierung ist - markierung ist daher niemals null. Das ist übrigens auch das Problem wenn du die Meldung "markierung gibts in diesem Kontext nicht" erhältst. Das bedeutet, dass die Variable nicht existiert. Diese Variable gibt es nämlich nur innerhalb von "sieht(Markierung)".
    Du kannst das Problem lösen indem du das Markierungshandling ausschließlich auf den sieht(Markierung)-block beschränkst.

    Richtungsermittlungsproblem:
    Prinzipiell sollte das, was du da gemacht hast funktionieren. Du nimmst einen Richtungswert, addierst 180 hinzu um die Gegenrichtung zu erhalten.
    Interessant ist vielleicht auch ein weitere Ansatz über die Hilfsfunktionen der Koordinaten-Klasse. Du hast die Möglichkeit eine direkte Richtung zu ermitteln indem du den Befehl "Koordinate.BestimmeRichtung(this, käfer);" verwendest. Als Rückgabewert erhältst du den absoluten Winkel von der aktuellen Ameise zum käfer.

    Viel Erfolg damit

    vom Tom
    Mittwoch, 8. November 2006 01:34