Zajímáš se o programování? Chceš vyřešit základní algoritmické problémy? Chceš si zkusit práci s HTTP protokolem a jeho metodami? Chceš porazit svého kamaráda v pořádné hře pro programátory? Pokud ano, tak přesně pro Tebe je hra PYBOTS!
PYBOTS je herní API server napsaný v pythonu, který zajištuje distribuci a zpracování herních map a herních akcí. Hrát může jakýkoliv program, co umí poslat GET/POST HTTP požadavek a vyřešit jednoduchý algoritmický problém.
- vyber si svůj oblíbený programovací jazyk - doporučuji Python, ale zvládne to i Javascript, Java, PHP, C/C++ nebo exotický Haskell
- zjisti si, jak je na tom tvůj jazyk s podporou HTTP protokolu, stačit Ti budou GET a POST metody, a jak vlastně takový požadavek ze svého jazyka pošleš (od pythonu3 je to velmi jednoduché, obsahuje totiž modul
requests
, který to vše zvládne levou zadní) - pošli si prázdný GET požadavek na jakýkoliv server PYBOTS, třeba
http://hroch.spseol.cz:44822/init
a sleduj, co se Ti vrátilo - správně, je to JSON (pokud nevíš, co to je, UTFG), překóduj si jej do svého datového typu - nejspíš nějaký slovník či hashmap (v pythonu koukej po modulu
json
a jeho metodějson.loads
) - z dekódované odpovědi načti id svého bota z klíče
bot_id
a podíváme se na mapu - vem id svého bota a pošli GET požadavek na
/game/{bot_id}
- opět dekóduj a můžeš vidět tyto klíče v odpovědi:
game_info
uschovává další informace - například objektmap_resolutions
, zapnutí tahů, laserů nebo baterek, může se hoditmap
označuje dvourozměrné pole celé mapy, první rozměr označuje výšku, druhý, zanořený, šířku; o hodnotách vevnitř mapy čti dále
- spočítej, co chceš, aby tvůj bot udělal, krok, laser, čekat nebo se třeba otočit?
- pošli POST požadavek na
/action
s parametrybot_id
= id tvého bota aaction
= jedna z hodnot vyjmenovaných níže v tabulce akcí - v odpovědi si pohlídej, že jsi úspěšně zahrál
- pokračuj tak, aby jsi vyhrál!
tvůj bot se jednoduše pohne o pole dopředu, samozřejmě to nepůjde mimo mapu, do jiného bota nebo do pevného bloku - avšak při kroku na poklad vyhraješ!
při hře s baterkami Tě to bude stát jednu úroveň baterie
tvůj bot se otočí, doprava nebo doleva
nestojí nic z energie baterky
tvůj bot bude tah čekat na místě a nabije si baterii
bot bude soustředit energii jedním směrem a vypálí usměrněný proud fotonů, který dokáže nepřátelskému botu ubrat energii nebo zničit pevný blok
energeticky to nebude úplně nejlevnější, paprsek sežere alespoň dvě úrovně baterie
každé pole je v mapě reprezentováno jako objekt vždy obsahující klíč field
, který označuje typ pole, viz následující seznam
jednoduché prázdné pole, bot na něj může v klidu vstoupit, laserem je propálitelný
reprezentace tohoto pole v mapě je jednoduchá, prostá 0
cíl tvého bota, uzmi si jej pro sebe vstoupením na něj!
v mapě poklad najdeš jako jednoduchou hodnotu 1
pevný blok, kterým jen tak jednodušše neprojdeš, ale zničit jej můžeš laserem svého bota
v mapě je identifikován jako 3
tví nepřátelé, za každou cenu jim musíš zamezit přístup k pokladu a nebo je i zpomalit pomocí laseru tvého bota
kromě klíče field
se v botově objektu nachází i jeho orientace uložená v orientation
(a jako specialitka je tu unikátní name
)
{
"field": 2,
"orientation": 2,
"name": "John"
}
při hře s baterkama je to lehce složitější, hodnota klíče field
je 4
a navíc je známa i hodnota nabití baterie
{
"field": 4,
"orientation": 0,
"battery_level": 3,
"name": "Joe"
}
- na
/info
najdeš základní enumerace pro orientace botů, typy bloků v mapě a návratové hodnoty ze zpracování akce - každý požadavek na
/action
vrací v odpovědi klíčstate
, který identifikuje status provedení žádáné akce, dle něj můžeš jednodušše poznat, zda se akce povedla, případně co bylo problémem (nemožnost vstoupit na blok, nedostatečná úroveň baterie, bot není na tahu, neznámébot_id
případné nevalidní akce) - každý bot má ve své hře i své unikátní jméno! najdeš ho pod klíčem
name
# TODO
v případě jakýchkoliv problémů se serverem, klientem nebo jen žádostí o radu se na mě nebojte obrátit, @thejoeejoee na Githubu nebo @thejoeejoee