Hilfestellungen 1. Starthilfe Unter Start Programme findest du AntMe! und kannst es starten. Überprüfe nach dem Starten, ob unter Einstellungen/Plugins (Settings/Plugins) das Freie Spiel und die 3D-Ansicht ( Free Game und 3D View ) aktiviert sind. Nach Aktivierung solltest du entsprechende Reiter im Menü angezeigt bekommen. Anschließend gehe auf den Tabellenreiter Freies Spiel ( Free Game ) und wähle bei einem beliebigen Slot das Ordnersymbol aus. Es öffnet sich ein neues Fenster, wo du Beispielameisen findest. Dort einfach auf das Hinzufügen-Symbol klicken. Jetzt öffnet sich ein neues Fenster, indem du den Namen deines Volkes eingeben kannst und den Speicherort findest. Speicherort an dem Pool-Rechner: C:\Users\<username>\My Documents\Visual Studio 2010\Projects\<volkname> Nachdem du dein Volk erstellt hast, wirst du gefragt, ob du diese in der Entwicklungsumgebung öffnen willst. Dies ist im POOL (teilweise) NICHT MÖGLICH. Daher musst du deine Ameise manuell öffnen, indem du zum Speicherort gehst und dort die Projektdatei öffnest <volkname>.csproj. Dabei wird sich Visual Studio automatisch öffnen. Nun ist es fast geschafft! Wähle im Projektmappen-Explorer(Solution Explorer) an der rechten Seite die C#-Datei mit den Namen deines Volkes aus, um dein Volk zu bearbeiten. Ein Prototyp für eure Ameisen findet ihr auf: http://www.soenke-berlin.de/antme Um dein Volk zu laden, drücke auf die Startschaltfläche. Sollte der folgende Fehler auftreten: 1
Dann Rechtsklick auf die Projektmappe ganz oben im Projektmappen-Explorer (Solution Explorer) und gehe auf die Eigenschaften(Properties): Dort unterm Abschnitt Konfiguration Eigenschaften (Configuration Properties) ein Haken setzen bei Erstellen (Build). Nun sollte der Fehler nicht mehr auftauchen und du kannst dein Ameisenvolk laden. 2
2. Abgabe Damit später eine eindeutige Zuordnung der Ameisenvölker stattfinden kann, bearbeitet bitte die Spielereigenschaft: Original [Spieler( Angepasst [Spieler( Volkname = "Meine erste C#-Ameise", Vorname = "", Nachname = "" Volkname = "ProtoMeise", Vorname = "Dein_Name", Nachname = "Team ErstiWoche" Wenn ihr euer Ameisenvolk gegen andere antreten lassen wollt, findet ihr in eurem Projektordner im Ordner bin die benötigte DLL-Datei: C:\Users\<username>\My Documents\Visual Studio 2010\Projects\<volkname>\bin Dort befindet sich durch das Erstellen eurer Ameise eine DLL-Datei AntMe.Player.<volkname>.dll Tipp des Tages Eure Ameisen bleiben am Ameisenbau stehen und bewegen sich nicht? Wie wäre es bei public override void Wartet() erstmal ein GeheGeradeaus(); zu schreiben? Ihr möchtet weitere Tipps haben und Beispiele sehen? Wir haben für euch eine simple Beispiel Ameise, die ProtoAmeise, erstellt an der ihr euch orientieren könnt. Zu finden auf: http://www.soenke-berlin.de/antme 3
3. Nahrung Äpfel sind schwer, so dass sie mehrere Träger benötigen. PROBLEM: Wenn ein Apfel von 10 Ameisen getragen werden kann, ist es zwar möglich, weitere Ameisen zum Apfel zu schicken. Jedoch ändert sich nichts mehr an der Geschwindigkeit und zudem wird der Apfel von mehr Ameisen getragen als notwendig sind. LÖSUNG: Es ist daher sinnvoll eine Abfrage einzubauen, die andere Ameisen nur dann zum Apfel lockt, wenn dieser noch Träger braucht. Dies kann zum Beispiel so aussehen: public override void Sieht(Obst obst) if (BrauchtNochTräger(obst)) if (Ziel == null) GeheZuZiel(obst); 4. Markierungen Die Funktion SprüheMarkierung(..) kann zur Informationsübermittlung verwendet werden. Dabei wird im ersten Parameter die Information über das Ziel gespeichert. Dies kann eine beliebige Integerzahl sein. In der Funktion RiechtFreund(..) werden die einzelnen Möglichkeiten der Markierungsinformation ausgelesen und die Ameise wird entsprechend instruiert. Da aber auch die Möglichkeit besteht, innerhalb der Informationsvariablen die Richtung eines Zieles zu speichern (beispielsweise bei der Ameisenstraße), sollte man sich eine entsprechende Codierung der Information überlegen. So könnte dann beispielsweise der Code aussehen: public override void RiechtFreund(Markierung markierung) if (Ziel == null && markierung.information == 1001 && Kaste == "Kämpfer") GeheZuZiel(markierung); if (Ziel == null && markierung.information < 1000 && Kaste == "Sammler") DreheInRichtung(markierung.Information); GeheGeradeaus(); In der ersten If-Abfrage wurde ein Feind mit der Zahl 1001 als Information der Sprühmarkierung übergeben und soll nur von den Kämpfern beachtet werden. In der zweiten If-Abfrage hingegen wurde die Richtung in der Sprühmarkierung als Information übergeben und nun können die Sammler dieser Markierung folgen. 4
5. Spezialisierung Ein Ameisenvolk besitzt Ameisen, die unterschiedliche Berufe ausüben. Dies kann mittels der Kaste in AntMe! gestaltet werden. Die Standardkaste sieht wie folgt aus: [Kaste( Name = "Standard", GeschwindigkeitModifikator = 0, DrehgeschwindigkeitModifikator = 0, LastModifikator = 0, ReichweiteModifikator =0, SichtweiteModifikator =0, EnergieModifikator = 0, AngriffModifikator = 0 Dieser Block kann kopiert und nach Belieben geändert werden. Dabei muss jedoch die Summe insgesamt 0 ergeben. So könnte eine Kämpfer-Kaste zum Beispiel aussehen: [Kaste( Name = "Kämpfer", GeschwindigkeitModifikator = 0, DrehgeschwindigkeitModifikator = -1, LastModifikator = -1, ReichweiteModifikator = -1, SichtweiteModifikator = -1, EnergieModifikator = 2, AngriffModifikator = 2 Unter den Bereich Kaste kann nun bestimmt werden, wie viele Ameisen einer Kaste erschaffen werden sollen. Informationen über die Anzahl der Ameisen einer Kasten werden im Dictonary<string, int>anzahl gespeichert. So kann über den Kastennamen die Anzahl der Ameisen dieser Kaste ermittelt werden. Damit kann in der Funktion BestimmeKaste(..) festgelegt werden, zu welcher Kaste eine Ameise gehören soll und wie viele Ameisen einer Kaste existieren sollen: public override string BestimmeKaste(Dictionary<string, int> anzahl) if (anzahl["kämpfer"] < 25) return "Kämpfer"; else return "Standard"; Hat man die Kasten erstellt und die Anzahl festgelegt, müssen nun die entsprechenden Bereiche angepasst werden. Dies geschieht mittels eines Vergleiches auf die Kaste (Kaste == "Kämpfer"). Zum Beispiel innerhalb des Bereiches Kampf: public override void SiehtFeind(Wanze wanze) if (Ziel == null && Kaste == "Kämpfer") SprüheMarkierung(1001, 150); if (AnzahlAmeisenDerSelbenKasteInSichtweite > 5) GreifeAn(wanze); 5