From b82e014bd4a7e8dd640af6801de7de44a5845b3f Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Sun, 16 Feb 2020 16:40:20 +0100 Subject: [PATCH] Initial commit --- AntMe.Player.FirstOne.dll | Bin 0 -> 12800 bytes .../.idea/contentModel.xml | 6 + .../.idea.BrainArmyAnts/.idea/modules.xml | 8 + .../.idea.BrainArmyAnts/.idea/workspace.xml | 928 ++++ .../.idea/.idea.BrainArmyAnts/riderModule.iml | 12 + BrainArmyAnts/BrainArmyAnts.csproj | 64 + BrainArmyAnts/BrainArmyAnts.csproj.user | 13 + BrainArmyAnts/BrainArmyAnts.sln | 22 + BrainArmyAnts/BrainArmyAntsKlasse - Copy.txt | 499 ++ BrainArmyAnts/BrainArmyAntsKlasse.cs | 573 ++ BrainArmyAnts/Properties/AssemblyInfo.cs | 36 + .../bin/AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 11776 bytes .../bin/AntMe.Player.BrainArmyAnts.pdb | Bin 0 -> 28160 bytes BrainArmyAnts/bin/AntMe.SharedComponents.dll | Bin 0 -> 67072 bytes BrainArmyAnts/bin/AntMe.SharedComponents.xml | 1430 +++++ BrainArmyAnts/bin/AntMe.Simulation.dll | Bin 0 -> 114688 bytes BrainArmyAnts/bin/AntMe.Simulation.xml | 4915 +++++++++++++++++ .../de/AntMe.SharedComponents.resources.dll | Bin 0 -> 5120 bytes .../bin/de/AntMe.Simulation.resources.dll | Bin 0 -> 10240 bytes ...927d0756b0b_AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 7680 bytes ...7ad681fbd5f_AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 11264 bytes ...1f462c5dfd0_AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 10240 bytes .../obj/Debug/AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 11776 bytes .../obj/Debug/AntMe.Player.BrainArmyAnts.pdb | Bin 0 -> 28160 bytes .../Debug/BrainArmyAnts.csproj.CopyComplete | 0 ...ainArmyAnts.csproj.CoreCompileInputs.cache | 1 + .../BrainArmyAnts.csproj.FileListAbsolute.txt | 12 + ...yAnts.csprojResolveAssemblyReference.cache | Bin 0 -> 13086 bytes ...6f4d869a261_AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 11264 bytes ...5be6f9e188c_AntMe.Player.BrainArmyAnts.dll | Bin 0 -> 5632 bytes 30 files changed, 8519 insertions(+) create mode 100644 AntMe.Player.FirstOne.dll create mode 100644 BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/contentModel.xml create mode 100644 BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/modules.xml create mode 100644 BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/workspace.xml create mode 100644 BrainArmyAnts/.idea/.idea.BrainArmyAnts/riderModule.iml create mode 100644 BrainArmyAnts/BrainArmyAnts.csproj create mode 100644 BrainArmyAnts/BrainArmyAnts.csproj.user create mode 100644 BrainArmyAnts/BrainArmyAnts.sln create mode 100644 BrainArmyAnts/BrainArmyAntsKlasse - Copy.txt create mode 100644 BrainArmyAnts/BrainArmyAntsKlasse.cs create mode 100644 BrainArmyAnts/Properties/AssemblyInfo.cs create mode 100644 BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.pdb create mode 100644 BrainArmyAnts/bin/AntMe.SharedComponents.dll create mode 100644 BrainArmyAnts/bin/AntMe.SharedComponents.xml create mode 100644 BrainArmyAnts/bin/AntMe.Simulation.dll create mode 100644 BrainArmyAnts/bin/AntMe.Simulation.xml create mode 100644 BrainArmyAnts/bin/de/AntMe.SharedComponents.resources.dll create mode 100644 BrainArmyAnts/bin/de/AntMe.Simulation.resources.dll create mode 100644 BrainArmyAnts/obj/Debug/0b3d7f9b-939a-426b-8baf-2927d0756b0b_AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/obj/Debug/69b1b14f-f694-4587-816a-b7ad681fbd5f_AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/obj/Debug/9ba1be31-ba78-49af-b9ab-81f462c5dfd0_AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.pdb create mode 100644 BrainArmyAnts/obj/Debug/BrainArmyAnts.csproj.CopyComplete create mode 100644 BrainArmyAnts/obj/Debug/BrainArmyAnts.csproj.CoreCompileInputs.cache create mode 100644 BrainArmyAnts/obj/Debug/BrainArmyAnts.csproj.FileListAbsolute.txt create mode 100644 BrainArmyAnts/obj/Debug/BrainArmyAnts.csprojResolveAssemblyReference.cache create mode 100644 BrainArmyAnts/obj/Debug/dc042a9a-951b-4a05-a46e-26f4d869a261_AntMe.Player.BrainArmyAnts.dll create mode 100644 BrainArmyAnts/obj/Debug/e00ea241-7837-411f-afb8-c5be6f9e188c_AntMe.Player.BrainArmyAnts.dll diff --git a/AntMe.Player.FirstOne.dll b/AntMe.Player.FirstOne.dll new file mode 100644 index 0000000000000000000000000000000000000000..04166237c79242f3a1193cebea1535d2d4bcefb8 GIT binary patch literal 12800 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 b&okA}|8>~=n{oMftDpb!zgY4A)&l + + + + + \ No newline at end of file diff --git a/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/modules.xml b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/modules.xml new file mode 100644 index 0000000..8985e74 --- /dev/null +++ b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/workspace.xml b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/workspace.xml new file mode 100644 index 0000000..f45e616 --- /dev/null +++ b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/.idea/workspace.xml @@ -0,0 +1,928 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + braucht + brauchtnoch + remove + sprühe + O + gra + gest + istge + grei + feind + bestimme + tick + sieht + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + project + + + true + + + + DIRECTORY + + false + + + + + + + + + + + + + + 1507277883927 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BrainArmyAnts/.idea/.idea.BrainArmyAnts/riderModule.iml b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/riderModule.iml new file mode 100644 index 0000000..6f60b27 --- /dev/null +++ b/BrainArmyAnts/.idea/.idea.BrainArmyAnts/riderModule.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/BrainArmyAnts/BrainArmyAnts.csproj b/BrainArmyAnts/BrainArmyAnts.csproj new file mode 100644 index 0000000..281eb0a --- /dev/null +++ b/BrainArmyAnts/BrainArmyAnts.csproj @@ -0,0 +1,64 @@ + + + + + Debug + AnyCPU + {c9150cc8-d3d1-4c58-88d4-21467cc3e5cd} + Library + Properties + AntMe.Player.BrainArmyAnts + AntMe.Player.BrainArmyAnts + v4.0 + 512 + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + x86 + + + + C:\Program Files (x86)\AntMe 1.7\AntMe.SharedComponents.dll + True + + + C:\Program Files (x86)\AntMe 1.7\AntMe.Simulation.dll + True + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BrainArmyAnts/BrainArmyAnts.csproj.user b/BrainArmyAnts/BrainArmyAnts.csproj.user new file mode 100644 index 0000000..fc4af83 --- /dev/null +++ b/BrainArmyAnts/BrainArmyAnts.csproj.user @@ -0,0 +1,13 @@ + + + + Program + C:\Program Files (x86)\AntMe 1.7\AntMe.exe + /file="D:\nextcloud\Documents\Programmierung\CSharp\BrainArmyAnts\BrainArmyAnts\bin\AntMe.Player.BrainArmyAnts.dll" + + + Program + C:\Program Files (x86)\AntMe 1.7\AntMe.exe + /file="D:\nextcloud\Documents\Programmierung\CSharp\BrainArmyAnts\BrainArmyAnts\bin\AntMe.Player.BrainArmyAnts.dll" + + \ No newline at end of file diff --git a/BrainArmyAnts/BrainArmyAnts.sln b/BrainArmyAnts/BrainArmyAnts.sln new file mode 100644 index 0000000..f429457 --- /dev/null +++ b/BrainArmyAnts/BrainArmyAnts.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{5073ec23-8de2-41a9-8111-f403901fa274}") = "BrainArmyAnts", "BrainArmyAnts.csproj", "{c9150cc8-d3d1-4c58-88d4-21467cc3e5cd}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {c9150cc8-d3d1-4c58-88d4-21467cc3e5cd}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {c9150cc8-d3d1-4c58-88d4-21467cc3e5cd}.Debug|Any CPU.Build.0 = Debug|Any CPU + {c9150cc8-d3d1-4c58-88d4-21467cc3e5cd}.Release|Any CPU.ActiveCfg = Release|Any CPU + {c9150cc8-d3d1-4c58-88d4-21467cc3e5cd}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/BrainArmyAnts/BrainArmyAntsKlasse - Copy.txt b/BrainArmyAnts/BrainArmyAntsKlasse - Copy.txt new file mode 100644 index 0000000..e47f827 --- /dev/null +++ b/BrainArmyAnts/BrainArmyAntsKlasse - Copy.txt @@ -0,0 +1,499 @@ +using AntMe.Deutsch; +using System; +using System.CodeDom; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; + +namespace AntMe.Player.BrainArmyAnts +{ + /// + /// Diese Datei enthält die Beschreibung für deine Ameise. Die einzelnen Code-Blöcke + /// (Beginnend mit "public override void") fassen zusammen, wie deine Ameise in den + /// entsprechenden Situationen reagieren soll. Welche Befehle du hier verwenden kannst, + /// findest du auf der Befehlsübersicht im Wiki (http://wiki.antme.net/de/API1:Befehlsliste). + /// + /// Wenn du etwas Unterstützung bei der Erstellung einer Ameise brauchst, findest du + /// in den AntMe!-Lektionen ein paar Schritt-für-Schritt Anleitungen. + /// (http://wiki.antme.net/de/Lektionen) + /// + [Spieler( + Volkname = "BrainArmyAnts", // Hier kannst du den Namen des Volkes festlegen + Vorname = "Sebastian", // An dieser Stelle kannst du dich als Schöpfer der Ameise eintragen + Nachname = "Seedorf" // An dieser Stelle kannst du dich als Schöpfer der Ameise eintragen + )] + + /// Kasten stellen "Berufsgruppen" innerhalb deines Ameisenvolkes dar. Du kannst hier mit + /// den Fähigkeiten einzelner Ameisen arbeiten. Wie genau das funktioniert kannst du der + /// Lektion zur Spezialisierung von Ameisen entnehmen (http://wiki.antme.net/de/Lektion7). + [Kaste( + Name = "Sammler", // Name der Berufsgruppe + AngriffModifikator = -1, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = -1, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = -1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = 2, // Laufgeschwindigkeit einer Ameise + LastModifikator = 2, // Tragkraft einer Ameise + ReichweiteModifikator = -1, // Ausdauer einer Ameise + SichtweiteModifikator = 0 // Sichtweite einer Ameise + ), + Kaste( + Name = "Erkunder", // Name der Berufsgruppe + AngriffModifikator = -1, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = -1, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = -1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = 1, // Laufgeschwindigkeit einer Ameise + LastModifikator = -1, // Tragkraft einer Ameise + ReichweiteModifikator = 1, // Ausdauer einer Ameise + SichtweiteModifikator = 2 // Sichtweite einer Ameise + ), + Kaste( + Name = "Krieger", // Name der Berufsgruppe + AngriffModifikator = 2, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = 1, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = 1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = -1, // Laufgeschwindigkeit einer Ameise + LastModifikator = -1, // Tragkraft einer Ameise + ReichweiteModifikator = -1, // Ausdauer einer Ameise + SichtweiteModifikator = -1 // Sichtweite einer Ameise + )] + + public class BrainArmyAntsKlasse : Basisameise + { + private static Bau bau = null; + private static readonly Random rand = new Random(); + private static readonly List VorkZuckers = new List(); + private static readonly List RemovedZuckers = new List(); + private static readonly List VorkObsts = new List(); + + private Spielobjekt _z; + + #region Kasten + + /// + /// Jedes mal, wenn eine neue Ameise geboren wird, muss ihre Berufsgruppe + /// bestimmt werden. Das kannst du mit Hilfe dieses Rückgabewertes dieser + /// Methode steuern. + /// Weitere Infos unter http://wiki.antme.net/de/API1:BestimmeKaste + /// + /// Anzahl Ameisen pro Kaste + /// Name der Kaste zu der die geborene Ameise gehören soll + public override string BestimmeKaste(Dictionary anzahl) + { + int count = 0; + foreach(KeyValuePair entry in anzahl) + { + count += entry.Value; + } + if (anzahl["Sammler"] > anzahl["Erkunder"] * 12) + return "Erkunder"; + + + // Gibt den Namen der betroffenen Kaste zurück. + return "Sammler"; + } + + #endregion + + #region Fortbewegung + + /// + /// Wenn die Ameise keinerlei Aufträge hat, wartet sie auf neue Aufgaben. Um dir das + /// mitzuteilen, wird diese Methode hier aufgerufen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:Wartet + /// + public override void Wartet() + { + //GeheGeradeaus(); + //SprüheMarkierung(5, 100); + } + + /// + /// Erreicht eine Ameise ein drittel ihrer Laufreichweite, wird diese Methode aufgerufen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:WirdM%C3%BCde + /// + public override void WirdMüde() + { + //GeheZuBau(); + } + + /// + /// Wenn eine Ameise stirbt, wird diese Methode aufgerufen. Man erfährt dadurch, wie + /// die Ameise gestorben ist. Die Ameise kann zu diesem Zeitpunkt aber keinerlei Aktion + /// mehr ausführen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:IstGestorben + /// + /// Art des Todes + public override void IstGestorben(Todesart todesart) + { + foreach (ObstTraeger obstTraeger in VorkObsts) + { + obstTraeger.AmeiseEntfernen(this); + } + } + + /// + /// Diese Methode wird in jeder Simulationsrunde aufgerufen - ungeachtet von zusätzlichen + /// Bedingungen. Dies eignet sich für Aktionen, die unter Bedingungen ausgeführt werden + /// sollen, die von den anderen Methoden nicht behandelt werden. + /// Weitere Infos unter http://wiki.antme.net/de/API1:Tick + /// + public override void Tick() + { + if (IstMüde) + { + SchrittBau(); + return; + } + + + + if (Kaste == "Sammler") + { + if (GetragenesObst != null && AnzahlAmeisenDerSelbenKasteInSichtweite < 10) + SprüheMarkierung(2, 250); + + + if (AktuelleLast > 0) + { + SprüheMarkierung(5, 30); + SchrittBau(); + } + else + { + _z = BestimmeZiel(); + if (_z == null) + { + GeheGeradeaus(10); + if (rand.Next(50) == 0) + DreheUmWinkel(60); + } + else + { + SchrittZiel(_z); + } + } + } + else + { + GeheGeradeaus(); + SprüheMarkierung(4, 30); + } + + + } + + #endregion + + #region Nahrung + + /// + /// Sobald eine Ameise innerhalb ihres Sichtradius einen Apfel erspäht wird + /// diese Methode aufgerufen. Als Parameter kommt das betroffene Stück Obst. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:Sieht(Obst)" + /// + /// Das gesichtete Stück Obst + public override void Sieht(Obst obst) + { + /*if (Ziel == null && BrauchtNochTräger(obst)) + SchrittZiel(obst);*/ + ObstHinzufügen(obst); + } + + /// + /// Sobald eine Ameise innerhalb ihres Sichtradius einen Zuckerhügel erspäht wird + /// diese Methode aufgerufen. Als Parameter kommt der betroffene Zuckerghügel. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:Sieht(Zucker)" + /// + /// Der gesichtete Zuckerhügel + public override void Sieht(Zucker zucker) + { + ZuckerHinzufügen(zucker); + ZuckerEntfernen(); ///////////////////////////////////////////////////// + } + + /// + /// Hat die Ameise ein Stück Obst als Ziel festgelegt, wird diese Methode aufgerufen, + /// sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + /// dem Ziel zu interagieren. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:ZielErreicht(Obst)" + /// + /// Das erreichte Stück Obst + public override void ZielErreicht(Obst obst) + { + if (Kaste == "Sammler") + { + Nimm(obst); + } + } + + /// + /// Hat die Ameise eine Zuckerhügel als Ziel festgelegt, wird diese Methode aufgerufen, + /// sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + /// dem Ziel zu interagieren. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:ZielErreicht(Zucker)" + /// + /// Der erreichte Zuckerhügel + public override void ZielErreicht(Zucker zucker) + { + if (Kaste == "Sammler") + { + Nimm(zucker); + ZuckerEntfernen(); + } + } + + #endregion + + #region Kommunikation + + /// + /// Markierungen, die von anderen Ameisen platziert werden, können von befreundeten Ameisen + /// gewittert werden. Diese Methode wird aufgerufen, wenn eine Ameise zum ersten Mal eine + /// befreundete Markierung riecht. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:RiechtFreund(Markierung)" + /// + /// Die gerochene Markierung + public override void RiechtFreund(Markierung markierung) + { + /*if ((markierung.Information & 255) == 2 && Ziel == null) // Apfel + SchrittZiel(markierung);*/ + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus dem eigenen Volk, so + /// wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFreund(Ameise)" + /// + /// Erspähte befreundete Ameise + public override void SiehtFreund(Ameise ameise) + { + + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem befreundeten Volk + /// (Völker im selben Team), so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtVerb%C3%BCndeten(Ameise)" + /// + /// Erspähte verbündete Ameise + public override void SiehtVerbündeten(Ameise ameise) + { + } + + #endregion + + #region Kampf + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem feindlichen Volk, + /// so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFeind(Ameise)" + /// + /// Erspähte feindliche Ameise + public override void SiehtFeind(Ameise ameise) + { + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Wanze, so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFeind(Wanze)" + /// + /// Erspähte Wanze + public override void SiehtFeind(Wanze wanze) + { + } + + /// + /// Es kann vorkommen, dass feindliche Lebewesen eine Ameise aktiv angreifen. Sollte + /// eine feindliche Ameise angreifen, wird diese Methode hier aufgerufen und die + /// Ameise kann entscheiden, wie sie darauf reagieren möchte. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:WirdAngegriffen(Ameise)" + /// + /// Angreifende Ameise + public override void WirdAngegriffen(Ameise ameise) + { + } + + /// + /// Es kann vorkommen, dass feindliche Lebewesen eine Ameise aktiv angreifen. Sollte + /// eine Wanze angreifen, wird diese Methode hier aufgerufen und die Ameise kann + /// entscheiden, wie sie darauf reagieren möchte. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:WirdAngegriffen(Wanze)" + /// + /// Angreifende Wanze + public override void WirdAngegriffen(Wanze wanze) + { + } + + + #endregion + + #region Eigene + + private Spielobjekt BestimmeZiel() + { + ZuckerEntfernen(); + ObstEntfernen(); + var entfernung = int.MaxValue; + + + Spielobjekt s = null; + foreach (ObstTraeger obstTraeger in VorkObsts) + { + if (obstTraeger.IstTraeger(this)) return obstTraeger.Obst; + } + foreach (var obst in VorkObsts) + { + var neu = Koordinate.BestimmeEntfernung(this, obst.Obst); + if (s != null && neu >= entfernung || neu >= Reichweite / 3 || !obst.BrauchtNochTraeger()) continue; //Ich verstehe das "z != null &&" nicht + s = obst.Obst; + entfernung = neu; + } + + foreach (var zucker in VorkZuckers) + { + var neu = Koordinate.BestimmeEntfernung(this, zucker); + if (s != null && neu >= entfernung || neu >= Reichweite / 3) continue; //Ich verstehe das "z != null &&" nicht + s = zucker; + entfernung = neu; + } + + if (s is Obst) + { + VorkObsts.Find(o => o.Obst == s).AmeiseHinzufügen(this); + } + return s; + + } + + private void SchrittZiel(Spielobjekt ziel) + { + var dist = Koordinate.BestimmeEntfernung(this, ziel); + var angle = Koordinate.BestimmeRichtung(this, ziel); + if (Math.Abs(angle-Richtung) > 10) + DreheInRichtung(angle); + DreheZuZiel(ziel); + if (dist > 2) + GeheGeradeaus(dist/3*2); + else + GeheZuZiel(ziel); + } + + private void SchrittBau() + { + if (bau == null) + { + GeheZuBau(); + bau = (Bau) Ziel; + BleibStehen(); + } + var dist = Koordinate.BestimmeEntfernung(this, bau); + var angle = Koordinate.BestimmeRichtung(this, bau); + if (Math.Abs(angle-Richtung) > 10) + DreheInRichtung(angle); + if (dist > 4) + GeheGeradeaus(dist-2); + else + GeheZuZiel(bau); + } + + private static void ZuckerHinzufügen(Zucker zucker) + { + if (zucker.Menge > 100 && !VorkZuckers.Contains(zucker) && RemovedZuckers.All(z => z != zucker.Id)) + { + VorkZuckers.Add(zucker); + } + } + + private static void ObstHinzufügen(Obst obst) + { + if (VorkObsts.All(o => o.Obst != obst)) + { + VorkObsts.Add(new ObstTraeger(obst)); + } + } + + private static void ZuckerEntfernen()//Zucker zucker + { + for (int i = 0; i < VorkZuckers.Count; ) + { + var zucker = VorkZuckers[i]; + if (zucker.Menge > 0) + { + i++; + } + else + { + if (VorkZuckers.Contains(zucker)) + { + VorkZuckers.Remove(zucker); + } + if (!RemovedZuckers.Contains(zucker.Id)) + { + RemovedZuckers.Add(zucker.Id); + } + } + } + } + + private static void ObstEntfernen() + { + for (int i = 0; i < VorkObsts.Count; ) + { + var obst = VorkObsts[i]; + if (obst.Obst.Menge > 0) + { + i++; + } + else + { + VorkObsts.Remove(obst); + } + } + } + + + #endregion + + } + + public class ObstTraeger + { + public Obst Obst; + private readonly List ameisen; + + public ObstTraeger(Obst obst) + { + Obst = obst; + ameisen = new List(); + } + + public bool BrauchtNochTraeger() + { + return ameisen.Count < 10; + } + + public void AmeiseHinzufügen(BrainArmyAntsKlasse ameise) + { + ameisen.Add(ameise); + } + + public void AmeiseEntfernen(BrainArmyAntsKlasse ameise) + { + ameisen.Remove(ameise); + } + + public bool IstTraeger(BrainArmyAntsKlasse ameise) + { + return ameisen.Contains(ameise); + } + + } + + +} diff --git a/BrainArmyAnts/BrainArmyAntsKlasse.cs b/BrainArmyAnts/BrainArmyAntsKlasse.cs new file mode 100644 index 0000000..43c6985 --- /dev/null +++ b/BrainArmyAnts/BrainArmyAntsKlasse.cs @@ -0,0 +1,573 @@ +using AntMe.Deutsch; +using System; +using System.CodeDom; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using AntMe.Simulation; + +namespace AntMe.Player.BrainArmyAnts +{ + /// + /// Diese Datei enthält die Beschreibung für deine Ameise. Die einzelnen Code-Blöcke + /// (Beginnend mit "public override void") fassen zusammen, wie deine Ameise in den + /// entsprechenden Situationen reagieren soll. Welche Befehle du hier verwenden kannst, + /// findest du auf der Befehlsübersicht im Wiki (http://wiki.antme.net/de/API1:Befehlsliste). + /// + /// Wenn du etwas Unterstützung bei der Erstellung einer Ameise brauchst, findest du + /// in den AntMe!-Lektionen ein paar Schritt-für-Schritt Anleitungen. + /// (http://wiki.antme.net/de/Lektionen) + /// + [Spieler( + Volkname = "BrainArmyAnts", // Hier kannst du den Namen des Volkes festlegen + Vorname = "Joshua Priebsch,", // An dieser Stelle kannst du dich als Schöpfer der Ameise eintragen + Nachname = "Sebastian Seedorf" // An dieser Stelle kannst du dich als Schöpfer der Ameise eintragen + )] + + /// Kasten stellen "Berufsgruppen" innerhalb deines Ameisenvolkes dar. Du kannst hier mit + /// den Fähigkeiten einzelner Ameisen arbeiten. Wie genau das funktioniert kannst du der + /// Lektion zur Spezialisierung von Ameisen entnehmen (http://wiki.antme.net/de/Lektion7). + [Kaste( + Name = "Sammler", // Name der Berufsgruppe + AngriffModifikator = -1, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = -1, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = -1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = 2, // Laufgeschwindigkeit einer Ameise + LastModifikator = 2, // Tragkraft einer Ameise + ReichweiteModifikator = -1, // Ausdauer einer Ameise + SichtweiteModifikator = 0 // Sichtweite einer Ameise + ), + Kaste( + Name = "Erkunder", // Name der Berufsgruppe + AngriffModifikator = -1, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = -1, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = -1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = 1, // Laufgeschwindigkeit einer Ameise + LastModifikator = -1, // Tragkraft einer Ameise + ReichweiteModifikator = 1, // Ausdauer einer Ameise + SichtweiteModifikator = 2 // Sichtweite einer Ameise + ), + Kaste( + Name = "Krieger", // Name der Berufsgruppe + AngriffModifikator = 2, // Angriffsstärke einer Ameise + DrehgeschwindigkeitModifikator = 0, // Drehgeschwindigkeit einer Ameise + EnergieModifikator = 1, // Lebensenergie einer Ameise + GeschwindigkeitModifikator = 0, // Laufgeschwindigkeit einer Ameise + LastModifikator = -1, // Tragkraft einer Ameise + ReichweiteModifikator = -1, // Ausdauer einer Ameise + SichtweiteModifikator = -1 // Sichtweite einer Ameise + )] + + public class BrainArmyAntsKlasse : Basisameise + { + private static Bau bau = null; + private static readonly Random rand = new Random(); + private static readonly List VorkZuckers = new List(); + private static readonly List RemovedZuckers = new List(); + private static readonly List VorkObsts = new List(); + private static readonly List VorkFeinde = new List(); + private static int GestorbeneAmeisen = 0; + private static int GetoeteteAmeisen = 0; + + private Spielobjekt _z; + private Insekt _aktuellerFeind; + + #region Kasten + + /// + /// Jedes mal, wenn eine neue Ameise geboren wird, muss ihre Berufsgruppe + /// bestimmt werden. Das kannst du mit Hilfe dieses Rückgabewertes dieser + /// Methode steuern. + /// Weitere Infos unter http://wiki.antme.net/de/API1:BestimmeKaste + /// + /// Anzahl Ameisen pro Kaste + /// Name der Kaste zu der die geborene Ameise gehören soll + public override string BestimmeKaste(Dictionary anzahl) + { + int count = 0; + foreach(KeyValuePair entry in anzahl) + { + count += entry.Value; + } + if (anzahl["Krieger"] < 6 || anzahl["Sammler"] > anzahl["Krieger"] * (GetoeteteAmeisen/(GestorbeneAmeisen+1))) + return "Krieger"; + if (anzahl["Sammler"] > anzahl["Erkunder"] * 20) + return "Erkunder"; + + + // Gibt den Namen der betroffenen Kaste zurück. + return "Sammler"; + } + + #endregion + + #region Fortbewegung + + /// + /// Wenn die Ameise keinerlei Aufträge hat, wartet sie auf neue Aufgaben. Um dir das + /// mitzuteilen, wird diese Methode hier aufgerufen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:Wartet + /// + public override void Wartet() + { + } + + /// + /// Erreicht eine Ameise ein drittel ihrer Laufreichweite, wird diese Methode aufgerufen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:WirdM%C3%BCde + /// + public override void WirdMüde() + { + } + + /// + /// Wenn eine Ameise stirbt, wird diese Methode aufgerufen. Man erfährt dadurch, wie + /// die Ameise gestorben ist. Die Ameise kann zu diesem Zeitpunkt aber keinerlei Aktion + /// mehr ausführen. + /// Weitere Infos unter http://wiki.antme.net/de/API1:IstGestorben + /// + /// Art des Todes + public override void IstGestorben(Todesart todesart) + { + foreach (ObstTraeger obstTraeger in VorkObsts) + { + obstTraeger.AmeiseEntfernen(this); + } + if (todesart == Todesart.Besiegt) + { + GestorbeneAmeisen++; + } + } + + /// + /// Diese Methode wird in jeder Simulationsrunde aufgerufen - ungeachtet von zusätzlichen + /// Bedingungen. Dies eignet sich für Aktionen, die unter Bedingungen ausgeführt werden + /// sollen, die von den anderen Methoden nicht behandelt werden. + /// Weitere Infos unter http://wiki.antme.net/de/API1:Tick + /// + public override void Tick() + { + if (ZurückgelegteStrecke*2+2 > Reichweite) + { + SchrittBau(); + return; + } + + + + if (Kaste == "Sammler") + { + if (AktuelleLast > 0) + { + SchrittBau(); + } + else + { + _z = BestimmeZiel(); + if (_z == null) + { + GeheGeradeaus(10); + if (rand.Next(50) == 0) + DreheUmWinkel(60); + } + else + { + SchrittZiel(_z); + } + } + } else if (Kaste == "Krieger") + { + //SprüheMarkierung(5, 10); + _z = BestimmeZiel(); + if (_z == null) + { + GeheGeradeaus(10); + if (rand.Next(50) == 0) + DreheUmWinkel(60); + } + else + { + SchrittZiel(_z); + } + } + else + { + GeheGeradeaus(); + //SprüheMarkierung(4, 30); + } + + + } + + #endregion + + #region Nahrung + + /// + /// Sobald eine Ameise innerhalb ihres Sichtradius einen Apfel erspäht wird + /// diese Methode aufgerufen. Als Parameter kommt das betroffene Stück Obst. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:Sieht(Obst)" + /// + /// Das gesichtete Stück Obst + public override void Sieht(Obst obst) + { + ObstHinzufügen(obst); + } + + /// + /// Sobald eine Ameise innerhalb ihres Sichtradius einen Zuckerhügel erspäht wird + /// diese Methode aufgerufen. Als Parameter kommt der betroffene Zuckerghügel. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:Sieht(Zucker)" + /// + /// Der gesichtete Zuckerhügel + public override void Sieht(Zucker zucker) + { + ZuckerHinzufügen(zucker); + ZuckerEntfernen(); + } + + /// + /// Hat die Ameise ein Stück Obst als Ziel festgelegt, wird diese Methode aufgerufen, + /// sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + /// dem Ziel zu interagieren. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:ZielErreicht(Obst)" + /// + /// Das erreichte Stück Obst + public override void ZielErreicht(Obst obst) + { + if (Kaste == "Sammler") + { + Nimm(obst); + } + } + + /// + /// Hat die Ameise eine Zuckerhügel als Ziel festgelegt, wird diese Methode aufgerufen, + /// sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + /// dem Ziel zu interagieren. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:ZielErreicht(Zucker)" + /// + /// Der erreichte Zuckerhügel + public override void ZielErreicht(Zucker zucker) + { + if (Kaste == "Sammler") + { + Nimm(zucker); + ZuckerEntfernen(); + } + } + + #endregion + + #region Kommunikation + + /// + /// Markierungen, die von anderen Ameisen platziert werden, können von befreundeten Ameisen + /// gewittert werden. Diese Methode wird aufgerufen, wenn eine Ameise zum ersten Mal eine + /// befreundete Markierung riecht. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:RiechtFreund(Markierung)" + /// + /// Die gerochene Markierung + public override void RiechtFreund(Markierung markierung) + { + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus dem eigenen Volk, so + /// wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFreund(Ameise)" + /// + /// Erspähte befreundete Ameise + public override void SiehtFreund(Ameise ameise) + { + + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem befreundeten Volk + /// (Völker im selben Team), so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtVerb%C3%BCndeten(Ameise)" + /// + /// Erspähte verbündete Ameise + public override void SiehtVerbündeten(Ameise ameise) + { + } + + #endregion + + #region Kampf + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem feindlichen Volk, + /// so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFeind(Ameise)" + /// + /// Erspähte feindliche Ameise + public override void SiehtFeind(Ameise ameise) + { + /*if (Kaste == "Sammler") + { + */FeindHinzufügen(ameise);/* + } + else */if (Kaste == "Krieger" && Koordinate.BestimmeEntfernung(this, ameise) < 4) + { + GreifeAn(ameise); + } + } + + /// + /// So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + /// andere Spielelemente. Entdeckt die Ameise eine Wanze, so wird diese Methode aufgerufen. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:SiehtFeind(Wanze)" + /// + /// Erspähte Wanze + public override void SiehtFeind(Wanze wanze) + { + } + + /// + /// Es kann vorkommen, dass feindliche Lebewesen eine Ameise aktiv angreifen. Sollte + /// eine feindliche Ameise angreifen, wird diese Methode hier aufgerufen und die + /// Ameise kann entscheiden, wie sie darauf reagieren möchte. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:WirdAngegriffen(Ameise)" + /// + /// Angreifende Ameise + public override void WirdAngegriffen(Ameise ameise) + { + } + + /// + /// Es kann vorkommen, dass feindliche Lebewesen eine Ameise aktiv angreifen. Sollte + /// eine Wanze angreifen, wird diese Methode hier aufgerufen und die Ameise kann + /// entscheiden, wie sie darauf reagieren möchte. + /// Weitere Infos unter "http://wiki.antme.net/de/API1:WirdAngegriffen(Wanze)" + /// + /// Angreifende Wanze + public override void WirdAngegriffen(Wanze wanze) + { + } + + + #endregion + + #region Eigene + + private Spielobjekt BestimmeZiel() + { + ZuckerEntfernen(); + ObstEntfernen(); + FeindEntfernen(); + var entfernung = int.MaxValue; + + + Spielobjekt s = null; + + if (Kaste == "Sammler") + { + foreach (ObstTraeger obstTraeger in VorkObsts) + { + if (obstTraeger.IstTraeger(this)) return obstTraeger.Obst; + } + foreach (var obst in VorkObsts) + { + var neu = Koordinate.BestimmeEntfernung(this, obst.Obst); + if (s != null && neu >= entfernung || neu >= Reichweite / 3 || !obst.BrauchtNochTraeger()) + continue; //Ich verstehe das "z != null &&" nicht + s = obst.Obst; + entfernung = neu; + } + + foreach (var zucker in VorkZuckers) + { + var neu = Koordinate.BestimmeEntfernung(this, zucker); + if (s != null && neu >= entfernung || neu >= Reichweite / 3) + continue; + s = zucker; + entfernung = neu; + } + + if (s is Obst) + { + VorkObsts.Find(o => o.Obst == s).AmeiseHinzufügen(this); + } + } + else if(Kaste == "Krieger") + { + if (_aktuellerFeind != null) + { + var neu = Koordinate.BestimmeEntfernung(this, _aktuellerFeind); + if (!(neu >= Reichweite / 3 && (Angriff == 0 || _aktuellerFeind.Angriff > 0 && + _aktuellerFeind.AktuelleEnergie / Angriff < + AktuelleEnergie / _aktuellerFeind.Angriff))) + return s; + } + foreach (var feind in VorkFeinde) + { + var neu = Koordinate.BestimmeEntfernung(this, feind); + if (s != null && neu >= entfernung || neu >= Reichweite / 3) + continue; + if (Angriff==0 || feind.Angriff>0 && feind.AktuelleEnergie/Angriff < AktuelleEnergie/feind.Angriff) + continue; + if (rand.Next(6)<1) + s = feind; + entfernung = neu; + } + _aktuellerFeind = (Insekt) s; + } + return s; + + } + + private void SchrittZiel(Spielobjekt ziel) + { + var dist = Koordinate.BestimmeEntfernung(this, ziel); + var angle = Koordinate.BestimmeRichtung(this, ziel); + if (Math.Abs(angle-Richtung) > 10) + DreheInRichtung(angle); + DreheZuZiel(ziel); + if (dist > 2) + GeheGeradeaus(dist/3*2); + else + GeheZuZiel(ziel); + } + + private void SchrittBau() + { + if (bau == null) + { + GeheZuBau(); + bau = (Bau) Ziel; + BleibStehen(); + } + var dist = Koordinate.BestimmeEntfernung(this, bau); + var angle = Koordinate.BestimmeRichtung(this, bau); + if (Math.Abs(angle-Richtung) > 10) + DreheInRichtung(angle); + if (dist > 4) + GeheGeradeaus(dist-2); + else + GeheZuZiel(bau); + } + + private static void ZuckerHinzufügen(Zucker zucker) + { + if (zucker.Menge > 100 && !VorkZuckers.Contains(zucker) && RemovedZuckers.All(z => z != zucker.Id)) + { + VorkZuckers.Add(zucker); + } + } + + private static void ObstHinzufügen(Obst obst) + { + if (VorkObsts.All(o => o.Obst != obst)) + { + VorkObsts.Add(new ObstTraeger(obst)); + } + } + + private static void FeindHinzufügen(Ameise feind) + { + if (feind.AktuelleEnergie > 0 && !VorkFeinde.Contains(feind)) + { + VorkFeinde.Add(feind); + } + } + + private static void ZuckerEntfernen()//Zucker zucker + { + for (int i = 0; i < VorkZuckers.Count; ) + { + var zucker = VorkZuckers[i]; + if (zucker.Menge > 0) + { + i++; + } + else + { + if (VorkZuckers.Contains(zucker)) + { + VorkZuckers.Remove(zucker); + } + if (!RemovedZuckers.Contains(zucker.Id)) + { + RemovedZuckers.Add(zucker.Id); + } + } + } + } + + private static void ObstEntfernen() + { + for (int i = 0; i < VorkObsts.Count; ) + { + var obst = VorkObsts[i]; + if (obst.Obst.Menge > 0) + { + i++; + } + else + { + VorkObsts.Remove(obst); + } + } + } + + private static void FeindEntfernen() + { + for (int i = 0; i < VorkFeinde.Count; ) + { + var feind = VorkFeinde[i]; + if (feind.AktuelleEnergie > 0) + { + i++; + } + else + { + VorkFeinde.Remove(feind); + GetoeteteAmeisen++; + } + } + } + + + #endregion + + } + + public class ObstTraeger + { + public Obst Obst; + private readonly List ameisen; + + public ObstTraeger(Obst obst) + { + Obst = obst; + ameisen = new List(); + } + + public bool BrauchtNochTraeger() + { + return ameisen.Count < 10; + } + + public void AmeiseHinzufügen(BrainArmyAntsKlasse ameise) + { + if (!IstTraeger(ameise)) + ameisen.Add(ameise); + } + + public void AmeiseEntfernen(BrainArmyAntsKlasse ameise) + { + ameisen.Remove(ameise); + } + + public bool IstTraeger(BrainArmyAntsKlasse ameise) + { + return ameisen.Contains(ameise); + } + } +} diff --git a/BrainArmyAnts/Properties/AssemblyInfo.cs b/BrainArmyAnts/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..78c9383 --- /dev/null +++ b/BrainArmyAnts/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AntMe! Player")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AntMe!")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c9150cc8-d3d1-4c58-88d4-21467cc3e5cd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.dll b/BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.dll new file mode 100644 index 0000000000000000000000000000000000000000..daa2beb08d24f6bd0dbdb8fd8f621fd370a199a5 GIT binary patch literal 11776 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 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.pdb b/BrainArmyAnts/bin/AntMe.Player.BrainArmyAnts.pdb new file mode 100644 index 0000000000000000000000000000000000000000..66aee83ba489b0656b1c888d125aaab3733a7b75 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/bin/AntMe.SharedComponents.xml b/BrainArmyAnts/bin/AntMe.SharedComponents.xml new file mode 100644 index 0000000..fb2e263 --- /dev/null +++ b/BrainArmyAnts/bin/AntMe.SharedComponents.xml @@ -0,0 +1,1430 @@ + + + + AntMe.SharedComponents + + + + + Exception for special AntMe-Exceptions. + + + + + Class, to read and decode ant-video-Streams. + + + + + Creates a new instance of reader. + + input-stream + + + + Reads a new simulation-state out of stream. + + New simulation-state or null, if stream is over + + + + Gives the current frame-position. + + + + + Gives the number of total frames. + + + + + Class, to stream some simulation state as ant-video-stream. + + + + + Creates a new instance of ant-video-writer. + + output-stream + + + + Writes a new state to the stream. + + New state + + + + Close the writer. + + + + + List of possible block-types in stream. + + + + + Holds information about an ant. + + + + + Base-class for all colony-based and index-based states. + + + + + Base-class for all index-based states + + + + + Constructor of this state. + + + + + + Compares two IndexBasedStates + + other state + compare-result + + + + Gets the id of this state. + + + + + Constructor of this state. + + colony-id + id + + + + Gets the colony-id of this state. + + + + + Constructor of ant-state + + Colony-id + id + + + + Gets or sets the id of the caste. + + + + + Gets or sets the direction. + + + + + Gets or sets the load. + + + + + Gets or sets the type of load. + + + + + Gets or sets the x-part of position. + + + + + Gets or sets the kind of target. + + + + + Gets or sets the x-part of the target position. + + + + + Gets or sets the y-part of the target position. + + + + + Gets or sets the y-part of position. + + + + + Gets or sets the vitality. + + + + + View Range + + + + + Debug Message + + + + + Interface for all updateable item-states + + + + + Calculates the next state based on the last update-information + + + + + Delivers a new update-information + + new Update + + + + Generates a new update-information based on given state + + update-information + + + + Generates a state of current states + + state + + + + Flag to mark activity + + + + + Interface for all serializable blocks. + + + + + Serializes the object into the given stream. + + output-stream + + + + De-serializes the object out of given stream. + + input-stream + + + + Holds information about an anthill. + + + + + Constructor of anthill-state + + Colony-id + id + + + + Gets or sets the x-part of position. + + + + + Gets or sets the y-part of position. + + + + + Gets or sets the radius. + + + + + Liste der Felder, die sich durch ein Update ändern könnten + + + + + Basisklasse für alle Updateblocks für ein einheitliches Speichern der veränderten Felder + + + + + Sets the given field to changed-state + + Changed field + + + + Indicates changes in given field. + + field to check + Changes in field + + + + Serializes the updateinformation into the given stream. + + outputstream + + + + Deserializes the updateinformation out of given stream. + + inputstream + + + + Gets or sets the id. + + + + + Holds information about bugs. + + + + + Constructor of bugstate. + + id + + + + Gets or sets the x-part of the position. + + + + + Gets or sets the y-part of the position. + + + + + Gets or sets the direction. + + + + + Gets or sets the vitality. + + + + + Holds the information of one colony in a simulation-state. + + + + + Constructor of colony-state + + id + + + + Constructor of colony-state + + id of this colony + guid + Name of this colony + Name of player + + + + Gets a list of ants. + + + + + Gets a list of anthills. + + + + + Gets a list of markers. + + + + + gets a list of castes. + + + + + Gets or sets the guid of the colony. + + + + + Gets or sets the name of this colony. + + + + + Gets or sets the name of the player. + + + + + Gets or sets the count of starved ants. + + + + + Gets or sets the count of eaten ants. + + + + + Gets or sets the count of beaten ants. + + + + + Gets or sets the count of killed bugs. + + + + + Gets or sets the count of killed enemies. + + + + + Gets or sets the amount of collected food. + + + + + Gets or sets the amount of collected fruits. + + + + + Gets or sets the total points. + + + + + Setzt die Updatedaten auf erwartete Werte + + + + + Repräsentiert den Zustandsblock + + + + + Holds the information of one single simulation-step + + + + + Constructor to initialize the lists. + + + + + Constructor to initialize the lists and set the basic parameters. + + width of the playground + height of the playground + the current round + the number of total rounds + + + + Constructor to initialize the lists and set the basic parameters. + + width of the playground + height of the playground + the current round + the number of total rounds + the time-stamp of this simulation-state + + + + Gets a list of bugs. + + + + + Gets a list of fruits. + + + + + Gets a list of teams. + + + + + Gets a list of sugar. + + + + + Gets the list of custom fields. + + + + + Gets or sets the time-stamp of this simulation-state. + + + + + Gets or sets the number of total rounds. + + + + + Gets or sets the number of current round. + + + + + Gets or sets the width of the playground. + + + + + Gets or sets the height of the playground. + + + + + Holds information about fruit. + + + + + Constructor of fruit-state. + + id + + + + Gets or sets the amount of fruit. + + + + + Gets or sets the x-part of the position. + + + + + Gets or sets the y-part of the position. + + + + + Gets or sets the radius. + + + + + Gets or sets the number of carrying ants. + + + + + Holds the information of a team of multiple colonies. + + + + + Constructor of team-state + + id + + + + Constructor of team-state + + id of this team + guid + Name of this team + + + + gets a list of castes. + + + + + Gets or sets the guid of the team. + + + + + Gets or sets the name of the team. + + + + + Holds information about a marker. + + + + + Constructor of marker-state. + + Colony-id + id + + + + Gets or sets the x-part of the position. + + + + + Gets or sets the y-part of the position. + + + + + Gets or sets the radius. + + + + + Gets or sets the direction. + + + + + Holds information about ant-castes + + + + + + Gets or sets the attack-modificator. + + + + + Gets or sets the load-modificator. + + + + + Gets or sets the name of this caste. + + + + + Gets or sets the range-modificator. + + + + + Gets or sets the rotation-speed-modificator. + + + + + Gets or sets the speed-modificator. + + + + + Gets or sets the view-range-modificator. + + + + + Gets or sets the vitality-modificator. + + + + + Holds information about sugar. + + + + + Constructor of sugar-state + + id + + + + Gets or sets the load of sugar. + + + + + Gets or sets the x-part of the position. + + + + + Gets or sets the y-part of the position. + + + + + Gets or sets the radius. + + + + + Possible Fields of sugarupdate + + + + + Gets or sets the absolute value of amount. + + + + + Gets or sets the absolute value for radius. + + + + + Namespace Doc zu AntVideo + + + + + Class, to manage all serialize-tasks. + + + + + Reads the next block out of stream. + + the found block + type of found block + + + + Writes the hello-header to stream. + + + + + Reads hello-header out of stream. + + + + + Writes a given block to stream. + + type of given block + block, to write + + + + Writes a given block to stream. + + type of block + + + + Reads the following byte without affect the streamposition. + + next byte + + + + Close stream. + + + + + Sendet einen ushort über den Stream + + ushort + + + + Sends a short + + short + + + + Sendet einen sbyte über den angegebenen stream + + sbyte + + + + Sendet einen integer über den Stream + + integer + + + + Sendet einen string über den Stream + + string + + + + Liest den nächsten ushort aus dem angegebenen Stream + + ausgelesener ushort + + + + Liest das nächste sbyte aus dem angegebenen Stream + + ausgelesener sbyte + + + + Liest einen Integer aus dem Stream + + gelesener int + + + + Liest einen String aus dem stream + + string + + + + Liest einen DateTime aus dem Stream aus + + DateTime + + + + This is the Namespace Documentation for AntMe.SharedComponents + + + + + Namespace Doku für Plugin + + + + + Attribute, to signal, that the marked plugin reads the custom field. + + + + + The name of the custom field. + + + + + The full name of the used type. + + + + + Optional description of usage. + + + + + Attribute, to signal, that the marked plugin writes the custom field. + + + + + The name of the custom field. + + + + + The full name of the used type. + + + + + Optional description of usage. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Abby + Abelina + Abigail + Adelaide + Adeline + Adina + Adriana + Adrienne + Afra + Agatha + Agnes + Aida + Aimee + Aischa + Ajlin + Albertine + Alea + Aleksandra + Alena + Alessa + Alessandra + Alessia + Alexa + Alexandra + Alexia + Alexis + Alice + Alicia + Alida + Alina + Aline + Alisa + Alissa + Alisson + Amabella + Amadea + Amanda + Amelia + Amelie + Amina + Amy + Ana + Anastasia + Andrea + Andrina + Anette + Angela + Angelika + Angelina + Angelique + Anina + Anine + Anita + Anja + Anjalie + Anke + Ann + Anna + Annabel + Annabell + Annabella + Annabelle + Anne + A [rest of string was truncated]";. + + + + + Looks up a localized string similar to Christoph + Dominik + Hardy + Immo + Patric + Sebastian + Stefan + Tom + Uwe + Wolfgang. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to AntVI-Stream delivered an invalid start block. Expected: FrameStart. Received: {0}.. + + + + + Looks up a localized string similar to The input stream could not be read.. + + + + + Looks up a localized string similar to The input stream has not been set.. + + + + + Looks up a localized string similar to AntVI-Stream delivered an invalid element: {0}.. + + + + + Looks up a localized string similar to The stream does not contain the AntVi-format.. + + + + + Looks up a localized string similar to The stream contains an AntVI-version that could not be processed ({0}.{1}.{2}.{3}).. + + + + + Namespace doku für States + + + + + Stellt eine Farbe im RGB-Farbraum dar. + + + Diese Struktur wurde definiert um von den in Windows Forms und Managed + DirectX definierten Farben unabhängig zu sein. Zusätzlich können Farben + durch die Verwendung dieser Struktur gemischt werden. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Der Farbe Konstruktor. + + Rot-Wert + Grün-Wert + Blau-Wert + + + + Gibt die Farbe als Zeichenkette zurück. + + (Rot,Grün,Blau) + + + + Addiert die RGB-Werte zweier Farben. + + Um zwei Farben zu mischen muß zusätzlich eine Division durchgeführt + werden: (farbe1 + farbe2) / 2. + + Farbe 1 + Farbe 2 + Farbe + + + + Multipliziert die RGB-Werte einer Farbe mit einer Zahl. + + Farbe + Zahl + Farbe + + + + Dividiert die RGB-Werte einer Farbe durch eine Zahl. + + Farbe + Zahl + Farbe + + + + Bestimmt ein Abstand-Maß zwischen zwei Farben im RGB-Farbraum. + + Wird von der Farbberater-Klasse verwendet. + + Farbe 1 + Farbe 2 + Abstand² + + + + Der Rot-Wert der Farbe. + + + + + Der Grün-Wert der Farbe. + + + + + Der Blau-Wert der Farbe. + + + + + Liefert Farben die sie möglichst stark voneinander Unterscheiden. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Markiert eine neue Farbe als bereits vorhanden. + + Neue Farbe. + + + + Entfernt eine vorhandene Farbe. + + Vorhandene Farbe. + + + + Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits + vorhandenen Farben. + + Neue Farbe. + + + + Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits + vorhandenen Farben und verändert sie leicht. + + Neue Farbe. + + + + Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits + vorhandenen Farben und markiert sie als belegt. + + Neue Farbe. + + + + Erzeugt eine neue Farbe mit möglichst großem Abstand zu den bereits + vorhandenen Farben, verändert sie leicht und markiert sie als belegt. + + Neue Farbe. + + + + Interface for all consuming plugins. + + Tom Wendel (tom@antme.net) + + + + Base-Interface for all AntMe-Plugins. + + Tom Wendel (tom@antme.net) + + + + Starts the plugin-activity or resumes activity, if paused. Only called by UI-Thread. + + + + + Stops the plugin-activity. Only called by UI-Thread. + + + + + Pauses the activity or starts and pauses, if stopped. Only called by UI-Thread. + + + + + Delivers the start-parameter from main application to this plugin. Only called by UI-Thread. + + start-parameter + + + + Sets the state of visibility of plugins user-control. Only called by UI-Thread. + + is user-control visible in main window + + + + Updates UI. Only called by UI-Thread. + + + + + Plugin-Description. Only called by UI-Thread. + + + + + Plugin-Guid. Only called by UI-Thread. + + + + + Plugin-Name. Only called by UI-Thread. + + + + + Plugin-Version. Only called by UI-Thread. + + + + + Gets the current plugin-state. Called by UI- and GameLoop-Thread. + + + + + Gets the plugin-user-control so show in main application or null, if there is no user-control. Only called by UI-Thread. + + + + + Gets or sets the settings for this plugin. usually a serialized configuration-class. Only called by UI-Thread. + + + + + Sends the empty state to push some custom fields to control the simulation. Only called by GameLoop-Thread. + + empty state + + + + Sends the filled state to push some custom fields to control the other consumers. Only called by GameLoop-Thread. + + filled state + + + + Sends the complete filled state to consume. Only called by GameLoop-Thread. + + complete state + + + + Allows a plugin to signal an interrupt. Only called by GameLoop-Thread. + + + + + Interface for all producing plugins in antme. + + Tom Wendel (tom@antme.net) + + + + Sends the filled state from consumers to the producer to put in the . Only called by GameLoop-Thread. + + filled state + + + + List of possible plugin-states. + + Tom Wendel (tom@antme.net) + + + + Indicates a not startable state. + + + + + Shows the ability to start. Also pause is a possible command. + + + + + Indicates a running plugin. Plugin can pause and stop. + + + + + Plugin is suspended. It can resume again via start or stop complete. + + + + + Holds custom Plugin-Information + + + + + Adds the specified key. + + The key. + The value. + + + + Removes the specified key. + + The key. + + + + + Removes the specified value. + + The value. + + + + + Gets a value indicating whether this instance has value. + + true if this instance has value; otherwise, false. + + + + Gets or sets the with the specified key. + + + + + + Gets a list of available keys. + + + + + List of possible loads. + + + + + No load + + + + + Sugar + + + + + Fruit + + + + + List of possible targets for an ant. + + + + + There is no target. + + + + + Target is an ant. + + + + + Target is an anthill. + + + + + Target are bugs. + + + + + Target is fruit. + + + + + Target is a marker. + + + + + Target is sugar. + + + + + Attribute to mark a plugin as important that should be selected at the + first start of AntMe. This attribute only takes effect, if there is no + configuration-file from earlier starts. + + Tom Wendel (tom@antme.net) + + + + A static helper class that returns female and male first names. + + Wolfgang Gallo (wolfgang@antme.net) + + + + An array of female first names. + + + + + An array of male first names. + + + + + Returns a female first name for a given hash value. + + + The same hash value will always return the same name within an application session. + + A value to use for hashing, for example an id. + A female first name. + + + + Returns a male first name for a given hash value. + + + The same hash value will always return the same name within an application session. + + A value to use for hashing, for example an id. + A male first name. + + + + Namespace Doku für Tools + + + + diff --git a/BrainArmyAnts/bin/AntMe.Simulation.dll b/BrainArmyAnts/bin/AntMe.Simulation.dll new file mode 100644 index 0000000000000000000000000000000000000000..132d8647b3a215a56b497e720f20257345dfa67e GIT binary patch literal 114688 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 E0UVH8sQ>@~ literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/bin/AntMe.Simulation.xml b/BrainArmyAnts/bin/AntMe.Simulation.xml new file mode 100644 index 0000000..be39ce0 --- /dev/null +++ b/BrainArmyAnts/bin/AntMe.Simulation.xml @@ -0,0 +1,4915 @@ + + + + AntMe.Simulation + + + + + Repräsentiert eine Ameise + + + + + Repräsentiert ein beliebiges Lebewesen auf dem Spielfeld + + + + + Allgemeines Spielelement + + + + + Speichert die Referenz auf das original Spielobjekt + + + + + operator == + + Vergleichsobjekt 1 + Vergleichsobjekt 2 + + + + + operator != + + Vergleichsobjekt 1 + Vergleichsobjekt 2 + + + + + Vergleicht dieses Element mit einem anderen + + Vergleichsobjekt + Haben den gleichen Inhalt + + + + Erstellt einen eindeutigen Code für dieses Objekt + + eindeutiger Code + + + + Gibt das Basiselement zurück + + + + + Liefert die eindeutige ID dieses Elements + + + + + Liefer die eindeutige ID dieses Insektes + + + + + Gibt die aktuelle Lebensenergie an + + + + + Gibt die aktuelle geschwindigkeit an + + + + + Gibt die Angriffsstärke an + + + + + Gibt die aktuelle Geschwindigkeit an + + + + + Gibt die maximale Lebensenergie an + + + + + Gibt die maximale Geschwindigkeit an + + + + + Gibt die Sichtweite an + + + + + Gibt den noch zu rotierenden Winkel an + + + + + Gibt die Ausrichtung der Ameise an + + + + + Gibt die noch zu laufende Strecke an + + + + + Liefert die aktuelle Last + + + + + Liefert einen Verweis auf das aktuell getragene Obst + + + + + Liefert die maximale Belastbarkeit der Ameise + + + + + Liefert die Reichweite der Ameise + + + + + Liefet den Volknamen dieser Ameise + + + + + Basisklasse für die Implementierung einer deutschen Ameise. Hier befinden sich + alle notwendigen Methoden, Eigenschaften und Events zur Interaktion mit der Umgebung. + Weitere Infos + + + + + Abstrakte Basisklasse für alle Ameisen. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Abstrakte Basisklasse für alle Insekten. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Ermöglicht es, die Koordinate eines Objekts auf dem Spielfeld abzufragen. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Liest die Koordinate eines Objekts auf dem Spielfeld aus. + + + + + Die Id des nächste erzeugten Insekts. + + + + + Speichert die Markierungen, die das Insekt schon gesehen hat. Das + verhindert, daß das Insekt zwischen Markierungen im Kreis läuft. + + + + + Die Id die das Insekt während eines Spiels eindeutig indentifiziert. + + + + + Die Position des Insekts auf dem Spielfeld. + + + + + Legt fest, ob das Insekt Befehle entgegen nimmt. + + + + + Der Index der Kaste des Insekts in der Kasten-Struktur des Spielers. + + + + + Das Volk zu dem das Insekts gehört. + + + + + Der abstrakte Insekt-Basiskonstruktor. + + Das Volk zu dem das neue Insekt gehört. + Hier unbenutzt! + + + + Gibt an, ob weitere Insekten benötigt werden, um ein Stück Obst zu + tragen. + + Obst + + + + + Dreht das Insekt um den angegebenen Winkel. Die maximale Drehung beträgt + -180 Grad (nach links) bzw. 180 Grad (nach rechts). Größere Werte werden + abgeschnitten. + + Winkel + + + + Dreht das Insekt in die angegebene Richtung (Grad). + + Richtung + + + + Dreht das Insekt in die Richtung des angegebenen Ziels. + + Ziel + + + + Dreht das Insekt um 180 Grad. + + + + + Lässt das Insekt unbegrenzt geradeaus gehen. + + + + + Lässt das Insekt die angegebene Entfernung in Schritten geradeaus gehen. + + Die Entfernung. + + + + Lässt das Insekt auf ein Ziel zugehen. Das Ziel darf sich bewegen. + Wenn das Ziel eine Wanze ist, wird dieser angegriffen. + + Das Ziel. + + + + Lässt das Insekt ein Ziel angreifen. Das Ziel darf sich bewegen. + In der aktuellen Version kann das Ziel nur eine Wanze sein. + + Ziel + + + + Lässt das Insekt von der aktuellen Position aus entgegen der Richtung zu + einer Quelle gehen. Wenn die Quelle ein Insekt eines anderen Volkes ist, + befindet sich das Insekt auf der Flucht. + + Die Quelle. + + + + Lässt das Insekt von der aktuellen Position aus die angegebene + Entfernung in Schritten entgegen der Richtung zu einer Quelle gehen. + Wenn die Quelle ein Insekt eines anderen Volkes ist, befindet sich das + Insekt auf der Flucht. + + Die Quelle. + Die Entfernung in Schritten. + + + + Lässt das Insekt zum nächsten Bau gehen. + + + + + Lässt das Insekt anhalten. Dabei geht sein Ziel verloren. + + + + + Lässt das Insekt Zucker von einem Zuckerhaufen nehmen. + + Zuckerhaufen + + + + Lässt das Insekt ein Obststück nehmen. + + Das Obststück. + + + + Lässt das Insekt die aktuell getragene Nahrung fallen. Das Ziel des + Insekts geht dabei verloren. + + + + + Lässt die Ameise eine Markierung sprühen. Die Markierung enthält die + angegebene Information und breitet sich um die angegebene Anzahl an + Schritten weiter aus. Je weiter sich eine Markierung ausbreitet, desto + kürzer bleibt sie aktiv. + + Die Information. + Die Ausbreitung in Schritten. + + + + Lässt die Ameise eine Markierung sprühen. Die Markierung enthält die + angegebene Information und breitet sich nicht aus. So hat die Markierung + die maximale Lebensdauer. + + Die Information. + + + + Berechnet die Bewegung des Insekts. + + + + + Die aktuelle Geschwindigkeit des Insekts in der internen Einheit. + + + + + Die Kaste des Insekts. + + + + + Die Anzahl von Wanzen in Sichtweite des Insekts. + + + + + Die Anzahl feindlicher Ameisen in Sichtweite des Insekts. + + + + + Die Anzahl befreundeter Ameisen in Sichtweite des Insekts. + + + + + Die Anzahl befreundeter Ameisen der selben Kaste in Sichtweite des + Insekts. + + + + + Anzahl Ameisen aus befreundeten Völkern in sichtweite des Insekts. + + + + + Die Richtung in die das Insekt gedreht ist. + + + + + Die Strecke die die Ameise zurückgelegt hat, seit sie das letzte Mal in + einem Ameisenbau war. + + + + + Die Strecke die die Ameise zurückgelegt hat, seit sie das letzte Mal in + einem Ameisenbau war in der internen Einheit. + + + + + Die Strecke die das Insekt geradeaus gehen wird, bevor das nächste Mal + Wartet() aufgerufen wird bzw. das Insekt sich zu seinem Ziel ausrichtet. + + + + + Die Strecke die das Insekt geradeaus gehen wird, bevor das nächste + Mal Wartet() aufgerufen wird bzw. das Insekt sich zu seinem Ziel + ausrichtet in der internen Einheit. + + + + + Der Winkel um den das Insekt sich noch drehen muß, bevor es wieder + geradeaus gehen kann. + + + + + Das Ziel auf das das Insekt zugeht. + + + + + Liefert die Entfernung in Schritten zum nächsten Ameisenbau. + + + + + Gibt das Obst zurück, das das Insekt gerade trägt. + + + + + Gibt zurück on das Insekt bei seinem Ziel angekommen ist. + + + + + Die Position des Insekts auf dem Spielfeld. + + + + + Die aktuelle Geschwindigkeit des Insekts in Schritten. Wenn das Insekt + seine maximale Last trägt, halbiert sich seine Geschwindigkeit. + + + + + Die maximale Geschwindigkeit des Insekts. + + + + + Die Drehgeschwindigkeit des Insekts in Grad pro Runde. + + + + + Die Last die die Ameise gerade trägt. + + + + + Die maximale Last die das Insekt tragen kann. + + + + + Die Sichtweite des Insekts in Schritten. + + + + + Die Sichtweite des Insekts in der internen Einheit. + + + + + Die Reichweite des Insekts in Schritten. + + + + + Die Reichweite des Insekts in der internen Einheit. + + + + + Die verbleibende Energie des Insekts. + + + + + Die maximale Energie des Insetks. + + + + + Die Angriffstärke des Insekts. Wenn das Insekt Last trägt ist die + Angriffstärke gleich Null. + + + + + Bestimmt die Kaste einer neuen Ameise. + + Die Anzahl der von jeder Klaste bereits vorhandenen Ameisen. + Der Name der Kaste der Ameise. + + + + Erzeugt ein AmeiseZustand-Objekt mit den aktuellen Daten der Ameise. + + + + + Wird wiederholt aufgerufen, wenn der die Ameise nicht weiss wo sie + hingehen soll. + + + + + Wird einmal aufgerufen, wenn die Ameise ein Drittel ihrer maximalen + Reichweite überschritten hat. + + + + + Wird wiederholt aufgerufen, wenn die Ameise mindestens einen + Zuckerhaufen sieht. + + Der nächstgelegene Zuckerhaufen. + + + + Wird wiederholt aufgerufen, wenn die Ameise mindstens ein + Obststück sieht. + + Das nächstgelegene Obststück. + + + + Wird einmal aufgerufen, wenn die Ameise einen Zuckerhaufen als Ziel + hat und bei diesem ankommt. + + Der Zuckerhaufen. + + + + Wird einmal aufgerufen, wenn die Ameise ein Obststück als Ziel hat und + bei diesem ankommt. + + Das Obstück. + + + + Wird einmal aufgerufen, wenn die Ameise eine Markierung des selben + Volkes riecht. Einmal gerochene Markierungen werden nicht erneut + gerochen. + + Die nächste neue Markierung. + + + + Wird wiederholt aufgerufen, wenn die Ameise mindstens eine Ameise des + selben Volkes sieht. + + Die nächstgelegene befreundete Ameise. + + + + Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Ameise verbündeter + Völker sieht. + + + + + + Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Wanze + sieht. + + Die nächstgelegene Wanze. + + + + Wird wiederholt aufgerufen, wenn die Ameise mindestens eine Ameise eines + anderen Volkes sieht. + + Die nächstgelegen feindliche Ameise. + + + + Wird wiederholt aufgerufen, wenn die Ameise von einer Wanze angegriffen + wird. + + Die angreifende Wanze. + + + + Wird wiederholt aufgerufen in der die Ameise von einer Ameise eines + anderen Volkes Ameise angegriffen wird. + + Die angreifende feindliche Ameise. + + + + Wird einmal aufgerufen, wenn die Ameise gestorben ist. + + Die Todesart der Ameise + + + + Wird unabhängig von äußeren Umständen in jeder Runde aufgerufen. + + + + + Gibt an, ob die Ameise müde ist. + + + + + Jedes mal, wenn eine neue Ameise geboren wird, muss ihre Berufsgruppe + bestimmt werden. Das kannst du mit Hilfe dieses Rückgabewertes dieser + Methode steuern. + Weitere Infos + + Anzahl Ameisen pro Kaste + Name der Kaste zu der die geborene Ameise gehören soll + + + + Wenn eine Ameise stirbt, wird diese Methode aufgerufen. Man erfährt dadurch, wie + die Ameise gestorben ist. Die Ameise kann zu diesem Zeitpunkt aber keinerlei Aktion + mehr ausführen. + Weitere Infos + + Art des Todes + + + + Markierungen, die von anderen Ameisen platziert werden, können von befreundeten Ameisen + gewittert werden. Diese Methode wird aufgerufen, wenn eine Ameise zum ersten Mal eine + befreundete Markierung riecht. + Weitere Infos + + Die gerochene Markierung + + + + Sobald eine Ameise innerhalb ihres Sichtradius einen Apfel erspäht wird + diese Methode aufgerufen. Als Parameter kommt das betroffene Stück Obst. + Weitere Infos + + Das gesichtete Stück Obst + + + + Sobald eine Ameise innerhalb ihres Sichtradius einen Zuckerhügel erspäht wird + diese Methode aufgerufen. Als Parameter kommt der betroffene Zuckerghügel. + Weitere Infos + + Der gesichtete Zuckerhügel + + + + So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem feindlichen Volk, + so wird diese Methode aufgerufen. + Weitere Infos + + Erspähte feindliche Ameise + + + + So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + andere Spielelemente. Entdeckt die Ameise eine Wanze, so wird diese Methode aufgerufen. + Weitere Infos + + Erspähte Wanze + + + + So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + andere Spielelemente. Entdeckt die Ameise eine Ameise aus dem eigenen Volk, so + wird diese Methode aufgerufen. + Weitere Infos + + Erspähte befreundete Ameise + + + + So wie Ameisen unterschiedliche Nahrungsmittel erspähen können, entdecken Sie auch + andere Spielelemente. Entdeckt die Ameise eine Ameise aus einem befreundeten Volk + (Völker im selben Team), so wird diese Methode aufgerufen. + Weitere Infos + + Erspähte verbündete Ameise + + + + Diese Methode wird in jeder Simulationsrunde aufgerufen - ungeachtet von zusätzlichen + Bedingungen. Dies eignet sich für Aktionen, die unter Bedingungen ausgeführt werden + sollen, die von den anderen Methoden nicht behandelt werden. + Weitere Infos + + + + + Wenn die Ameise keinerlei Aufträge hat, wartet sie auf neue Aufgaben. Um dir das + mitzuteilen, wird diese Methode hier aufgerufen. + Weitere Infos + + + + + + Es kann vorkommen, dass feindliche Lebewesen eine Ameise aktiv angreifen. Sollte + eine Wanze angreifen, wird diese Methode hier aufgerufen und die Ameise kann + entscheiden, wie sie darauf reagieren möchte. + Weitere Infos + + Angreifende Wanze + + + + Erreicht eine Ameise ein drittel ihrer Laufreichweite, wird diese Methode aufgerufen. + Weitere Infos + + + + + Hat die Ameise ein Stück Obst als Ziel festgelegt, wird diese Methode aufgerufen, + sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + dem Ziel zu interagieren. + Weitere Infos + + Das erreichte Stück Obst + + + + Hat die Ameise eine Zuckerhügel als Ziel festgelegt, wird diese Methode aufgerufen, + sobald die Ameise ihr Ziel erreicht hat. Ab jetzt ist die Ameise nahe genug um mit + dem Ziel zu interagieren. + Weitere Infos + + Der erreichte Zuckerhügel + + + + Die Ameise dreht sich in die angegebene Richtung. Die Drehrichtung wird + dabei automatisch bestimmt. + Weitere Infos + + Zielrichtung + + + + Die Ameise dreht sich um den angegebenen Winkel. Positive Werte drehen + die Ameise nach rechts, negative nach links. + Weitere Infos + + Winkel + + + + Die Ameise dreht sich um 180 Grad in die entgegengesetzte Richtung. Hat + die selbe Wirkung wie DreheUmWinkel(180). + Weitere Infos + + + + + Die Ameise dreht sich in die Richtung des angegebenen Ziels. + Weitere Infos + + Anvisiertes Ziel + + + + Die Ameise bleibt stehen und vergisst ihr aktuelles Ziel. In der nächsten + Runde wird das Ereignis Wartet() aufgerufen werden. + Weitere Infos + + + + + Die Ameise geht geradeaus. Das Ziel der Ameise bleibt unangetastet. Wenn + ein Wert angegeben wird, wird die Ameise wieder ihr Ziel anvisieren, + nachdem sie die angegebene Entfernung zurückgelegt hat. + Weitere Infos + + + + + Die Ameise geht geradeaus. Das Ziel der Ameise bleibt unangetastet. Wenn + ein Wert angegeben wird, wird die Ameise wieder ihr Ziel anvisieren, + nachdem sie die angegebene Entfernung zurückgelegt hat. + Weitere Infos + + Zu laufende Strecke in Ameisenschritten + + + + Die Ameise dreht sich in die Richtung die vom angegebenen Ziel weg zeigt + und geht dann geradeaus. Das Ziel der Ameise bleibt unangetastet und es + kann eine Entfernung angegeben werden. + Weitere Infos + + Objekt, vor dem weggegangen werden soll + + + + Die Ameise dreht sich in die Richtung die vom angegebenen Ziel weg zeigt + und geht dann geradeaus. Das Ziel der Ameise bleibt unangetastet und es + kann eine Entfernung angegeben werden. + Weitere Infos + + Objekt, vor dem weggegangen werden soll + Entfernung, die zurückgelegt werden soll + + + + Die Ameise speichert das angegebene Ziel und geht dort hin. + Weitere Infos + + Ziel + + + + Die Ameise speichert den nächstgelegenen Bau als Ziel und geht dort hin. + Weitere Infos + + + + + Die Ameise speichert die angegebene Wanze oder die angegebene feindliche + Ameise als Ziel und geht dort hin. Wenn die Ameise angekommen ist, + beginnt der Kampf. + Weitere Infos + + Angriffsziel + + + + Die Ameise nimmt die angegebene Nahrung auf. Bei einem Zuckerhaufen nimmt + sie so viel wie möglich weg, bis sie ihre maximale Last erreicht hat + (siehe und ). + Im Falle eines Obststückes beginnt die Ameise das Obst zu tragen + (siehe ). + Weitere Infos + + Nahrung + + + + Die Ameise lässt die gerade getragene Nahrung fallen. Zucker geht dabei + verloren, Äpfel bleiben liegen und können wieder aufgenommen werden. Der + Befehl muss nicht ausgeführt werden um Nahrung im Bau abzuliefern. Das + passiert dort automatisch. + Weitere Infos + + + + + Die Ameise sprüht an der aktuellen Stelle eine Duftmarkierung. Mögliche + Parameter sind eine in der Markierung hinterlegte Information (diese kann im + Ereignis Sieht(Markierung) über "markierung.Information" ausgelesen werden) und + die Ausbreitung der Markierung. Je größer die Ausbreitung, desto schneller + verschwindet die Markierung wieder. + Weitere Infos + + Information + + + + Die Ameise sprüht an der aktuellen Stelle eine Duftmarkierung. Mögliche Parameter + sind eine in der Markierung hinterlegte Information (diese kann im Ereignis + Sieht(Markierung) über markierung.Information ausgelesen werden) und die Ausbreitung + der Markierung. Je größer die Ausbreitung, desto schneller verschwindet die + Markierung wieder. + Weitere Infos + + Information + Größe der Markierung in Ameisenschritten + + + + Mit Hilfe dieses Befehls gibt die Ameise Denkblasen aus, die zur Fehlersuche + eingesetzt werden können. + Weitere Infos + + Nachricht + + + + Ermittelt ob das angegebene Obst noch mehr Ameisen zum Tragen benötigt. + Weitere Infos + + zu prüfendes Obst + Braucht noch Träger + + + + Gibt die maximale Energie der Ameise an. Die Einheit ist Lebenspunkte. + Weitere Infos + + + + + Gibt die maximale Geschwindigkeit der Ameise an. Die Einheit ist Schritte pro Runde. + Weitere Infos + + + + + Gibt die maximal tragbare Last der Ameise an. Die Einheit ist Nahrungspunkte. + Dieser Wert bestimmt, wie viel Zucker die Ameise auf einmal tragen kann und + wie schnell sie ohne die Hilfe anderer Ameisen einen Apfel tragen kann. + Weitere Infos + + + + + Gibt die Reichweite in Schritten an die die Ameise zurücklegen kann, bevor sie + vor Hunger stirbt. Nachdem die Ameise ein Drittel dieser Strecke zurückgelegt hat, + wird das Ereignis WirdMüde() aufgerufen und der Wert von IstMüde auf wahr gesetzt. + Siehe ZurückgelegteStrecke. + Weitere Infos + + + + + Gibt den Angriffswert der Ameise an. Der Angriffswert bestimmt wie viele + Lebenspunkte die Ameise einem Gegner in jeder Runde abzieht. Die Einheit + ist Lebenspunkte. + Weitere Infos + + + + + Gibt den Wahrnehmungsradius der Ameise in Schritten an. Dieser Radius bestimmt + wie weit die Ameise von Spielelementen wie z.B. Zucker entfernt sein muss damit + die Ameise sie sieht. Die Blickrichtung der Ameise spielt dabei keine Rolle. + Weitere Infos + + + + + Gibt die Geschwindigkeit an mit der sich eine Ameise drehen kann. Die Einheit + ist Grad pro Runde. + Weitere Infos + + + + + Gibt die aktuelle Energie der Ameise an. Die Einheit ist Lebenspunkte. Hat die + Ameise 0 Lebenspunkte oder weniger, dann stirbt sie. Dieser Wert ist immer + kleiner oder gleich MaximaleEnergie. + Weitere Infos + + + + + Gibt die aktuell mögliche Geschwindigkeit der Ameise an. Die Einheit ist Schritte + pro Runde. Der Wert wird von der aktuellen Last der Ameise beeinflusst. Ameisen + die unter voller Last bewegt werden, können nur die Hälfte ihrer + Maximalgeschwindigkeit erreichen. Diese Eigenschaft liefert immer einen Wert + größer 0 zurück, auch wenn die Ameise still steht. Dieser Wert ist immer kleiner + oder gleich MaximaleGeschwindigkeit. + Weitere Infos + + + + + Gibt die aktuelle Last an, die die Ameise gerade trägt. Die Einheit ist Nahrungspunkte. + Dieser Wert ist immer kleiner oder gleich MaximaleLast. + Weitere Infos + + + + + Gibt die Anzahl der Ameisen desselben Volkes des im Wahrnehmungsradius der Ameise zurück. + Das Ergebnis dieser Berechnung ist von der Sichtweite der Ameise abhängig. + Weitere Infos + + + + + Gibt die Anzahl der befreundeten Ameisen desselben Volkes und derselben Kaste im + Wahrnehmungsradius der Ameise zurück. Das Ergebnis dieser Berechnung ist von der + Sichtweite der Ameise abhängig. + Weitere Infos + + + + + Gibt die Anzahl der befreundeten Ameisen desselben Teams im Wahrnehmungsradius der Ameise zurück. + Das Ergebnis dieser Berechnung ist von der Sichtweite der Ameise abhängig. + Weitere Infos + + + + + Gibt die Anzahl der feindlichen Ameisen im Wahrnehmungsradius der Ameise zurück. + Das Ergebnis dieser Berechnung ist von der Sichtweite der Ameise abhängig. + Weitere Infos + + + + + Gibt die Anzahl der Wanzen im Wahrnehmungsradius der Ameise zurück. Das Ergebnis + dieser Berechnung ist von der Sichtweite der Ameise abhängig. + Weitere Infos + + + + + Gibt die Entfernung in Schritten zum nächstgelegenen befreundeten Ameisenbau an. + Weitere Infos + + + + + Gibt das aktuell getragene Obststück zurück. Wenn die Ameise gerade kein Obst + trägt, zeigt dieser Verweis ins Leere. + Weitere Infos + + + + + Gibt des Namen der Kaste der Ameise zurück. + Weitere Infos + + + + + Gibt das aktuelle Ziel der Ameise zurück. Wenn die Ameise gerade + kein Ziel hat, zeigt dieser Verweis ins Leere. + Weitere Infos + + + + + Gibt an ob die Ameise müde ist. Die Ameise wird müde, sobald sie ein + Drittel ihrer maximalen Reichweite zurückgelegt hat. Nach dem Übergang + des Wertes dieser Eigenschaft von falsch auf wahr wird das Ereignis + WirdMüde() aufgerufen. + Weitere Infos + + + + + Gibt an wie viele Schritte die Ameise noch geradeaus gehen wird, bevor + sie wieder ihr Ziel anvisiert. Dieser Wert wird in jeder Runde um + AktuelleGeschwindigkeit verringert. + Weitere Infos + + + + + Gibt an wie viele Grad die Ameise sich noch drehen wird, bevor sie wieder + geradeaus gehen wird. Dieser Wert wird in jeder Runde um DrehGeschwindigkeit + verringert. + Weitere Infos + + + + + Gibt die Blickrichtung der Ameise in Grad auf dem Spielfeld an. 0 ist dabei + rechts (Osten) und der Winkel öffnet sich im Uhrzeigersinn. 90 ist daher + unten (Süden), 180 rechts (Westen) und 270 oben. + Weitere Infos + + + + + Gibt an ob die Ameise an ihrem Ziel angekommen ist. + Weitere Infos + + + + + Diese Eigenschaft gibt die Gesamtanzahl an Schritten zurück die die Ameise + seit ihrem letzten Besuch in einem Ameisenbau zurückgelegt hat. Siehe Reichweite + Weitere Infos + + + + + Repräsentiert einen Ameisenbau + + + + + Liefert die ID dieses Baus + + + + + Attribut zur Anfrage von Dateizugriffen. + + + + + Attribut, um Zugriffsrechte anzufordern. + + + + + Beschreibung zur Verwendung der erteilten Zugriffsrechte. + + + + + Attribut zur Anfrage von Zugriffen auf Datenbanken. + + + + + Attribut zur Anfrage von Zugriff auf Fensterelemente. + + + + + Attribut für die Beschreibung von verschiedenen Ameisenkasten + + + + + Legt die Angriffsstärke der Ameise fest + + + + + Legt die Drehgeschwindigkeit der Ameise fest + + + + + Legt die Energie einer Ameise fest + + + + + Legt die Bewegungsgeschwindigkeit einer Ameise fest + + + + + Legt die Belastbarkeit einer Ameise fest + + + + + Legt den Namen der Ameisenkaste fest + + + + + Legt die Reichweite einer Ameise fest + + + + + Legt die Sichtweite einer Ameise fest + + + + + Hilfsklasse für Entfernungs- und Richtungsberechnungen + + + + + Bestimmt die Entfernung zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Schritten + + + + Bestimmt die Entfernung zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Schritten + + + + Bestimmt die Entfernung zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Schritten + + + + Bestimmt die Entfernung zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Schritten + + + + Ermittelt den Richtungsunterscheid zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Gradschritten + + + + Ermittelt den Richtungsunterscheid zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Gradschritten + + + + Ermittelt den Richtungsunterscheid zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Gradschritten + + + + Ermittelt den Richtungsunterscheid zwischen zwei Spielelementen + + Element 1 + Element 2 + Entfernung in Gradschritten + + + + Repräsentiert eine Markierung + + + + + Liefert die eindeutige ID dieser Markeriung + + + + + Liefert die Information aus der Markierung + + + + + Basisklasse für alle Nahrungsmittel auf dem Spielfeld + + + + + Liefert die Menge an Nahrung + + + + + Liefer die ID dieser Nahrung + + + + + Dieser Namespace enthält alle notwendigen Klassen und Attribute für die Erstellung einer Ameise in deutscher Sprache. + + + + + Attribut zur Anfrage von Netzwerkzugriff. + + + + + Repräsentiert einen Apfel + + + + + Attribut für die spielerrelevanten Angaben zum Volk + + + + + Name des Volkes (Angabe erforderlich) + + + + + Nachname des Spielers + + + + + Vorname des Spielers + + + + + Liste möglicher Todesursachen + + + + + Ameise verhungert + + + + + Ameise wurde von Wanze gefressen + + + + + Ameise wurde von feindlichen Ameisen besiegt + + + + + Repräsentant eines Volkes + + + + + Liefert den Namen des Volkes + + + + + Repräsentiert eine Wanze + + + + + Repräsentiert einen Zuckerberg + + + + + Hilfsklasse zur Generierung von Zufallszahlen + + + + + Generiert eine Zufallszahl zwischen 0 und dem angegebenen Maximum + + Maximum + Zufallszahl + + + + Generiert eine Zufallszahl zwischen dem angegebenen Minimum und dem angegebenen Maximum + + Minumum + Maximum + Zufallszahl + + + + Baseattribute for all access-requesting attributes. + + + + + Short description of what the ant will do with the requested rights. + + + + + Represents a foreign ant + + + + + Its the interface for all lifeforms on playground + + + + + Baseclass for all items on playground + + + + + Saves the reference to the original simulation-object + + + + + Delivers a unique code for that item + + unique Code + + + + Vergleich zwischen zwei Objekten + + Vergleichsobjekt + beide meinen das gleiche Element + + + + operator == + + + + + + + + operator != + + + + + + + + Delivers the base-item + + + + + Gives the unique ID of this item + + + + + Returns the unique ID of this insect + + + + + Delivers the current energy of this ant + + + + + Delivers the current speed + + + + + Delivers the strength + + + + + Delivers the rotationspeed + + + + + delivers the maximum energy + + + + + delivers the maximum speed + + + + + delivers the viewrange + + + + + delivers the degrees to rotate + + + + + delivers the direction + + + + + delivers the distance to go + + + + + Delivers the current load of this ant. + + + + + delivers the current carried fruit. + + + + + Delivers the maximum load. + + + + + Delivers the range. + + + + + Delivers the Colony-Name. + + + + + Represents an anthill + + + + + Delivers the unique ID of this anthill + + + + + Baseclass for implementing english Ants. + Read more + + + + + Every time that a new ant is born, its job group must be set. You can do + so with the help of the value returned by this method. + Read more + + Number of ants for every caste + Caste-Name for the next ant + + + + This method is called if an ant dies. It informs you that the ant has + died. The ant cannot undertake any more actions from that point forward. + Read more + + Kind of Death + + + + Friendly ants can detect markers left by other ants. This method is + called when an ant smells a friendly marker for the first time. + Read more + + Marker + + + + This method is called as soon as an ant sees an apple within its + 360° visual range. The parameter is the piece of fruit that the + ant has spotted. + Read more + + spotted fruit + + + + This method is called as soon as an ant sees a mound of sugar in + its 360° visual range. The parameter is the mound of sugar that + the ant has spotted. + Read more + + spotted sugar + + + + Just as ants can see various types of food, they can also visually + detect other game elements. This method is called if the ant detects + an ant from an enemy colony. + Read more + + spotted ant + + + + Just as ants can see various types of food, they can also visually + detect other game elements. This method is called if the ant sees + a bug. + Read more + + spotted bug + + + + Just as ants can see various types of food, they can also visually + detect other game elements. This method is called if the ant sees an + ant from the same colony. + Read more + + spotted ant + + + + Just as ants can see various types of food, they can also visually + detect other game elements. This method is called if the ant detects + an ant from a friendly colony (an ant on the same team). + Read more + + spotted ant + + + + This method is called in every simulation round, regardless of additional + conditions. It is ideal for actions that must be executed but that are not + addressed by other methods. + Read more + + + + + If the ant has no assigned tasks, it waits for new tasks. This method + is called to inform you that it is waiting. + Read more + + + + + Enemy creatures may actively attack the ant. This method is called if an + enemy ant attacks. the ant can then decide how to react. + Read more + + attacking ant + + + + Enemy creatures may actively attack the ant. This method is called if a + bug attacks. the ant can decide how to react. + Read more + + attacking bug + + + + This method is called when an ant has travelled one third of its movement range. + Read more + + + + + If the ant’s destination is a piece of fruit, this method is called as soon + as the ant reaches its destination. It means that the ant is now near enough + to its destination/target to interact with it. + Read more + + reached fruit + + + + If the ant’s destination is a mound of sugar, this method is called as soon + as the ant has reached its destination. It means that the ant is now near + enough to its destination/target to interact with it. + Read more + + reached sugar + + + + The ant turns in the specified direction. The angle around which it + turns is determined automatically. + Read more + + direction + + + + The ant turns itself around the specified angle. Positive values turn + the ant to the right, negative values turn it to the left. + Read more + + degrees + + + + The ant turns 180 degrees in the opposite direction. Has the same effect + as TurnByDegrees(180). + Read more + + + + + The ant turns in the direction of the specified destination. + Read more + + item + + + + The ant stands still and forgets its current destination. In the next + round the result of Waiting() is called. + Read more + + + + + The ant moves forward. The ant’s destination remains unaltered. If a + value is specified, the ant will aim for its destination again as soon + as it has travelled the specified distance. + Read more + + + + + The ant moves forward. The ant’s destination remains unaltered. If a + value is specified, the ant will aim for its destination again as soon + as it has travelled the specified distance. + Read more + + steps + + + + The ant turns in the direction opposite the specified destination and + then walks straight ahead. The ant’s destination remains unaltered and + the walking distance can be specified. + Read more + + item + + + + The ant turns in the direction opposite the specified destination and + then walks straight ahead. The ant’s destination remains unaltered and + the walking distance can be specified. + Read more + + item + steps + + + + The ant saves the specified destination and walks to it. + Read more + + destination + + + + The ant saves the nearest anthill as its destination and walks towards it. + Read more + + + + + The ant saves the specified bug or the specified enemy ant as its + destination and walks toward it. When the ant arrives at its destination, + it begins to fight. + Read more + + target + + + + The ant picks up the specified food. In the case of a mound of sugar, + it takes as much as possible until it reaches its maximum load (see + CurrentLoad and MaximumLoad). In the case of a piece of fruit, the ant + begins carrying the fruit (see CarryingFruit). + Read more + + food + + + + The ant drops the food that it is currently carrying. Sugar is lost while + apples remain where they fall and can be picked up again later. The command + is not necessary when delivering food to an anthill—that occurs automatically. + Read more + + + + + The ant sprays a scent marker at the current location. The possible + parameters are data contained in the marker (these can be read out of the + result of Spots(Marker) via marker.Information) and how far the maker + spreads out. The farther the marker spreads out, the faster it will disappear. + Read more + + information + + + + The ant sprays a scent marker at the current location. The possible parameters + are data contained in the marker (these can be read out of the result of + Spots(Marker) via marker.Information) and how far the maker spreads out. + The farther the marker spreads out, the faster it will disappear. + Read more + + information + range + + + + This command causes the ant to display thought bubbles that can be used for + troubleshooting and debugging. + Read more + + message + + + + Evaluates if the specified fruit needs more ants to carry it. + Read more + + fruit + more ants required + + + + Returns the ant’s maximum energy. The unit is hit points. + Read more + + + + + Returns the ant’s maximum speed. The unit is steps per round. + Read more + + + + + Returns the maximum load that the ant can bear. The unit is food points. + This value determines how much sugar the ant can carry at once and how + fast it can carry an apple without the help of other ants. + Read more + + + + + Specifies the distance in steps that the ant can travel before it dies of + hunger. After the ant has travelled a third of the value, the event + GettingTired() is called and the value of IsTired is set to "true". (See WalkedRange). + Read more + + + + + Specifies the ant’s attack value. The attack value determines how + many hit points the ant deducts from an enemy in each round. The + unit is hit points. + Read more + + + + + Specifies the ant’s visual range in steps. This range determines how + far the ant must be from game elements like sugar in order for the ant + to see them. The direction that the ant is facing does not play a role + (ants have 360 vision in this game). + Read more + + + + + Specifies the speed with which an ant can turn. The unit is degrees per + round. + Read more + + + + + Returns the ant’s current energy. The unit is hit points. If an ant has 0 + hit points or fewer, it dies. This value is always less than or equal to + MaximumEnergy. + Read more + + + + + Returns the ant’s current possible speed. The unit is steps per round. The + value is influenced by the ant’s current load. Ants that are carrying a full + load can only travel at half of their maximum speed. The property always + returns a value greater than 0, even if the ant is standing still. This value + is always less than or equal to MaximumSpeed. + Read more + + + + + Returns the weight of the load that the ant is currently carrying. The unit + is food points. This value is always smaller than or equal to MaximumLoad. + Read more + + + + + Returns the number of friendly ants from the same colony in the ant’s 360° visual + range. The result of the calculation depends on the ant’s visual range. + Read more + + + + + Returns the number of friendly ants from the same colony and the same caste in + the ant’s 360° visual range. The result of this calculation depends on the ant’s + visual range. + Read more + + + + + Returns the number of friendly ants from the same team in the ant’s 360° visual + range. The result of this calculation depends on the ant’s visual range. + Read more + + + + + Returns the number of enemy ants in the ant’s 360° visual range. The result of + this calculation depends on the ant’s visual range. + Read more + + + + + Returns the number of bugs in the ant’s 360° visual range. The result of this + calculation depends on the ant’s visual range. + Read more + + + + + Returns the distance in steps to the nearest friendly anthill. + Read more + + + + + Returns the piece of fruit the ant is currently carrying. If the ant is not + carrying a piece of fruit, the value returned is null. + Read more + + + + + Returns the name of the ant's caste. + Read more + + + + + Returns the ant's current destination. If the ant currently has no + destination, the value returned is null. + Read more + + + + + Returns whether the ant is tired. The ant becomes tired as soon + as it has travelled a third of its maximum range. Once this value + has been exceeded, this property changes from false to true and + the event GettingTired() is called. + Read more + + + + + Returns how many steps forward the ant must go before it reaches + its destination. This value is reduced each round by CurrentSpeed. + Read more + + + + + Returns how many degrees the ant still has to turn before it moves + forward again. This value is reduced each round by RotationSpeed. + Read more + + + + + Returns the direction that the ant is facing on the map. + Read more + + + + + Returns whether the ant has reached its destination or not. + Read more + + + + + This property returns the total number of steps that the ant has + travelled since its last visit to an anthill. See Range. + Read more + + + + + Represents a bug + + + + + Attribute to descripe the different professions of ants + + + + + The Attackstrength + + + + + Hitpoints + + + + + Load + + + + + name + + + + + range + + + + + Rotationspeed + + + + + Spped + + + + + viewrange + + + + + Helper-class to calculate with distances and angles + + + + + Gives the distance between the to given objects + + object 1 + object 2 + Distance between + + + + Gives the distance between the to given objects + + object 1 + object 2 + Distance between + + + + Gives the distance between the to given objects + + object 1 + object 2 + Distance between + + + + Gives the distance between the to given objects + + object 1 + object 2 + Distance between + + + + Gives the direction from object 1 to object 2 + + object 1 + object 2 + direction + + + + Gives the direction from object 1 to object 2 + + object 1 + object 2 + direction + + + + Gives the direction from object 1 to object 2 + + object 1 + object 2 + direction + + + + Gives the direction from object 1 to object 2 + + object 1 + object 2 + direction + + + + Represents the Colony + + + + + Delivers the Name of that colony + + + + + Attribute to request access to database. + + + + + Attribute to request fileaccess. + + + + + Its the interface for all kind of food + + + + + Returns the amount of food + + + + + Delivers the unique Id of this food + + + + + Represents Fruit + + + + + List of possible kinds of death + + + + + The ant was running out of food + + + + + The ant was eaten up by a bug + + + + + The ant was killed by a foreign ant + + + + + Represents a marker + + + + + Gives the information saved in that mark + + + + + Delivers the unique ID of this marker + + + + + Namespace Doc für English + + + + + Attribute to request access to network. + + + + + Attribute to descripe an ant + + + + + First name of the player + + + + + Name of the colony + + + + + Last name of the player + + + + + Helper-class to generate some random numbers + + + + + Gives a random number between 0 and the given maximum + + maximum + random number + + + + Gives a random number between the given minimum and the given maximum + + minimum + maximum + random number + + + + Represents a sugarhill + + + + + Attribute to request access to the userinterface. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Standard. + + + + + Looks up a localized string similar to Attempt to cheat with a fake Framework assembly.. + + + + + Looks up a localized string similar to External reference:. + + + + + Looks up a localized string similar to This ant was likely created with a newer version of AntMe!.. + + + + + Looks up a localized string similar to The file does not contain a class with this name.. + + + + + Looks up a localized string similar to The ant class that was found ({0}) is not decorated with a PlayerAttribute.. + + + + + Looks up a localized string similar to Ants of version 1.1 or lower are not supported in this version anymore.. + + + + + Looks up a localized string similar to Attempting to load an earlier ant simulation core (version: {0}) failed.. + + + + + Looks up a localized string similar to The ant class {0} containas more than one PlayerAttribute.. + + + + + Looks up a localized string similar to The external reference '{0}' could not be loaded.. + + + + + Looks up a localized string similar to The ant could not be assigned a version. {0}. + + + + + Looks up a localized string similar to The attack-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The energy-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The load-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The caste-attribute of ant {0} does not contain a name.. + + + + + Looks up a localized string similar to The reach-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The rotationspeed-modificator of caste {0} of ant {1}is invalid.. + + + + + Looks up a localized string similar to The speed-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The sum of modificators of caste {0} of player {1} are invalid.. + + + + + Looks up a localized string similar to The viewrange-modificator of caste {0} of ant {1} is invalid.. + + + + + Looks up a localized string similar to The desired caste for the new ant '{0}' doesn't exist.. + + + + + Looks up a localized string similar to The loop count cannot be greater than {0}.. + + + + + Looks up a localized string similar to The minimum loop count is 1.. + + + + + Looks up a localized string similar to The timeout value for a loop cannot be less than 1.. + + + + + Looks up a localized string similar to At least one team must be selected for the simulation.. + + + + + Looks up a localized string similar to The round count must not exceed {0}.. + + + + + Looks up a localized string similar to The minimum round count is 1.. + + + + + Looks up a localized string similar to The timeout value for a round cannot be less than 1.. + + + + + Looks up a localized string similar to The parameter configuration must not be null.. + + + + + Looks up a localized string similar to The environment has not yet been initialized.. + + + + + Looks up a localized string similar to The timeout for a round has been exceeded.. + + + + + Looks up a localized string similar to The configuration may only contain PlayerInfoFileName or PlayerInfoFileDump.. + + + + + Looks up a localized string similar to It's not possible to create marker with size smaller than 0. + + + + + Looks up a localized string similar to The PlayerAttribute of class {0} does not contain a name.. + + + + + Looks up a localized string similar to The simulation has already been unloaded.. + + + + + Looks up a localized string similar to The configuration may only contain PlayerInfoFileName or PlayerInfoFileDump.. + + + + + Looks up a localized string similar to There are no rights to grand database-access to various colonies.. + + + + + Looks up a localized string similar to There are no rights to grand file-access to various colonies.. + + + + + Looks up a localized string similar to There are no rights to grand network-access to various colonies.. + + + + + Looks up a localized string similar to There are no rights to grand userinterface-access to various colonies.. + + + + + Looks up a localized string similar to The index of the caste column is too large.. + + + + + Looks up a localized string similar to The index of the caste column is too small.. + + + + + Looks up a localized string similar to Cannot call Step() on a simulation that has already completed.. + + + + + Looks up a localized string similar to The list of players of a team may not be empty.. + + + + + Exception for implementation-Problems in player-ai-files. + + + + + KOnstruktor der Regelverletzung ohne weitere Angaben + + + + + Konsruktor der Regelverletzung mit der Übergabe einer Beschreibung zur Verletzung + + Beschreibung der Regelverletzung + + + + Konstruktor zur Regelverletung mit übergabe einer Nachricht sowie einer verursachenden Exception + + Beschreibung zum Problem + Verursachende Exception + + + + Konstruktor für die Serialisierung dieser Exception + + + + + + + Holds the caste-information. + + + + + Der Angriffmodifikator der Kaste. + + + + + Der Drehgeschwindigkeitmodifikator der Kaste. + + + + + Der Energiemodifikator der Kaste. + + + + + Der Geschwindigkeitmodifikator der Kaste. + + + + + Der Lastmodifikator der Kaste. + + + + + Der Name der Kaste. + + + + + Der Reichweitenmodifikator der Kaste. + + + + + Der Sichtweitenmodifikator der Kaste. + + + + + Prüft, ob diese Ameisenkaste den Regeln entspricht + + RuleViolationException + + + + Gibt an, ob es sich bei dieser Ameisenkaste um die Standard-Kaste handelt + + Standardwert + + + + Erzeugt ein CasteState-Objekt. + + + + + + Host-Class for Ai-Analysis to host the analyze-core inside application-domains. + + + + + Type of baseAnt from core. + + + + + Holds all thrown exceptions. + + + + + List of all Ant-BaseClasses in every known language. + + + + + Sets special simulation-settings. + + special settings + + + + Searches in the given file for possible PlayerInfos and delivers a list of found Players. + + Ai-File as binary file-dump. + True, if Analyzer should also check player-rules + List of found players. + + + + Analyzes the given for any kind of valid player-information. + + given assembly. + true, if the Analyser should also check player-rules + List of valid players. + + + + List of thrown Exceptions.s + + + + + Ein Bau eines Ameisenvolkes. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Die Id die den Bau während eines Spiels eindeutig identifiziert. + + + + + Erzeugt eine neue Instanz der Bau-Klasse. + X-Koordinate + Y.Koordinate + Radius + Volk ID + + + + + Erzeugt ein BauZustand-Objekt mit den aktuellen Daten des Bau. + + + + + Die Position des Bau auf dem Spielfeld. + + + + + Implementiert ein Zellrasterverfahren zum schnellen Auffinden von + Spielelementen auf dem Spielfeld. + + + Ein Spielelement wird unabhängig von seinem Radius in genau eine Zelle + einsortiert. Spielelemente "zwei Zellen weiter" werden daher auch dann + nicht gefunden, wenn sie (durch ihren Radius) eigentlich nahe genug + am Referenzelement liegen. + + Typ der Spielelemente. + Wolfgang Gallo (wolfgang@antme.net) + + + + Erzeugt ein Gitter mit den angegebenen Maßen oder gibt ein vorhandenes + Gitter mit diesem Maßen zurück. + + Breite des Gitters. + Höhe des Gitters. + Seitenlänge einer Gitterzelle. Bestimmt die + maximale Entfernung bis zu der ein Spielelement ein anderes sehen kann. + + + + Erzeugt eine neue Instanz der Klasse. + + Die Maße des Gitters. + + + + Erzeugt einen neue Instanz der Klasse. + + Breite des Gitters. + Höhe des Gitters. + Seitenlänge einer Gitterzelle. Bestimmt die + maximale Entfernung bis zu der ein Spielelement ein anderes sehen kann. + + + + Fügt dem Gitter mehrere Spielelemente hinzu. + + Eine Liste von Spielelementen. + + + + Entfernt mehrere Elemente aus dem Gitter. + + Eine Liste von Spielelementen. + + + + Findet alle Spielelemente innerhalb des gegebenen Sichtkreis des gegebenen Spielelements. + + Das Referenzspielelement. + Die maximale Entfernung. + Eine nach Entfernung sortierte Liste von Spielelementen. + + + + Findet alle Spielelemente innerhalb des Sichtkreis der gegebenen Wanze. + + + Die Simulation legt ein Gitter mit der maximalen Sichtweite der Wanzen als + Seitenlänge an und benutzt diese Methode auf dieser Instanz zum Finden von + Ameisen. In dieses Gitter werden nur Ameisen einsortiert. + + Die Referenzwanze. + Eine Liste von Ameisen. + + + + Findet die Markierung, die die gegebene Ameise noch nicht gerochen hat + und die der Ameise am nächsten liegt. + + + Die Simulation legt ein Gitter mit dem maximalen Radius einer Markierung als + Seitenlänge an und benutzt diese Methode auf dieser Instanz zum Finden von + Markierungen. In dieses Gitter werden nur Markierungen einsortiert. + + Die Referenzameise. + Eine Markierung. + + + + Findet die Wanze, die feindliche Ameise und die befreundete Ameise mit der + geringsten Entfernung innerhalb des Sichtkreis der gegebenen Ameise und + zählt die Anzahl an Wanzen, feindlichen und befreundeten Ameisen im Sichtkreis. + + + Wird für Ameisen verwendet. Die Simulation legt für jeden vorkommenden Sichtradius + eine eigenes Gitter an und benutzt diese Methode auf der passenden Instanz zum Finden + von Insekten. Die Seitenlänge dieses Gitters ist also der Sichradius der Ameise. + In diese Gitter werden Wanzen und Ameisen einsortiert. + + Die Referenzameise. + Eine Wanze. + Die Anzahl an Wanzen. + Eine feindliche Ameise. + Die Anzahl an feindlichen Ameisen. + Eine befreundete Ameise. + Die Anzahl an befreundeten Ameisen. + Die Anzahl an befreundeten Ameisen der selben Kaste. + + + + Speichert die Abmessungen eines Gitters. + + + + + Die Breite des Gitters. + + + + + Die Höhe des Gitters. + + + + + Die Seitenlänge einer Gitterzelle. + + + + + Erzeugt eine neue Instanz der Struktur. + + Die Breite des Gitters. + Die Höhe des Gitters. + Die Seitenlänge einer Gitterzelle. + + + + Represents fruit. + + + + + Die abstrakte Basisklasse für Nahrung. + + + + + Die Id die die Nahrung während eines Spiels eindeutig identifiziert. + + + + + Die Position der Nahrung auf dem Spielfeld. + + + + + Die verbleibende Menge an Nahrungspunkten. + + + + + Der abstrakte Nahrung-Basiskonstruktor. + + Die X-Position der Koordinate auf dem Spielfeld. + Die Y-Position der Koordinate auf dem Spielfeld. + Die Anzahl der Nahrungspunkte. + + + + Die verbleibende Menge an Nahrungspunkten. + + + + + Die Position der Nahrung auf dem Spielfeld. + + + + + Liste der tragenden Ameisen. + + + + + Erzeugt eine neue Instanz der Obst-Klasse. + + Die X-Position des Obststücks auf dem Spielfeld. + Die Y-Position des Obststücks auf dem Spielfeld. + Die Anzahl an Nahrungspunkten. + + + + Bestimmt, ob das Stück Obst für das angegebene Volk noch tragende + Insekten benötigt, um die maximale Geschwindigkeit beim Tragen zu + erreichen. + + Das Volk. + + + + Erzeugt ein ObstZustand-Objekt mit dem Daten Zustand des Obststücks. + + + + + Die verbleibende Menge an Nahrungspunkten. + + + + + Beschreibt wie eine Ameise gestorben ist. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Gibt an, dass die Ameise verhungert ist. + + + + + Gibt an, dass die Ameise von einer Wanze gefressen wurde. + + + + + Gibt an, dass die Ameise von einer feindlichen Ameise besiegt wurde. + + + + + Represents a sugar-Hill. + + + + + Creates an instance of CoreSugar. + + The x-position of sugar on playground. + The y-position of sugar on playground. + The amount of food. + + + + Creates a sugar-state of this sugar-hill. + + current state of that sugar-hill. + + + + Klasse zur Weiterleitung von Debug-Information mit Kontextinformationen + + + + + Konstruktor einer Debugnachricht + + ID des spielers + ID der Ameise + Nachricht + + + + Zeitpunkt der Nachricht + + + + + Assoziierter Spieler + + + + + ID der betroffenen Ameise + + + + + Die Debugnachricht + + + + + List of possible areas + + + + + Event-Arguments for a AreaChange-Event + + + + + Creates a new AreaChangeEventArgs to unknown area. + + + + + Creates a new AreaChangeEventArgs to given area and player. + + player + area + + + + Gets the player. + + + + + Gets the area. + + + + + Delegate for area-changes. + + sending simulation-environment + arguments for event + + + + Namespace Doc für Simulation + + + + + Wird bei einer Regelverletzung der AntMe-Spielregeln geworfen + + + + + KOnstruktor der Regelverletzung ohne weitere Angaben + + + + + Konsruktor der Regelverletzung mit der Übergabe einer Beschreibung zur Verletzung + + Beschreibung der Regelverletzung + + + + Konstruktor zur Regelverletung mit übergabe einer Nachricht sowie einer verursachenden Exception + + Beschreibung zum Problem + Verursachende Exception + + + + Konstruktor für die Serialisierung dieser Exception + + + + + + + Class, to extract PlayerInfos from given Ai-Assembly. + + Tom Wendel (tom@antme.net) + + + + Analyzes a Ai-File based on filename. + + Ai-File to analyze. + List of found PlayerInfos + + + + + + + + + + + + + + + + Analyzes a Ai-File based on filename. + + Ai-File to analyze. + True, if Analyser should also check player-rules. + List of found PlayerInfos + + + + + + + + + + + + + + + + Analyzes a Ai-File based on binary file-dump. + + Ai-File to analyze. + List of found PlayerInfos + + + + + + + + + Analyzes a Ai-File based on binary file-dump. + + Ai-File to analyze. + True, if Analyser should also check player-rules. + List of found PlayerInfos + + + + + + + + + Find a specific Player-information in given Ai-File. + + File as binary file-dump + Class-name of Ai + the right + + + + + Find a specific in given Ai-File. + + File as filename + Class-name of Ai + the right or null for no hits + + + + Die Position eines Objekts auf dem Spielfeld. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Erzeugt eine neue Instanz der Koordinate-Struktur. + + Der X-Wert des Elementes. + Der Y-Wert des Elementes. + Der Radius des Elementes. + Die Richtung in die das Element blickt. + + + + Erzeugt eine neue Instanz der Koordinate-Struktur. + + Der X-Wert des Elementes. + Der Y-Wert des Elementes. + Der Radius des Elementes. + + + + Erzeugt eine neue Instanz der Koordinate-Struktur. + + Der X-Wert des Elementes. + Der Y-Wert des Elementes. + + + + Erzeugt eine neue Instanz der Koordinate-Struktur ausgehend von einer + bestehenden Koordinate. + + Die bestehende Koordinate. + Der X-Wert relativ zu der Koordinate. + Der Y-Wert relativ zu der Koordinate. + + + + Bestimmt die Entfernung zweier Objekte auf dem Spielfeld in Schritten. + + Objekt 1. + Objekt 2. + Die Entfernung. + + + + Bestimmt die Richtung von einem Objekt auf dem Spielfeld zu einem + anderen. + + Das Start Objekt. + Das Ziel Objekt. + Die Richtung. + + + + Bestimmt die Entfernung zweier Koordinaten auf dem Spielfeld in der + internen Einheit. + + Koordinate 1. + Koordinate 2. + Die Entfernung. + + + + Bestimmt die Entfernung zweier Koordinaten auf dem Spielfeld in der + internen Einheit ohne Beachtung der Radien. + + Koordinate 1. + Koordinate 2. + Die Entfernung. + + + + Bestimmt die Richtung von einer Koordinate auf dem Spielfeld zu einer + anderen. + + Die Start Koordinate. + Die Ziel Koordinate. + Die Richtung. + + + + Der X-Wert des Elements. + + + + + Der Y-Wert des Elements. + + + + + Der Radius des Elementes. Da alle Berechnungen in der Spiel (z.B. + die Bestimmung von Entfernungen) auf Punkten und Kreisen basiert, wird + auch der Radius eines Objektes in der IKoordinate Struktur gespeichert. + + + + + Die Richtung in die das Element blickt. Eine Richtung ist zwar kein + echter Teil einer Koordinate und nicht alle Elemente die eine Koordinate + haben benötigen die Richtung, aber die IKoordinate-Struktur ist der + beste Platz um auch die Richtung eines Objektes zu speichern. + + + + + Eine Duft-Markierung die eine Information enthält. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Die Id die die Markierung während eines Spiels eindeutig identifiziert. + + + + + Erzeugt eine neue Instanz der Markierung-Klasse. + + Die Koordinate der Markierung. + Die Ausbreitung der Markierung in Schritten. + + ID des Volkes + + + + Erhöht das Alter der Markierung und passt ihren Radius an. + + + + + Erzeugt ein MarkierungZustand-Objekt mit den aktuellen Daten der + Markierung. + + + + + Die gespeicherte Information. + + + + + Bestimmt ob die Markierung ihre maximales Alter noch nicht überschritten + hat. + + + + + Die Position der Markierung auf dem Spielfeld. + + + + + List of possible versions of simulation. + + + + + Version 1.1 - Singleplayer-Variante + + + + + Version 1.5 - war nur als Beta verfügbar und stellt die erste Multiplayer-Variante dar + + + + + Version 1.6 - die Basis für die erste Online-Version + + + + + fx 4.0 Port of Version 1.6 + + + + + Version 2.0 - Bisher nicht vorhanden + + + + + Holds the set of caste-Settings. + + + + + Offset to shift the array-index. + + + + + Sum of all points. + + + + + List of caste-setting-columns. + + + + + Checks the value-ranges of all properties. + + + + + Gives the lowest Column-Index. + + + + + Gives the highest Column-Index. + + + + + Delivers the right caste-column. + + index of column + caste-Column + + + + Holds a set of caste-Settings in one column. + + + + + Minimum attack-value + + + + + Maximum attack-value + + + + + Minimum rotationspeed + + + + + Maximum rotationspeed + + + + + Minimum rotationspeed + + + + + Maximum rotationspeed + + + + + Minimum rotationspeed + + + + + Maximum rotationspeed + + + + + Minimum load + + + + + Maximum load + + + + + Minimum range + + + + + Maximum range + + + + + Minimum viewrange + + + + + Maximum viewrange + + + + + Attack-Value (Hit-points per Round) + + + + + Rotation-speed (Degrees per Round) + + + + + Hit-points-Value (Total points) + + + + + Speed-Value (Steps per Round) + + + + + Load-Value (total food-load) + + + + + Range-Value (total count of steps per life) + + + + + View-range-Value (range in steps) + + + + + Checks, if values are valid + + + + + Simulation-Settings from application-configuration. + + + + + Sets or gets the name of this settings-set. + + + + + Gets or sets Guid of that settings-set. + + + + + Gets the size of the playground in SquareAntSteps. + + + + + Gets the multiplier of additional playground-size per player. + + + + + Gets the radius of anthills. + + + + + Minimum Battle-Distance in steps between two insects. + + + + + Gets the maximum count of ants simultaneous on playground. + + + + + Gets the maximum count of bugs simultaneous on playground. + + + + + Gets the maximum count of sugar simultaneous on playground. + + + + + Gets the maximum count of fruit simultaneous on playground. + + + + + Gets the multiplier for maximum count of bugs simultaneous on playground per player. + + + + + Gets the multiplier for maximum count of sugar simultaneous on playground per player. + + + + + Gets the multiplier for maximum count of fruit simultaneous on playground per player. + + + + + Gets the multiplier for maximum count of ants simultaneous on playground per player. + + + + + Gets the maximum count of ants in the whole simulation. + + + + + Gets the maximum count of bugs in the whole simulation. + + + + + Gets the maximum count of sugar in the whole simulation. + + + + + Gets the maximum count of fruit in the whole simulation. + + + + + Gets the multiplier for maximum count of ants per player in the whole simulation. + + + + + Gets the multiplier for maximum count of bugs per player in the whole simulation. + + + + + Gets the multiplier for maximum count of sugar per player in the whole simulation. + + + + + Gets the multiplier for maximum count of fruit per player in the whole simulation. + + + + + Gets the delay for ant before next respawn in rounds. + + + + + Gets the delay for bugs before next respawn in rounds. + + + + + Gets the delay for sugar before next respawn in rounds. + + + + + Gets the delay for fruits before next respawn in rounds. + + + + + Gets the attack-value of bugs. + + + + + Gets the rotation speed of bugs. + + + + + Gets the energy of bugs. + + + + + Gets the speed of bugs. + + + + + Gets the attack-range of bugs. + + + + + Gets the regeneration-value of bugs. + + + + + Gets the delay in rounds between the regeneration-steps of bugs. + + + + + Gets the minimal amount of food in sugar-hills. + + + + + Gets the maximum amount of food in sugar-hills. + + + + + Gets the minimal amount of food in fruits. + + + + + Gets the maximum amount of food in fruits. + + + + + Gets the multiplier for fruits between load and amount of food. + + + + + Gets the multiplier for fruits between radius and amount of food. + + + + + Gets the minimal size of a marker. + + + + + Gets the minimal allowed distance between to marker. + + + + + Gets the maximum age in rounds of a marker. + + + + + Multiplier for the calculation from food to points. + + + + + Gets the amount of points for collected fruits. + + + + + Gets the amount of points for killed bugs. + + + + + Gets the amount of points for killed foreign ants. + + + + + Gets the amount of points for own dead ants killed by bugs. + + + + + Gets the amount of points for own dead ants killed by foreign ants. + + + + + Gets the amount of points for own dead starved ants. + + + + + Gives the caste-Settings. + + + + + Sets a custom set of settings. + + custom settings + + + + Resets the values to the default settings. + + + + + Checks the value-ranges of all properties. + + + + + Saves the settings to a setting-file. + + settings to save + filename of target file + + + + Loads settings from a setting-file. + + filename of target file + Loaded settings + + + + Gives the name of the settings. + + Name of Settings + + + + Checks, if two different simulation-sets are equal. + + + + + + + Generates a Hash-Code for that object. + + Hash-Code + + + + Gets the default settings. + + + + + Gives the current simulation-settings + + + + + Gets the maximal Speed of an insect. + + + + + Gets the maximal size of a marker. + + + + + Gets the maximal size of a marker (without radius) + + + + + Represents a complete encapsulated simulation-core. + + Tom Wendel (tom@antme.net) + + + + Creates an Instance of simulator. Should be called only from factory. + + configuration + + + + Calculates the next step and deliver through parameter. + + empty + + + + Disposes open resources. + + + + + Disposes open resources. + + + + + Unloads simulator. + + + + + Gets the current simulator-state. + + + + + Gets the current round of simulation. + + + + + Gets the current loop of simulation. + + + + + Gets the number of ticks the last round was running. + + + + + Gets the total number of ticks the current Loop is running. + + + + + Gets the total number of ticks the current simulator is working. + + + + + Gets a the total time of ticks a player needed in the last round. + + + + + Gets the total number of ticks a player needed in the whole loop till now. + + + + + Class, to host an simulation-Environment inside an . + + + + + Initialize the simulation-environment. + + configuration + + + + Executes one single step in simulation and returns hostState. + + Summery of the executed simulationStep + + + + Internal step-Method to calculate the next step + + + + + Gets the last thrown exception. + + + + + Statusklasse zur Weitergabe des aktuellen Spielstandes aus dem Host zurück zum Simulator + + Tom Wendel (tom@antme.net) + + + + Klasse zur Haltung aller relevanten Konfigurationsdaten einer Simulation. + + + + + Maximum count of players per Simulation. + + + + + Minimum count of rounds for a valid simulation. + + + + + Maximum count of rounds for a valid simulation. + + + + + Minimum count of loops for a valid simulation. + + + + + + Maximum count of loops for a valid simulation. + + + + + Minimum value for round-timeouts. + + + + + Minimum value for loop-timeouts. + + + + + Timeout-Handling + + + + + Initialisiert eine leere Spielerliste + + + + + Initialsiert mit den übergebenen Werten + + Anzahl Durchläufe + Anzahl Runden + Teamliste + + + + Ermittelt, ob die Angaben der Konfiguration simulationsfähig sind + + Regelkonformer Konfigurationsinhalt + + + + Erstellt eine Kopie der Konfiguration + + Kopie der aktuellen Konfiguration + + + + Gibt die Anzahl der Runden insgesamt an, die in der Simulation durchlaufen werden sollen oder legt diese fest. + + + + + Gibt die Anzahl Durchläufe insgesamt an, die in der Simulation durchlaufen werden sollen oder legt diese fest. + + + + + Legt fest, ob die Simulation zu debugzwecken Timeouts ignorieren soll. + + + + + Legt die Timeout-Zeit von Runden in ms fest + + + + + Legt die Timeout-Zeit von Durchläufen in ms fest + + + + + Liefert die Liste der Mitspieler in dieser Simulation. + + + + + Legt fest, ob es den Spielern erlaubt ist auf das Userinterface zuzugreifen + + + + + Legt fest, ob es den Spielern erlaubt ist auf das Dateisystem zuzugreifen + + + + + Legt fest, ob es den Spielern erlaubt ist auf fremde Bibliotheken zuzugreifen + + + + + Legt fest, ob es den Spielern erlaubt ist Datenbankverbindungen zu öffnen + + + + + Legt fest, ob es den Spielern erlaubt ist eine Netzwerkverbindung zu öffnen + + + + + Gibt an, ob die Simulation Debuginformationen ausgeben soll + + + + + Gibt einen Startwert für die Initialisierung des Zufallsgenerators an. Durch einen gleichen + Startwert werden gleiche Startbedingungen garantiert. + + + + + Gets or sets the simulation-settings for this simulation. + + + + + Proxy-Class to host an AppDomain für the encapsulated simulation. + + Tom Wendel (tom@antme.net) + + + + Appdomain to host the simulation in. + + + + + Proxy for the simulationHost inside the appDomain. + + + + + Initialisierung der Simulation + + Simulationskonfiguration + + + + Executes one single step in simulation and returns hostState. + + The prefilled simulationState to put the currrent simulation-Snapshot in. + Summery of the executed simulationStep. + + + + Unloads the appdomain, if needed and reset the proxy. + + + + + Liste der möglichen Stati eines Simulators + + + + + Der Simulator ist initialisiert, aber noch nicht gestartet worden + + + + + Der Simulator simuliert gerade + + + + + Die Simulation wurde beendet + + + + + Static Class to encapsulate player-calls to his ant. + + + + + Creates a static instance of PlayerCall + + + + + Perform call to "Waits()" on given ant. + + ant + + + + Perform call to "BecomesTired()" on given ant. + + ant + + + + Perform call to "Spots(Sugar)" on given ant. + + ant + sugar + + + + Perform call to "Spots(Fruit)" on given ant. + + ant + fruit + + + + Perform call to "TargetReached(Sugar)" on given ant. + + ant + sugar + + + + Perform call to "TargetReached(Fruit)" on given ant. + + ant + fruit + + + + Perform call to "SmellsFriend()" on given ant. + + ant + marker + + + + Perform call to "SpotsFriend()" on given ant. + + ant + friendly ant + + + + Perform call to "SpotsTeamMember()" on given ant. + + ant + friendly ant + + + + Perform call to "Spots(Bug)" on given ant. + + ant + bug + + + + Perform call to "Spots(Ant)" on given ant. + + ant + foreign ant + + + + Perform call to "UnderAttack(Ant)" on given ant. + + ant + enemy + + + + Perform call to "UnderAttack(Bug)" on given ant. + + ant + bug + + + + Perform call to "HasDied()" on given ant. + + ant + kind of death + + + + Perform call to "Tick()" on given ant. + + ant + + + + Holds all meta-information about a player. + + + + + List of all castes. + + + + + Reference to the ai-assembly-file. + + + + + true, if the Ai gives some debug-information. + + + + + Guid of player. + + + + + Name of colony. + + + + + Complete Class-name of colony-class. + + + + + true, if the colony needs access to a database. + + + + + true, if the colony needs access to files. + + + + + true, if the colony needs access to the network. + + + + + Additional information about access-requests. + + + + + true, if the colony has references to other assemblies. + + + + + true, if the colony needs access to user-interfaces. + + + + + Last name of colony-author. + + + + + First name of colony-author. + + + + + Language of colony. + + + + + true, if the colony uses any static types. + + + + + Simulator-Version of this colony. + + + + + Creates a new instance of PlayerInfo. + + + + + Creates a new instance of PlayerInfo. + + Base-info + + + + Creates a new instance of PlayerInfo. + + Guid of colony + Name of colony + Last name of author + First name of author + Class-name of colony + Colony uses static types + Version of simulator of this colony + Language of this colony + List of castes + Colony produces debug-information + Needs access to user-interfaces + Needs access to databases + Needs access to files + Needs access to network + Needs references to other assemblies + Additional information about security-requests + + + + Checks the rules. + + + + + + Clones the whole object + + clone + + + + Delivers the list of castes. + + + + + SpielerInfo Klasse mit der angabe eines zusätzlichen Dumps einer Spieler-KI + + + + + Kopie der KI-Assembly + + + + + Creates an instance of PlayerInfoFiledump + + + + + Konstruktor der SpielerInfo mit Dateikopie + Kopie der Datei in Form eines Byte[] + + + + + Konstruktor der SpielerInfo mit Dateikopie + + Basis SpielerInfo + Kopie der Datei in Form eines Byte[] + + + + Spielerinfo mit zusätzlicher Angabe eines Dateinamens + + + + + Pfad zur KI-Datei + + + + + Creates an instance of PlayerInfoFilename + + + + + Konstruktor der SpielerInfo mit Dateinamen + + + + + Konstruktor der SpielerInfo mit Dateinamen + + + + + + + Ermittelt, ob die KIs gleich sind + + + + + + + Erzeugt einen Hash aus den gegebenen Daten + + Hashcode + + + + List of possible player-languages. + + + + + Unknown language + + + + + German + + + + + English + + + + + Speichert die Statistik eines Spielers. + + + + + Die aktuelle Anzahl an Ameisen. + + + + + Die Anzahl der durch eigene Ameisen besiegten feindlichen Ameisen. + + + + + Die Anzahl der besiegten Wanzen. + + + + + Die Anzahl der gesammelten Nahrungspunkte. + + + + + Anzahl gesammeltem Obst. + + + + + Die Anzahl der verhungerten Ameisen. + + + + + Die Anzahl der von feindlichen Ameisen besiegten eigenen Ameisen. + + + + + Die Anzahl der von Wanzen gefressenen Ameisen. + + + + + Zählt zwei Statistiken zusammen. + + Statistik 1. + Statistik 2. + Statistik 1 + Statistik 2. + + + + Gibt die Gesamtpunktzahl zurück. + + + + + Das Spielfeld. + + Wolfgang Gallo (gallo@antme.net) + + + + Erzeugt eine neue Instanz der Spielfeld-Klasse. + + Die Breite in Schritten. + Die Höhe in Schritten. + Initialwert für Zufallsgenerator + + + + Erzeugt einen neuen Zuckerhaufen. + + + + + Erzeugt ein neues Obsttück. + + + + + Erzeugt einen neuen Bau. + + Id of colony + Der neue Bau. + + + + Der Radius. + + + + + Die X-Koordinate. + + + + + Die Y-Koordinate. + + + + + Erzeugt eine neue Instant der Punkt-Struktur. + + Die X-Koordinate. + Die Y-Koordinate. + Der Radius. + + + + Erzeugt eine neue Instant der Punkt-Struktur aus einer Koordinate. + + Die Koordinate. + + + + Holds all simulation-elements. + + + + + Creates a new instance of SimulationEnvironment + + + + + Weitergabe des Verantwortungswechsels + + + + + + + Initialisiert die Simulation um mit Runde 1 zu beginnen + + Konfiguration der Simulation + + + + + + + + + + + + + + + + + Berechnet einen neuen Spielschritt + + Zustandskopie des Simulationsstandes nachdem der Schritt ausgeführt wurde + RuleViolationException + Exception + + + + Erzeugt einen Zustand aus dem aktuellen Spielumstand + + aktueller Spielstand + + + + Holds the current playground. + + + + + Holds a list of active teams. + + + + + Holds the "colony" of bugs. + + + + + Holds the calculated sin- and cos-values. + + + + + Holds the calculated sin- and cos-values. + + + + + Calculates all possible angles. + + + + + Delay-counter for sugar-respawn. + + + + + Counts down the total number of allowed sugar-hills. + + + + + Gets the count of simultaneous existing sugar-hills. + + + + + Removes all empty sugar-hills from list. + + + + + Spawns new sugar, if its time. + + + + + Delay-counter for fruit-respawn. + + + + + Counts down the total number of allowed fruits. + + + + + Gets the count of simultaneous existing fruits. + + + + + Spawns new fruit, if its time. + + + + + Removes fruit from list. + + winning colony + + + + Gets the count of simultaneous existing ants. + + + + + Prüft ob eine Ameise an ihrem Ziel angekommen ist. + + betroffene Ameise + + + + Prüft ob eine Ameise einen Zuckerhaufen sieht. + + betroffene Ameise + + + + Prüft ob eine Ameise ein Obsstück sieht. + + betroffene Ameise + + + + Prüft ob die Ameise eine Markierung bemerkt. + + betroffene Ameise + + + + Erntfernt Ameisen die keine Energie mehr haben. + + betroffenes Volk + + + + Erzeugt neue Ameisen. + + betroffenes Volk + + + + Entfernt abgelaufene Markierungen und erzeugt neue Markierungen. + + betroffenes Volk + + + + Gets the count of simultaneous existing bugs. + + + + + Remove dead bugs. + + + + + Heals the bugs, if its time. + + + + + Spawn new bugs, if needed. + + + + + Repräsentiert ein Team innerhalb der Simulationskonfiguration + + + + + Guid des Teams + + + + + Name des Teams + + + + + Liste der enthaltenen Spieler + + + + + Konstruktor des Teams + + + + + Konstruktor des Teams + + Liste der Spieler + + + + Konstruktor des Teams + + Guid des Teams + Liste der Spieler + + + + Konstruktor des Teams + + Name des Teams + Liste der Spieler + + + + Konstruktor des Teams + + Guid des Teams + Name des Teams + Liste der Spieler + + + + Prüft, ob das Team regelkonform aufgebaut ist + + + + + Erstellt eine Kopie des Teams + + Kopie des Teams + + + + Liste der spieler dieses Teams + + + + + Ein Ameisenvolk. Kapselt alle Informationen die zur Laufzeit eines Spiels + zu einem Spieler anfallen. + + Wolfgang Gallo (wolfgang@antme.net) + + + + Die Id die das Volk während eines laufenden Spiels idenzifiziert. + + + + + Die Guid, die das Volk eindeutig identifiziert. + + + + + Der Spieler der das Verhalten des Volkes steuert. + + + + + Zählt die Anzahl an Runden herunter, bis wieder eine neus Insekt erzeugt + werden kann. + + + + + Die Angriffswerte aller Kasten des Volkes. + + + + + Gitter für die verschiedenen Sichtweiten. + + + + + Die Drehgeschwindigkeiten aller Kasten des Volkes in Grad pro Runde. + + + + + Die Lebenspunkte aller Kasten des Volkes. + + + + + Die Geschwindigkeiten aller Kasten des Volkes in der internen Einheit. + + + + + Die maximalen Lastwerte aller Kasten des Volkes. + + + + + Die Reichweiten aller Kasten des Volkes in der internen Einheit. + + + + + Die Sichtweiten aller Kasten des Volkes in der internen Einheit. + + + + + Erzeugt eine neue Instanz der Volk-Klasse. Erzeugt ein Wanzen-Volk. + + Das Spielfeld. + + + + Erzeugt eine neue Instanz der Volk-Klasse. Erzeugt ein Ameisen-Volk. + + Das Spielfeld. + Das Spieler zu dem das Volk gehört. + Das dazugehörige Team. + + + + Erstellt eine neues Insekt. + + + + + Entfernt ein Insekt. + + Insekt + + + + Erzeugt ein VolkZustand Objekt mit dem aktuellen Zustand des Volkes. + + + + + + Die Anzahl von Insektenkasten in diesem Volk. + + + + + Eine Wanze + + Wolfgang Gallo (wolfgang@antme.net) + + + + Gibt an, ob die Wanze sich in der aktuellen Runde noch bewegen kann. + + + + + Erzeugt ein BugState-Objekt mit dem aktuellen Daten der Wanzen. + + + + + diff --git a/BrainArmyAnts/bin/de/AntMe.SharedComponents.resources.dll b/BrainArmyAnts/bin/de/AntMe.SharedComponents.resources.dll new file mode 100644 index 0000000000000000000000000000000000000000..c856681a360f8e79084aa750b189f5da8a40d40a GIT binary patch literal 5120 zcmeHKeQZ?65ub;RZE)>EAgK|hUSoqGbzXh`h;eGj**+gO_)DBQXheeVV|~8*-8<{O zJ!69cS5;|36w)9i1T~EmB{V9bjZ!rY0a9w$EmfP4pjMR(BJO6 z^V!&eME$Eu=Df4Bv$L}^v-@Vp?RPywSwxhLcJ(UJ%jhMz6}~=7V!E*Sa3Q@o>v+k_ zTHEoG?!Kta2CR6*3dC3_V488kf}B|ilSNJD>GZK!Jk0fig4ty$)m_a*ZCVx$EWKxa zdbd+Fqa1w}>4-uRDJ_=aD@-#)6TzKF}kZzjpAQR~w%x zEPLe*PvRGsPQN+t{C{@;pzud`zhBT&B90uH{r<(3t9mZ8h&OP~`@_FI`!9ZO=g^!3 z_wWxNUAXx16AvFAy|n$%O>}De>*BGNBYk^+^Yl+QR__>^do1hB2VZ&X@@Vlz*!ub( z&L7oa=592@H*5Ge5WNXxv;`tyjojIcrK7 zB4P2BCQk?}V3f12M9_$a*7D)*ct1B+25V~rHKCf@U3FE}ykbRN>D0{|N`#1b--(YQCvNNlG?H_A9ir_?pBS{-TKLq*>w1=Rh zzJW{0}d$KqE^feVq~bv<@;t6R+yXG(rKi(Brr8DZga6!Xs%DPc7m-oYc_a{o8k^>lU5;B zNBG!Fy}c$E9F8bYG2b_~&k(F1zA{IxH*UoOLfdeI6*4#}y9T)xu!1})f&q)Cw4^>$ zwhX)L+gxasXjS(vZ}hEc)CfTb$UHbGKjf;4Dp#H4%*6R1Cu6#FJCQ)YNzyPELA0gB z34B-bxhY-mqc=gzXQOoW`c@D6cQIZeW`R#1EvcegzyO(xmhRKE z9Lq*@Ce`QA5}Jop(5Uccg@+X0t?*A2{vEIcXRY*Z7S&TR%~g1T!X*kXSJ@(- zWJJ;{o8qy7fH^#MqRYbeAu)BLDLyc4MI(LFOm$nx{IP)5KXsKiYVg$knlNdKcCP#S za0SECkT||wVdKS3KPh3uAl&fl3Q?GUl1%z_&`}zVE0uxHViMDD-#wDsa`x%9doOSP z){LThFXbKFy2-zw`qa+(-`Tr!KYj>qyZlx8zcD@;B`WvGghM2|v4 z4z8*kuk$syWT_^|-K=dSIqu9>&&s~`H!*81{4|E2gj@myum^AG&} zzTm+He0Z>Z+t>^KciMi{m0$eeo)>QoeRNmB++F@~3l%oaK3r4z?Tl1}QtxE0vz zRNeH;?DJQg+@pb)g&gGcccv8KvZ_)xtylIQG!0qnmEe85@y`lu@g=_{}HP|Ezlc*{MrfT|FCU~kC|5Z~EG~NNcE*dpqw;0MPxyLX( z3Si`vR!$Akj!_A&$7=9{s=nSt3$QM|j|cNMswugDrk;}aOpvXqkD24BIjMm`n70Ps+V4%HpUC2smKZFvY<^?TNzI>cIb#y#)|1|(3OQY zVv+#m)QdVSHt>_sLyNFi8}^B)U8Ify#7%l1fo}P~&{Q6y{qVUGQFl=dsEkFEBP-8D z-kgkn=k#T198=NjPsM4X25Fa2G3ZR$A#Z|=LHdm3$T`)_y8k^E70Onpb_^q4Ay|=# z`sDMMHm*=-J6ZnP6Q1sT>(#mjcy6mW1mW2*qWEdn%6-3p&p`y3Q!Bewjr=+A_X`&% GMc}^;X-Ojh literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/bin/de/AntMe.Simulation.resources.dll b/BrainArmyAnts/bin/de/AntMe.Simulation.resources.dll new file mode 100644 index 0000000000000000000000000000000000000000..2a4efcce6143df86dc063d28d43ad3b354530fec GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/obj/Debug/0b3d7f9b-939a-426b-8baf-2927d0756b0b_AntMe.Player.BrainArmyAnts.dll b/BrainArmyAnts/obj/Debug/0b3d7f9b-939a-426b-8baf-2927d0756b0b_AntMe.Player.BrainArmyAnts.dll new file mode 100644 index 0000000000000000000000000000000000000000..3efedde713fa64b367a9027224fe4bc09f8f355d GIT binary patch literal 7680 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 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/obj/Debug/69b1b14f-f694-4587-816a-b7ad681fbd5f_AntMe.Player.BrainArmyAnts.dll b/BrainArmyAnts/obj/Debug/69b1b14f-f694-4587-816a-b7ad681fbd5f_AntMe.Player.BrainArmyAnts.dll new file mode 100644 index 0000000000000000000000000000000000000000..4a6b298d7a152c762061241937f5a8e68b3ecb5a GIT binary patch literal 11264 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 G!2bZxaQQ_5 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.dll b/BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.dll new file mode 100644 index 0000000000000000000000000000000000000000..daa2beb08d24f6bd0dbdb8fd8f621fd370a199a5 GIT binary patch literal 11776 zcmeHN4R9ORao%?T?m+NI0zgufEK8s%+b}`Wq(nQCBg>*lilRmRSfGBWA4?!`BrgPT z^c^6DQlwC0=RZ!P*3%?)^W!?1CY>ZrouqXVcN*8zG;N(GO*?MuY22il^e>%uIup+% znUw0cdj}9CWo0IvPCJvFbbD`q-tNAA`}Vy%@W9FUQhB&f9dI?Ov3fzAkiUioFn=u2V&*5K-2)*6MKj@uH@YePY{J`_+jAtYVe+t`Nk6P zEgT5&WURj5z~oB6s~*R7vcSZ*b7=5DlelZH-I%T($IROhWM63kH|y%cU32Xw!YEc; zLmtk)X%wQ5q=kuMt6Q+pS!;V49?lWytN=m^^I z5x!gr!K&Q`RwNaRQF1+6^<-%FW=U93Hh|LoJ&cPMTOnK>*M>#a5bkOs-|q!>AL@OZ zjkMXf8Hc?jVt{#wl9s#$>e^1WozRjUeIhJ*ry5#!-kLJV=iS+5$G#J;T`prxlQRC(&Q*{^@))4&Z zyn_OqPdat(LJK*jQxX{joQUIz5%TikcrFhXq8TAAki6Z~!?Ij@UQ2duRn}8q(SL8H zPaugb)+=VJvFK`m4JeLmSPZ6AYsKoFo>e4CZ-CO6aO6wW#SG{X-~S{s4P!x;>6EyB z{ra2h_2$csaB$^78p1o?3Ujpy+L*dC7LWvu2a(^Joq!gZm8NL$QazN!^>4j`nI?!y z)_wz78(5aLHTfPlQV+)rPhXg{XjoLpsN!|{C3dPgiTV`j3PtOTyW665UdpaNb$3HF zY$NV^>!QL^jYp!9E-e++eHAjEXk9%)ySVWIxM8et1HlQ}cR_o+K6M~gpTxvQ;tg=4 z!SkSTg$Iqs-O*@c#e>D5Z@MYk1k(+Aw86952&?r;RK7^}Z^3H)Vk?$qWyyLf%UD#Z zc`*=Q6J67_*$arisAFm9F3N1g?gr3oNby40{wQW))lyg+UAyBAJU!Yaq^lpNcr+UA zy1*-mY2GkmQPfCY=<82y9nq3KXm#!M1nj$kwDzTZ44Y)c6F8+M`xp^5B6X@VUgR1F zJRXgA`2mXS+rJM#kSFjqXm3Twc=PrTgAi*@Zey$kL2dE8X$}2ww8fjIR!mcKvLEi< zcND7tGu6C^Ev7nCn&)TW>!|E{Cn|vH5CT;KIV2pH`{nSo=CbVT|t8Q)fn0m$fDPaw&YGcN+|ehfhDx$ z{Y)lJ^hId-{E{mA4%;K3)f+NwZ$k}}z7A)Y)P7IGuzB=6(G`3j z@H<0m0TSAXWaGZS3esExwbP10=1{CR!Q_6jBLZ)|mV>$o<6m0S9UOxaf zi116Q@C}@UGuTaF;3{%OT5PM#Mx1F-|t05w-1YMFMwWh`(xhV zNf`D+tX2+U>rN~nS1=^qt0_1vVF)nsOy_M{G7Zenbw!v0xtb-DU6_t6U|xeR7FuM1 z^T|ENEsl?SoLf8w_XM|ix?1Jb)GGEmi&_#d4hWtWxQyTgHTNXY%NUEC<#;|@U=6yk zelIcEJ_P}+)?g$>s0!Zru`&5F0X_-wCdFqguSdW>%_eZHsNiRS-%;s{(@(Abfc-GI zq8uX^=Qu3=TyUPw_xJSnZ0p_D zhuXp?g*;#wf$z9NRKoLzC?Xx{l4BL8U6#n>EQ_*79Y@pj5w!82I!2C;4&nJ3AVUaf z$DX`B37jv?gF4=#h3gPe`mx$ZILWYeY;Ur&!817<;Y30hro@*0!ul6E%$~eEKo733 z1wGGk1Pgpt*Xex%cWGDkHT0LTtkV>ZvO4`l;I{-`2{7eBfmwm?7WxtG3DA25epx8L zsl5`2(E7l`!3bT}7=B4H{HF16P$w0774Sp!GG=aEXZjTA5jrW{FM&Qyrugtlk$D&B z$AuE1Pm5$M$nu{PonL_!omw;=#SVit|GHxM!@#SMNs8omMY3T0D5TRb6La%Hh95(_ ziLR+l==&IK@%2@KJhKXO@^z&fqta$JO zeH@$F?MUvIjPEF%0Mz#Yf2{ut;P>_a1Z+2c2sos$q0@7rFyNm9D*Ay@4;WEvG#%rO zYwh&+p>=4#4s@MP>6-yR3;N*%jL=u`cGCg*E$tq*+ras@iXBpn@kYXu(NMRh(ffVu z5kw$BFW%S&+eZv%LdDsO`t)9S0(CP+5aU}IV%y<7TSr8ftUt0qd^$=0vZyMv>^9`mv1G1@iM zmSo;FdMK3E*3e@}D>oVRty6E$c(VMh&%Xn?{xX&x1AFq8ye~6N*=n2#tg*;(+3ae>( z`&N z$3I5?H_*QYGqeRVm+;}GY`hDQx!34|dJ^#81^$=%Fx{nIHl7CMgT|BeJiTmu0_~Kc z=qY;6_#L!AhpNdG9q=c?FVYTmJ@7o*;n1H#{vRRVFIIMnm7QW`2!7tGwopiQsB84i zz?1X^A7;fa!!hYKF1^O3*A8`mkTv%PpQMM>Wqk;J4~q4tk^k4|{Q_SUPtId~Tq75? ztxrurTR;7SKB-QN-HiH^;2e(EKcTm)obL&@$3$jK=>3S#Cn56(fl2i|y-H7F?_v#k zpL-S2*dj7pL}m*yWlShzLKzdvHJOp81ojKe3)~`bOyGK%uadM&(yJs^N}{JEc6(4^ zuWCJ5OYa1{g+2k;LC*lD=#K!m34Fc4LHaXL_Def0@RYzT{Wa*bqyjzUQd3}%F3~Z- zN9mIS-xlO{HuNaHi+1Tx3w%M~2AZMw((lqY=zeubomTHrzoDL0Usm1p06jz{>=TA+ zQZ4Fkb+4LHPpD_qS5Z z!p+tDQF=^0N*`qU&RyBFXNN3zE}xkn%x7G8TkqN4)zq!`-jKS3se4SfWEBeLNz2Ud znmo&-ljZEJ>Fl$L7t2#GJU49?efptEx3r2nI$SIlOeZs$H_!FaVaLo_*-VMsW0qUO zV{f^bJ-3zioAbvq`LcO9V>v*FtZd1$iy3Dg$j$?HuADb_QNhjHPTrcN^t@X#3q6B& zK5vSk+cRPoO~=a8v{^bknxlbSj+{&}M|&-Rvzgga*@UpO*JM0xnKLD?IVFT6mYD^` zG0Ro1*FI)Dvm$8Ham&dac;UI6DK-w6#c8iK;OicS1JjmAJ6U#KcrH6TZRXACl8JMi ziI~w+ENGOc#dbL^OQUg28Yq~SYto*KYq=S(?MZ^>WUS(VQRFX?GC8x5ab}lT;~58&wiiD&m=_T3B}S#sUif>= zbX+9FYUZF_oU*3NPKNVkHG9Z(vyL^loSB|OHk;0pv=w96DPnsh-R zGY5*(jx{w^$r@id}e(%BiuDwU)?0!1gw z(iEkB`yzJ|!qLKUt2he`gU-z4X&{eV%pFE0Go7AgOQ9zRHv2w`n&5|p4x(t$5flKs zKqHQ6O_>8l8g)w}sAsk_X%=NUBbKH_6S%DMn)>B0#aha$%10||9_`7S)?~Vb0s0F4 z-~;tm_7d(XTf$k@5?1xo^!gQP#4Oon3I8ettQVAuqF2l?{gW>|SImJAQxdDRRVe2r zldHL6PWknc>;dePU(*m&>dAUg z9s`qZ#l(=6nJ(JcN3vB?C2L2ECDXCz(x!9X%9^X#m10%pdqoLJjx7P=So|dvMb}>| zInO(nxN2A0ubns|#)ES)kQs9X+f>fXlwHi~8?dclMWJ1 zNI8!}FOB??`Sgyb_x)LoF z1ee5o#xO!m(J&TxWN5Kw4GaW^RenkfYw@*8)6o9B+Qd3PrES88u!xfGapE3rT38qe zR4@W3>M#$n362Rg#qm=$?N)mJ8^y z1GpbDDnpcK*hd@u=NU~8Ln?#&4DNZK%(RKRglh68p2rw{L`FIl&V_^c+3dPTa&AiT2Cmh6tcdwR3k?cKR;xxViH>^?MzxQ?7>^AeBYz`mkptld-=_bEqZFwN=io zH9Vfwg_moF79MtHaX$aQ85^h4>aqF$-*9YRj~kDTW3qhO_G7BC@7{3Qya@i3Y2$FA z_v&f${J6=qc|BK7+s%e{vuR@oO((gO`0pL+78)S+kZ zc-#A4f4=EU+-c~((?x83*}PrOogT8YczMLz&S@OH`EQX5-ih_}V0tFw%$;7gdRAcA zolnbY;q+@C0D9(flNCq*A3c9Cxa3UJ5ZZ|)d|8Wm)$1%yAVc~50i1`t7iH6wlQ9ci zza2XGCxc&HKNk_;Umu9@eRpB`aJ^rku%WG@v)n%1C(hxCZMkyo3-GT_$0$u_0f+Io zQ)wE-U)mi6J_@+k`>Q+p{osErdSA7874zji@nfo7K|rnnwHK$ag4PU9qkC~)<FOW9-8(;JwwGf2-RJd5%&^WQ*`AU*p-5t)69;dhjQM97m4P z09pl_$I}~e58eXu_{Y~BGVU?xo)*mQC$EhwXpwvD^DyIl;^I7uU~S1pXTX(FU#n literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.pdb b/BrainArmyAnts/obj/Debug/AntMe.Player.BrainArmyAnts.pdb new file mode 100644 index 0000000000000000000000000000000000000000..66aee83ba489b0656b1c888d125aaab3733a7b75 GIT binary patch literal 28160 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 literal 0 HcmV?d00001 diff --git a/BrainArmyAnts/obj/Debug/dc042a9a-951b-4a05-a46e-26f4d869a261_AntMe.Player.BrainArmyAnts.dll b/BrainArmyAnts/obj/Debug/dc042a9a-951b-4a05-a46e-26f4d869a261_AntMe.Player.BrainArmyAnts.dll new file mode 100644 index 0000000000000000000000000000000000000000..241d937ee341e480a6e93068542e67f18221b381 GIT binary patch literal 11264 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