====== 3. Welt-Service ====== Der Welt-Service erzeugt die Spielwelt und liefert Informationen über die Umwelt. Die Kommunikation erfolgt über einen Socket. ===== Initialisierung ===== Beim Start des Programms registriert sich dein Programm beim Discovery-Service. * ''action: register'' * ''type: world'' * ''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. Das Programm erzeugt ein neues Objekt der Klasse "Map". ===== Spielablauf ===== Das Programm öffnet einen Socket unter der oben registrierten Adresse/Port. Auf diesem Socket wartet das Programm auf Nachrichten. ===== Aktionen ===== ==== Neue Welt ==== Das Programm erzeugt eine neue Spielwelt und platziert die Ameisenhügel auf der Karte. === Request === Ein JSON-Objekt mit den Attributen: * ''action: "new"'' * ''count'': Die Anzahl der Ameisenvölker in der Welt. === Response === Ein JSON-Array mit den Koordinaten aller Ameisenhügel. [ {"xcoord": n, "ycoord": m}, {"xcoord": n, "ycoord": m}, ... ] ==== Umgebung ==== Das Programm liefert die Umgebung einer Ameise, abhängig von der Sichtweite. === Request === Ein JSON-Objekt mit den Attributen: * ''action: "area"'' * ''xcoord'': Die X-Koordinate einer Ameise. * ''ycoord'': Die Y-Koordinate einer Ameise. * ''range'': Die Sichtweite einer Ameise. === Response === Ein JSON-Array mit den Zuständen der Felder. Die Reihenfolge der Felder ist immer von oben links nach unten rechts. {{:modul:m321:projekt:umgebung01.png?200|}} Dieses Beispiel zeigt die Umgebung einer Ameise mit einer Sichtweite 2. Die Ziffern entsprechen der Reihenfolge in der Response. ==== Karte ==== Das Programm liefert die vollständige Karte. Nur autorisierte Services dürfen diese Aktion ausführen. === Request === Ein JSON-Objekt mit den Attributen: * ''action: "map"'' * ''token'': Ein verschlüsseltes Authentifikationstoken. === Response === Ein JSON-Array mit den Angaben zur Welt. * ''xsize'': Breite der Welt * ''ysize'': Höhe der Welt * ''fields'': Zweidimensionales Array mit allen Feldern der Welt. ==== Beenden ==== Erhält das Programm eine Nachricht mit ''"action": "quit"'', so wird das Programm beendet: - Sende eine Antwort mit ''OK'' über den Socket. - Schliesse den Socket - Beende das Programm. ===== Objekte und Methoden ===== * [[.:klasse:map]] * [[.:klasse:field]]