コード例 #1
0
 /// <summary>
 /// Verfolgt das aktuelle Ziel weiter oder geht geradeaus, wenn kein Ziel vorhanden.
 /// </summary>
 private void Weitermachen()
 {
     if (Ziel != null)
     {
         if (Ziel.GetType() == typeof(Insekt))
         {
             GreifeAn((Insekt)Ziel);
             greiftAn = true;
         }
         else
         {
             GeheZuZiel(Ziel);
         }
     }
     else
     {
         if (FuzzyInferenceSystem.Superdecision5x5x2(character.faulheit, character.energie, character.laufen, memory.GetDecisionValue(DecisionType.Laufen)))
         {
             GeheGeradeaus();
         }
         else
         {
             //kein Bock
             BleibStehen();
             WaitUntil(50);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Verfolgt das aktuelle Ziel weiter oder geht geradeaus, wenn kein Ziel vorhanden.
        /// </summary>
        private void Weitermachen()
        {
            if (Ziel != null)
            {
                if (Ziel.GetType() == typeof(Insekt))
                {
                    GreifeAn((Insekt)Ziel);
                    greiftAn = true;
                }
                else
                {
                    GeheZuZiel(Ziel);
                }
            }
            else
            {
                if (FuzzyInferenceSystem.Superdecision5x5x2(character.faulheit, character.energie, character.laufen, memory.GetDecisionValue(DecisionType.Laufen)))
                {
                    if (AltesZiel != null)
                    {
                        GeheZuZiel(AltesZiel);

                        //Zucker kann immer als Ziel beibehalten werden
                        if (AltesZiel.GetType() != typeof(Zucker))
                        {
                            AltesZiel = null;
                        }
                    }
                    else
                    {
                        //Kein Ziel gemerkt
                        GeheGeradeaus();
                        setActionBreak();
                        if (memory.LastAction != DecisionType.Laufen)
                        {
                            memory.ActionDone(DecisionType.Laufen);
                        }
                    }
                }
                else
                {
                    //kein Bock
                    BleibStehen();
                    WaitUntil(50);

                    if (memory.LastAction != DecisionType.Warten)
                    {
                        memory.ActionDone(DecisionType.Warten);
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Wird einmal aufgerufen, wenn die Ameise eine Markierung des selben
        /// Volkes riecht. Einmal gerochene Markierungen werden nicht erneut
        /// gerochen.
        /// </summary>
        /// <param name="markierung">Die nächste neue Markierung.</param>
        public override void RiechtFreund(Markierung markierung)
        {
            Marker marker = Markers.Get(markierung.Information);

            try
            {
                switch (marker.markerType)
                {
                case Marker.MarkerType.HilfeAmeise:
                    //Hilfsbereitschaft, Teamfähigkeit prüfen
                    //Nahrung fallen lassen
                    //helfen

                    //wenn sie nicht schon angreift oder noch Nahrung sammelt
                    if (!greiftAn)
                    {
                        //dann über Angriff nachdenken
                        if (FuzzyInferenceSystem.Superdecision5x5x2(character.teamfaehigkeit, character.ameisenFreundeInNaehe, character.angreifen, memory.GetDecisionValue(DecisionType.AngreifenAmeise)))
                        {
                            if (marker.markerInformation == Marker.MarkerInformationType.Insekt)
                            {
                                if (Ziel.GetType() == typeof(Zucker))
                                {
                                    AltesZiel = Ziel;
                                }

                                LasseNahrungFallen();
                                trägtNahrung = false;
                                GreifeAn(marker.Insekt);
                                greiftAn    = true;
                                hilftFreund = true;
                                memory.ActionDone(DecisionType.AngreifenAmeise);
                                setActionBreak();
                            }
                            else
                            {
                                Weitermachen();
                            }
                        }
                        else
                        {
                            Weitermachen();
                        }
                    }
                    else
                    {
                        Weitermachen();
                    }
                    break;

                case Marker.MarkerType.HilfeObst:
                    //Hilfsbereitschaft, Teamfähigkeit prüfen
                    //nur wenn keine eigene Nahrung
                    //helfen
                    if (!trägtNahrung && !greiftAn && !hilftFreund)
                    {
                        if (FuzzyInferenceSystem.CorrelateDecisionfunctions(FuzzyInferenceSystem.Superdecision5x5x2_Double(character.faulheit, character.energie, character.sammelnobst, memory.GetDecisionValue(DecisionType.SammelnObst)), FuzzyInferenceSystem.Superdecision5x5x2_Double(character.teamfaehigkeit, character.ameisenFreundeInNaehe, character.sammelnobst, memory.GetDecisionValue(DecisionType.Gruppieren))))
                        {
                            if (marker.markerInformation == Marker.MarkerInformationType.Object)
                            {
                                GeheZuZiel(marker.Objekt);
                                hilftFreund = true;
                                memory.ActionDone(DecisionType.SammelnObst);
                                memory.ActionDone(DecisionType.Gruppieren);
                                setActionBreak();
                                //SprüheMarkierung(Markers.Add(new Marker(Marker.MarkerType.Obst, marker.Objekt)), MarkierungGrößeHilfeLokal);
                            }
                            else
                            {
                                Weitermachen();
                            }
                        }
                        else
                        {
                            Weitermachen();
                        }
                    }
                    else
                    {
                        Weitermachen();
                    }
                    break;

                case Marker.MarkerType.HilfeWanze:
                    //Hilfsbereitschaft, Teamfähigkeit prüfen
                    //Anzahl Freunde prüfen
                    //Nahrung fallen lassen
                    //helfen

                    //wenn sie nicht schon beim Angreifen ist
                    if (!greiftAn)
                    {
                        //dann über Angriff nachdenken
                        if (FuzzyInferenceSystem.Superdecision5x5x2(character.teamfaehigkeit, character.ameisenFreundeInNaehe, character.angreifen, memory.GetDecisionValue(DecisionType.AngreifenWanze)))
                        {
                            if (marker.markerInformation == Marker.MarkerInformationType.Insekt)
                            {
                                if (Ziel.GetType() == typeof(Zucker))
                                {
                                    AltesZiel = Ziel;
                                }

                                LasseNahrungFallen();
                                trägtNahrung = false;
                                GreifeAn(marker.Insekt);
                                greiftAn    = true;
                                hilftFreund = true;
                                memory.ActionDone(DecisionType.AngreifenWanze);
                                setActionBreak();
                                //SprüheMarkierung(Markers.Add(new Marker(Marker.MarkerType.HilfeWanze, marker.Insekt)), MarkierungGrößeHilfeLokal);
                            }
                        }
                        else
                        {
                            Weitermachen();
                        }
                    }
                    else
                    {
                        Weitermachen();
                    }
                    break;

                case Marker.MarkerType.Obst:
                    //das gleiche wie bei siehtObst()
                    if (!trägtNahrung && !greiftAn && !hilftFreund)
                    {
                        if (FuzzyInferenceSystem.CorrelateDecisionfunctions(FuzzyInferenceSystem.Superdecision5x5x2_Double(character.faulheit, character.energie, character.sammelnobst, memory.GetDecisionValue(DecisionType.SammelnObst)), FuzzyInferenceSystem.Superdecision5x5x2_Double(character.teamfaehigkeit, character.ameisenFreundeInNaehe, character.sammelnobst, memory.GetDecisionValue(DecisionType.Gruppieren))))
                        {
                            if (marker.markerInformation == Marker.MarkerInformationType.Object)
                            {
                                GeheZuZiel(marker.Objekt);
                                hilftFreund = true;
                                memory.ActionDone(DecisionType.SammelnObst);
                                memory.ActionDone(DecisionType.Gruppieren);
                                setActionBreak();

                                //SprüheMarkierung
                                //SprüheMarkierung(Markers.Add(new Marker(Marker.MarkerType.HilfeObst, marker.Objekt)), MarkierungGrößeHilfeLokal);
                            }
                            else
                            {
                                Weitermachen();
                            }
                        }
                        else
                        {
                            //kein Bock, Obst aufzunehmen
                            Weitermachen();
                        }
                    }
                    else
                    {
                        Weitermachen();
                    }
                    break;

                case Marker.MarkerType.Zucker:
                    //das Gleiche wie bei siehtZucker()
                    if (!trägtNahrung && !greiftAn && !hilftFreund)
                    {
                        if (FuzzyInferenceSystem.Superdecision5x5x2(character.faulheit, character.energie, character.sammelnzucker, memory.GetDecisionValue(DecisionType.SammelnZucker)))
                        {
                            //SprüheMarkierung((int)Information.ZielNahrung, MarkierungGrößeSammler);
                            if (marker.markerInformation == Marker.MarkerInformationType.Object)
                            {
                                GeheZuZiel(marker.Objekt);
                                memory.ActionDone(DecisionType.SammelnZucker);
                                setActionBreak();
                            }
                            else
                            {
                                if (marker.markerInformation == Marker.MarkerInformationType.Richtung)
                                {
                                    if (Ziel.GetType() != typeof(Zucker))
                                    {       //wichtig, damit Ameisen, die zum Zucker gehen, nicht am Zucker vorbei gelenkt werden
                                        DreheInRichtung(marker.richtung);
                                        GeheGeradeaus();
                                        memory.ActionDone(DecisionType.SammelnZucker);
                                        setActionBreak();
                                    }
                                    else
                                    {
                                        Weitermachen();
                                    }
                                    //SprüheMarkierung
                                    //SprüheMarkierung(Markers.Add(new Marker(Marker.MarkerType.Zucker, marker.Objekt)), MarkierungGrößeInformation);
                                }
                                else
                                {
                                    Weitermachen();
                                }
                            }
                        }
                        else
                        {
                            Weitermachen();
                        }
                    }
                    else
                    {
                        //traegt Nahrung
                        Weitermachen();
                    }
                    break;

                default:
                    Weitermachen();
                    break;
                }
            }
            catch (NullReferenceException)
            {
                //wahrscheinlich ungültige Markierung
            }
        }