====== 2. Ameisenvolk ======
Dein Programm steuert die Ameisen mit Hilfe von Nachrichten über einen Socket.
===== Ablauf des Programms =====
==== Initialisierung ====
Beim Start des Programms registriert sich dein Programm beim Discovery-Service.
* ''action: register''
* ''type: hive''
* ''ip:'' Die IP-Adresse auf der dein Programm Nachrichten empfangen wird.
* ''port:'' Der Port über den dein Programm Nachrichten empfangen wird.
Als Antwort sendet der Discovery-Service ''OK'' oder ''ERROR''.
Bei ''ERROR'' muss das Programm abbrechen.
==== Spielrunde ====
=== Request ===
Das Programm öffnet einen Socket unter dem oben definierten Port.
Auf diesem Socket wartet das Programm auf Nachrichten.
Für jede Spielrunde erhält das Programm eine Nachricht mit ''"action": "round"''
Diese Nachricht enthält neben der Action:
* ''count'': Wieviele Ameisen umfasst dein Volk
* ''ants'': Ein Array von JSON-Objekten pro Ameise.
Pro Ameise enthält die Nachricht die Angaben:
* ''xcoord'': Die X-Koordinate relativ zum eigenen Ameisenhügel
* ''ycoord'': Die Y-Koordinate relativ zum eigenen Ameisenhügel
* ''food'': Ob die Ameise Nahrung trägt (1) oder nicht (0).
* ''area'': Angaben zu den Feldern in einem 5*5 grossen Bereich um die Ameise.
Angenommen die Weltkarte sieht aktuell so aus:
{{:modul:m321:projekt:welt01.png?400|}}
Dann erhält der grüne Spieler diese Nachricht:
{
"action": "round",
"count": 2,
"ants": [
{
"xcoord": 0,
"ycoord": -1,
"food": 1,
"area": [
"water", "empty", "empty", "empty", "empty",
"water", "empty", "home", "empty", "friend",
"water", "empty", "friend", "empty", "empty",
"water", "empty", "empty", "empty", "food",
"water", "empty", "empty", "empty", "empty"
]
},
{
"xcoord": 2,
"ycoord": 0,
"food": 0,
"area": [
"water", "water", "water", "water", "water",
"empty", "empty", "empty", "empty", "empty",
"home", "empty", "friend", "empty", "empty",
"friend", "empty", "empty", "empty", "empty",
"empty", "empty", "food", "empty", "empty"
]
}
]
}
==== Response ====
Das Programm antwortet mit den Aktionen der einzelnen Ameisen.
Die Reihenfolge ist dabei die gleiche wie in der Nachricht.
[
"N",
"S"
]
Hier würde die linke Ameise nach Norden in den Ameisenhügel laufen.
Die rechte Ameise läuft nach Süden in Richtung der Nahrung.
===== Spielende =====
Erhält das Programm eine Nachricht mit
* ''"action": "quit"'',
* ''"reason":'' Grund für das Beenden
so wird der Socket geschlossen und das Programm beendet.