Dostaň agenta z bludiště

V následující hře půjde o to vysvobodit agenta z bludiště. Každá hra sestává z neomezeného počtu tahů. Hra končí ve chvíli, kdy agent nalezne východ z bludiště, umře nebo hru vzdá. V každém tahu může agent provést (až na jednu výjimku) libovolný počet akcí (viz níže).
AkcePopis
agent.go(smer) Agent provede krok daným směrem, kde směr je jedno z písmen 'N','S','E','W' označující světovou stranu. Tuto akci může agent provést pouze jednou za tah! Pokud toto pravidlo poruší, vyčerpá se a ubudou mu životy. Pokude je v daném směru zeď, agent do ní nabourá a pořádně si ublíží, takže mu také ubudou životy.
agent.is_wall(smer) Vrátí True pokud je na vedlejším políčku daným směrem zeď.
agent.write(text) Agent napíše (no spíš vyryje) na podlahu (na místě, kde se nachází) nápis, který mu zadáte.
agent.read() Agent si přečte, co je napsáno na podlaze na místě, kde se nachází a nápis vrátí. Pokud tam nic napsáno není, tak tato funkce vrátí prázdný řetězec.
agent.read(smer) Agent si přečte, co je napsáno na podlaze o jedno políčko vedle agenta směrem smer. Pokud tam nic napsáno není, tak tato funkce vrátí prázdný řetězec.
agent.set_color(color) Agent zabarví aktuální políčko barvou color. Jako barvu můžete použít buď její anglický název ('red','green','blue') nebo její rgb kód ('rgb(100,200,10)', čísla postupně udávají intenzitu červené, zelené a modré na stupnici 0-255).
agent.get_color() Agent vrátí barvu aktuálního políčka.
agent.at_exit() Tato akce vrátí True, pokud se agent nachází u východu z bludiště. V takovém případě se hodí následující funkce.
finish() Pokud agent provede tuto akci (uvnitř svého tahu) a agent se nachází u východu z bludiště, vyhráli jste (a máte šanci získat zápočet). Pokud se ale agent u východu nenachází, okamžitě umírá.
fail() Pokud si myslíte, že z bludiště není cesta ven, proveďte tuto akci, která hru ukončí. Pokud budete mít pravdu, máte opět šanci získat zápočet.
Herní strategie agenta je zadaná funkcí tah, která se v každém tahu zavolá a provede akce, které chce agent v daném tahu uskutečnit. Vaším úkolem bude tuto strategii naprogramovat. K tomu máte k dispozici editor s dvěmi předpřipravenými funkcemi init a tah, do nichž musíte doplnit správný kód. Funkce init se volá vždy před začátkem každé hry. V ní se můžete na tento únik připravit (například si vyrobit pomocné proměnné v paměti agenta). Funkce tah se pak volá jednou v každém tahu dokud hra neskončí, t.j. dokud se agent nedostane z bludiště, neumře nebo to nevzdá. Obě funkce mají jediný parametr — agenta. Kromě výše zmíněných akcí má agent k dispozici ještě paměť. Do paměti můžete přistupovat pomocí proměnné agent.memory. Můžete tedy například napsat agent.memory.kroky = ['N','S']. Také můžete použít funkci print, která vypisuje hlášky do spodní části okna.

Až budete mít obě funkce napsané, můžete se pokusit o únik. K tomu slouží tlačítka v pravé části stránky:

spustí novou hru nebo pokračuje v přerušené hře.
dočasně přeruší hru (agent odpočívá).
provede jeden tah (zavolá funkci tah).
Připraví novou hru, t.j. zabije aktuálního agenta, vytvoří agenta nového a dá ho na začátek bludiště a zároveň po starém agentovi bludiště uklidí (vyčistí všechny nápisy).

Pokud agent udělá určitý počet chyb, umře a hra skončí.

Postup agenta můžete sledovat v pravé horní části na malé 2D mapě, nebo v záložce Kamera, kde se můžete na bludiště dívat očima agenta.

K pokusům s agentem máte k dispozici také Pythonovskou konzoli vpravo, kde je předdefinovaná proměnná agent, která se chová stejně jako parametr funkce tah. Jediná výjimka je ta, že v konzoli se agent neunaví, tedy s ním můžete chodit jak dlouho chcete (ale bourat do zdí nesmíte). Také není k dispozici funkce fail ani finish.