Pozor: Na serveri Python boti bežia pod PyPy, čo znamená, že tam je ekvivalent verzie Python 3.9. Vyhnite sa používaniu funkcionalít z novšieho Pythonu.
Template v jazyku Python obsahuje 3 súbory:
player.py: sem budete programovať logiku vášho botaproboj.py: tu je primárne implementácia komunikácie so serverom, stav hry a API pre robenie ťahovships.py: tu sa nachádzajú triedy pre ukladanie informácií o lodiachV player.py je jedna trieda, v ktorej budeme implementovať metódu make_turn(). Proboj túto funkciu zavolá pri každom kole a očakáva, že vráti list ťahov, ktoré chceme spraviť.
Táto trieda dedí od ProbojPlayer, ktorý v nej zabezpečuje ukladanie dát o hre. Vďaka tomu máme k dispozícií dáta ako atribúty našej triedy:
self.map obsahuje dáta o mape (jednotlivé políčka)self.harbors obsahuje zoznam prístavov v hreself.ships obsahuje zoznam lodí v hreself.myself obsahuje informácie o mojom botoviself.base obsahuje súradnice mojej základneTiež obsahuje niektoré pomocné metódy:
self.mine_ships() vráti zoznam mojich lodíself.is_occupied_by_ship(xy) vráti True/False, či je dané políčko obsadené loďouself.log(...) zapíše text do mojho logu. Syntax je rovnaká ako vstavaná funkcia print(). Na vypisovanie nepoužívaj funkciu print() priamo!Tvoja funkcia má vrátiť list ťahov. Čo to ale je? Počas kola vieš vykonať niekoľko ťahov, spravidla jeden pre každú loď + nákup lodí. Druhy ťahov sú:
MoveTurn(loď_idx, súradnice): pohyb lodeTradeTurn(loď_idx, resource, počet): obchodovanie s prístavom (loď musí byť v prístave, záporné množstvo je predávanie)LootTurn(loď_idx, druhá_loď_idx): lootovanieShootTurn(loď_idx, druhá_loď_idx): strieľanieBuyTurn(ship_type): nákup novej lodeStoreTurn(loď_idx, počet): uloženie (pre záporné počty výber) zlata do základneMapa obsahuje tieto atribúty:
width, height: výška a šírka mapytiles: dvojrozmerné pole políčok na mape. Indexované [y][x] (viď. Tile)Tiež obsahuje tieto pomocné metódy:
tile_type_at(xy): vráti druh políčka (viď. TileEnum v proboj.py) na súradniciachneighbours(xy): vráti susedné políčka pre súradnicu. Nevracia políčka, na ktorých nie je voda.Tile obsahuje dva atribúty: type (TileEnum) a index. Ak ide o základňu, v index bude číslo hráča, ktorému patrí.
Prístav obsahuje tieto atribúty:
coords: súradniceproduction: koľko ktorej suroviny prístav generuje / spotrebúvastorage: koľko ktorej suroviny prístav aktuálne skladujevisible: či na tento prístav vidíš. Ak nevidíš, tak production a storage je prázdne.Obsahuje pomocnú metódu resource_cost(resource), ktorá vráti aktuálnu základnú cenu suroviny.
Obsahuje dve atribúty:
idx: tvoje číslo (viď. index v tile)gold: koľko máš zlataLoď má tieto atribúty:
index: číslo lode (globálne)player_index: číslo hráča, ktorému patrícoords: súradnicehealth: aktuálne životyis_wreck: či je potopenáresources: aktuálne resources v lodi (ak ju vidíš)stats: aktuálne staty lode (ak ju vidíš)mine: či je loď tvojaExistuje ešte trieda Utils, ktorá má naimplementované BFS.
Utils.bfs_path(xy_start, xy_end, self.map)
Vracia zoznam políčok, cez ktoré vedie najkratšia cesta, alebo None, ak sa do cieľa nedá dostať.