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
}
}