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