/// <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); } } }
/// <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); } } } }
/// <summary> /// Returns true if User instances are equal /// </summary> /// <param name="other">Instance of User to be compared</param> /// <returns>Boolean</returns> public bool Equals(User other) { if (other is null) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return (( Name == other.Name || Name != null && Name.Equals(other.Name) ) && ( Laufort == other.Laufort || Laufort != null && Laufort.Equals(other.Laufort) ) && ( EMail == other.EMail || EMail != null && EMail.Equals(other.EMail) ) && ( Geburtsdatum == other.Geburtsdatum || Geburtsdatum != null && Geburtsdatum.Equals(other.Geburtsdatum) ) && ( Laufniveau == other.Laufniveau || Laufniveau != null && Laufniveau.Equals(other.Laufniveau) ) && ( Ziel == other.Ziel || Ziel != null && Ziel.Equals(other.Ziel) ) && ( Profilbild == other.Profilbild || Profilbild != null && Profilbild.Equals(other.Profilbild) )); }
/// <summary> /// Gets the hash code /// </summary> /// <returns>Hash code</returns> public override int GetHashCode() { unchecked // Overflow is fine, just wrap { var hashCode = 41; // Suitable nullity checks etc, of course :) if (Name != null) { hashCode = hashCode * 59 + Name.GetHashCode(); } if (Laufort != null) { hashCode = hashCode * 59 + Laufort.GetHashCode(); } if (EMail != null) { hashCode = hashCode * 59 + EMail.GetHashCode(); } if (Geburtsdatum != null) { hashCode = hashCode * 59 + Geburtsdatum.GetHashCode(); } if (Laufniveau != null) { hashCode = hashCode * 59 + Laufniveau.GetHashCode(); } if (Ziel != null) { hashCode = hashCode * 59 + Ziel.GetHashCode(); } if (Profilbild != null) { hashCode = hashCode * 59 + Profilbild.GetHashCode(); } return(hashCode); } }
/// <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 } }