Obsazování území ================ API --- Parametry: - token: Identifikuje uživatele, zjistí z hlavní stránky webu - game: S jakou hrou (popř. týmem ve hře) se chtějí bavit - Pro naše potřeby: - `main` - Hlavní hra - `test_{0,1,..}` Testovací hra daného uživatele (číslo je jako který tým hrají) - round_id: To zjistí z otazu na stav - min_round: Validní odpovědi pouze pokud je tento nebo pozdější tah, jinak "too_early" Stav: GET na `/api/state?game=&token=&min_round=` ```json { status: "ok" round: # Kolikáté je aktuální kolo (na počátku 0) team_id: time_to_response: # None v případě, že ho neznáme state: { map: [[{ home_for_team: occupied_by_team: hill: members: [{ type: "soldier" # Pro budoucí rozšiřování team: id: # Unikátní číslo v rámci týmu remaining_rounds: # vždy > 0 }] }]] } } nebo { status: "working" nebo "too_early" # Server počítá následující stav nebo je některý z předchozích tahů, klient má počkat wait: # Jak dlouho má klient čekat, než se zeptá znovu } ``` Je zaručeno, že domeček mají uprostřed mapy Tah: POST na `/api/action?game=&token=&round=` ```json { members: [ id: action: # None -> čekej # "left", "right", "up", "down" ] } ``` Odpověď na tah: ``` { status: "ok" } # Vše v pořádku nebo { status: "warning" members: [ # seznam osob s chybou/varováním id: description: ] } # Tah jako celek se provede, chyba jen u některých osob nebo { status: "error" description: } # Chyba celého tahu (např. nevalidní json, obsahuje povinné hodnoty ...) nebo { status: "too_late" } ``` Interní reprezentace ==================== Metadata ``` { # statické pro celou hru teams_height: # Počet týmů v mřížce teams_width: height_per_team: # vzdálenosti startovních ploch width_per_team: # S možnou změnou initial_remaining_rounds: # Parametry k počtu nových vojáků # Pomyslná cena *nového* vojáka spawn_price: # Na kolik nových spawnů bude stačit obnos "peněz" v posledním kole last_spawn: } ``` Stav: { map: << jako v API >> }