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); }
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; }
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); }
public static Character InheritAnt(SmartassAnt DiedAnt) { return(InheritAnt(getOldestLivingAnt(), getRandomLivingAnt(), DiedAnt)); }