using System; using System.Collections.Generic; using AntMe.Deutsch; using System.Windows.Forms; // Füge hier hinter AntMe.Spieler einen Punkt und deinen Namen ohne Leerzeichen // ein! Zum Beispiel "AntMe.Spieler.WolfgangGallo". namespace AntMe.Spieler { // Das Spieler-Attribut erlaubt das Festlegen des Volk-Names und von Vor- // und Nachname des Spielers. Der Volk-Name muß zugewiesen werden, sonst wird // das Volk nicht gefunden. [Spieler( Volkname = "Kant", Vorname = "Paul", Nachname = "Hege" )] // Das Typ-Attribut erlaubt das Ändern der Ameisen-Eigenschaften. Um den Typ // zu aktivieren muß ein Name zugewiesen und dieser Name in der Methode // BestimmeTyp zurückgegeben werden. Das Attribut kann kopiert und mit // verschiedenen Namen mehrfach verwendet werden. // Eine genauere Beschreibung gibts in Lektion 6 des Ameisen-Tutorials. [Kaste( Name = "Sammler", GeschwindigkeitModifikator = 0, DrehgeschwindigkeitModifikator = 0, LastModifikator = 1, ReichweiteModifikator = 0, SichtweiteModifikator = 0, EnergieModifikator = 0, AngriffModifikator = -1 )] [Kaste( Name = "Kämpfer", GeschwindigkeitModifikator = 0, DrehgeschwindigkeitModifikator = 0, LastModifikator = -1, ReichweiteModifikator = 0, SichtweiteModifikator = 0, EnergieModifikator = 0, AngriffModifikator = 1 )] public class Kant : Basisameise { #region Kaste /// /// Bestimmt die Kaste einer neuen Ameise. /// /// Die Anzahl der von jeder Kaste bereits vorhandenen /// Ameisen. /// Der Name der Kaste der Ameise. public override string BestimmeKaste(Dictionary anzahl) { if (anzahl["Kämpfer"] < anzahl["Sammler"]) { return "Kämpfer"; } else { return "Sammler"; } } #endregion #region Fortbewegung static Random r = new Random(); /// /// Wird wiederholt aufgerufen, wenn der die Ameise nicht weiss wo sie /// hingehen soll. /// public override void Wartet() { GeheGeradeaus(5); } /// /// Wird einmal aufgerufen, wenn die Ameise ein Drittel ihrer maximalen /// Reichweite überschritten hat. /// public override void WirdMüde() { if (Ziel == null || Koordinate.BestimmeEntfernung(this, Ziel) > 50) { GeheZuBau(); } } #endregion #region Nahrung /// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens einen /// Zuckerhaufen sieht. /// /// Der nächstgelegene Zuckerhaufen. public override void Sieht(Zucker zucker) { if (Kaste == "Sammler" && AktuelleLast == 0) { GeheZuZiel(zucker); } } /// /// Wird wiederholt aufgerufen, wenn die Ameise mindstens ein /// Obststück sieht. /// /// Das nächstgelegene Obststück. public override void Sieht(Obst obst) { if (Kaste == "Sammler" && BrauchtNochTräger(obst) && AktuelleLast == 0) { if (GetragenesObst == null) { LasseNahrungFallen(); } GeheZuZiel(obst); } } /// /// Wird einmal aufgerufen, wenn die Ameise einen Zuckerhaufen als Ziel /// hat und bei diesem ankommt. /// /// Der Zuckerhaufen. public override void ZielErreicht(Zucker zucker) { SprüheMarkierung(0, EntfernungZuBau + 20); if (Kaste == "Sammler") { Nimm(zucker); GeheZuBau(); } } /// /// Wird einmal aufgerufen, wenn die Ameise ein Obststück als Ziel hat und /// bei diesem ankommt. /// /// Das Obststück. public override void ZielErreicht(Obst obst) { SprüheMarkierung(0, 1000); if (Kaste == "Sammler") { Nimm(obst); GeheZuBau(); } } #endregion #region Kommunikation /// /// Wird einmal aufgerufen, wenn die Ameise eine Markierung des selben /// Volkes riecht. Einmal gerochene Markierungen werden nicht erneut /// gerochen. /// /// Die nächste neue Markierung. public override void RiechtFreund(Markierung markierung) { if (markierung.Information == 0 && Kaste == "Sammler" && AktuelleLast == 0 && Ziel == null) { GeheZuZiel(markierung); } if ((markierung.Information == 1 || markierung.Information == 2) && Kaste == "Kämpfer" && Ziel == null) { GeheZuZiel(markierung); } } /// /// Wird wiederholt aufgerufen, wenn die Ameise mindstens eine Ameise des /// selben Volkes sieht. /// /// Die nächstgelegene befreundete Ameise. public override void SiehtFreund(Ameise ameise) { } /// /// Wird aufgerufen, wenn die Ameise eine befreundete Ameise eines anderen Teams trifft. /// /// public override void SiehtVerbündeten(Ameise ameise) { } #endregion #region Kampf /// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Wanze /// sieht. /// /// Die nächstgelegene Wanze. public override void SiehtFeind(Wanze wanze) { } /// /// Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Ameise eines /// anderen Volkes sieht. /// /// Die nächstgelegen feindliche Ameise. public override void SiehtFeind(Ameise ameise) { GeheZuZiel(ameise); GreifeAn(ameise); if (Koordinate.BestimmeEntfernung(ameise, this) < 10) { SprüheMarkierung(1, 250); } } /// /// Wird wiederholt aufgerufen, wenn die Ameise von einer Wanze angegriffen /// wird. /// /// Die angreifende Wanze. public override void WirdAngegriffen(Wanze wanze) { } /// /// Wird wiederholt aufgerufen in der die Ameise von einer Ameise eines /// anderen Volkes Ameise angegriffen wird. /// /// Die angreifende feindliche Ameise. public override void WirdAngegriffen(Ameise ameise) { if (Kaste == "Kämpfer") { GreifeAn(ameise); } else { SprüheMarkierung(1, 250); } } #endregion #region Sonstiges /// /// Wird einmal aufgerufen, wenn die Ameise gestorben ist. /// /// Die Todesart der Ameise public override void IstGestorben(Todesart todesart) { } /// /// Wird unabhängig von äußeren Umständen in jeder Runde aufgerufen. /// public override void Tick() { if (AktuelleLast > 0) { SprüheMarkierung(2, 50); } if (GetragenesObst != null) { GeheZuBau(); } } #endregion } }