====== 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.