예제 #1
0
 public void setParentAnt(SmartassAnt parent)
 {
     parentAnt             = parent;
     ameisenFeindeInNaehe  = new AmeisenFeindeInNaehe(CircumstanceType.AmeisenFeindeInNähe, parentAnt);
     ameisenFreundeInNaehe = new AmeisenFreundeInNaehe(CircumstanceType.AmeisenFreundeInNähe, parentAnt);
     energie = new Energie(CircumstanceType.Energie, parentAnt);
 }
예제 #2
0
        double learneffect_wait_go_group   = 0.001; //viel kleiner, da diese Aktionen wesentlich häufiger hintereinander ausgeführt werden

        public Memory(SmartassAnt ParentAnt)
        {
            lastActions = new List <DecisionType>();

            //Nicht bei Static-Variablen!!!

            /*
             * ratingLaufen = 0.50;
             *          ratingWegrennen = 0.50;
             *          ratingAngreifenAmeise = 0.50;
             *          ratingAngreifenWanze = 0.50;
             *          ratingSammelnZucker = 0.50;
             *          ratingSammelnObst = 0.50;
             */
            this.parentAnt = ParentAnt;
        }
예제 #3
0
        private static Character InheritAnt(SmartassAnt Parent1, SmartassAnt Parent2, SmartassAnt DiedAnt)
        {
            Todesart  DeathReason        = DiedAnt.Todesart;
            Character inheritedCharacter = new Character();

            //Vereerbungsfunktion
            inheritedCharacter.faulheit.OverrideValue((Parent1.character.faulheit.Value() + Parent2.character.faulheit.Value()) / 2.0);
            inheritedCharacter.teamfaehigkeit.OverrideValue((Parent1.character.teamfaehigkeit.Value() + Parent2.character.teamfaehigkeit.Value()) / 2.0);
            inheritedCharacter.wut.OverrideValue((Parent1.character.wut.Value() + Parent2.character.wut.Value()) / 2.0);

            //Memory (inkl. Ratings vereerben?)


            //Lernen von gestorbener Ameise
            switch (DeathReason)
            {
            case Todesart.Besiegt:
                //Mehr Wut, weil das andere Ameisenvolk aggressiv ist
                inheritedCharacter.wut.OverrideValue(Math.Min(inheritedCharacter.wut.Value() + 10 * Memory.learneffect, 100.0));
                //Mehr Teamfähigkeit, weil sie im Team seltener stirbt
                inheritedCharacter.teamfaehigkeit.OverrideValue(Math.Min(inheritedCharacter.teamfaehigkeit.Value() + 10 * Memory.learneffect, 100.0));
                break;

            case Todesart.Gefressen:
                //Weniger Wut, weil das zum Tod führt
                inheritedCharacter.wut.OverrideValue(Math.Max(inheritedCharacter.wut.Value() - 10 * Memory.learneffect, 0.0));
                //Weniger Faulheit, damit sie Wanzen nicht mehr im Weg stehen bleiben
                inheritedCharacter.faulheit.OverrideValue(Math.Max(inheritedCharacter.faulheit.Value() - 10 * Memory.learneffect, 0.0));
                //Mehr Teamfähigkeit, weil sie im Team seltener stirbt
                inheritedCharacter.teamfaehigkeit.OverrideValue(Math.Min(inheritedCharacter.teamfaehigkeit.Value() + 10 * Memory.learneffect, 100.0));
                break;

            case Todesart.Verhungert:
                //Mehr Faulheit, weil sie nicht verhungern können, wenn sie stehen bleiben
                inheritedCharacter.faulheit.OverrideValue(Math.Min(inheritedCharacter.faulheit.Value() + 10 * Memory.learneffect, 100.0));
                //Weniger Teamfähigkeit, damit sie nicht mehr beim helfen verhungern kann
                inheritedCharacter.teamfaehigkeit.OverrideValue(Math.Max(inheritedCharacter.teamfaehigkeit.Value() - 10 * Memory.learneffect, 0.0));
                break;
            }

            //Mutation
            Random randBool = new Random(), randDirection = new Random(), randValue = new Random();

            //Faulheit
            if (randBool.Next(2) == 1)
            {
                if (randDirection.NextDouble() >= 0.5)
                {
                    //Wert verstärken, höchstens 15 Punkte mehr, aber nicht auf mehr als 100.0
                    inheritedCharacter.faulheit.OverrideValue(Math.Min(inheritedCharacter.faulheit.Value() + 0.15 * randValue.NextDouble() * 100, 100.0));
                }
                else
                {
                    //Wert verringern, maximal 15 Punkte weniger, aber weniger als 0.0
                    inheritedCharacter.faulheit.OverrideValue(Math.Max(inheritedCharacter.faulheit.Value() - 0.15 * randValue.NextDouble() * 100, 0.0));
                }
            }

            //Teamfähigkeit
            //Entscheiden, ob Mutation eintritt
            if (randBool.Next(2) == 1)
            {
                if (randDirection.NextDouble() >= 0.5)
                {
                    //Wert verstärken, höchstens 15 Punkte mehr, aber nicht auf mehr als 100.0
                    inheritedCharacter.teamfaehigkeit.OverrideValue(Math.Min(inheritedCharacter.teamfaehigkeit.Value() + 0.15 * randValue.NextDouble() * 100, 100.0));
                }
                else
                {
                    //Wert verringern, maximal 15 Punkte weniger, aber weniger als 0.0
                    inheritedCharacter.teamfaehigkeit.OverrideValue(Math.Max(inheritedCharacter.teamfaehigkeit.Value() - 0.15 * randValue.NextDouble() * 100, 0.0));
                }
            }

            //Wut
            if (randBool.Next(2) == 1)
            {
                if (randDirection.NextDouble() >= 0.5)
                {
                    //Wert verstärken, höchstens 15 Punkte mehr, aber nicht auf mehr als 100.0
                    inheritedCharacter.wut.OverrideValue(Math.Min(inheritedCharacter.wut.Value() + 0.15 * randValue.NextDouble() * 100, 100.0));
                }
                else
                {
                    //Wert verringern, maximal 15 Punkte weniger, aber weniger als 0.0
                    inheritedCharacter.wut.OverrideValue(Math.Max(inheritedCharacter.wut.Value() - 0.15 * randValue.NextDouble() * 100, 0.0));
                }
            }
            return(inheritedCharacter);
        }
예제 #4
0
 public static Character InheritAnt(SmartassAnt DiedAnt)
 {
     return(InheritAnt(getOldestLivingAnt(), getRandomLivingAnt(), DiedAnt));
 }