Nad hladinou se odehrává úžasný aritmetický souboj, díky němuž si děti mohou procvičovat počítání tím pro ně nejpřirozenějším způsobem - hrou. Pod hladinou však stojí palác důmyslně promyšlené architektury, mezi jehož sloužící patří i obyvatelé kmenu zvaného Umělá inteligence. Ti dokážou být těm nad hladinou plnohodnotnými protihráči a během několika málo sekund vyhodnotit protihráčovy schopnosti i strategie.
Podílíme se na vývoji této jedinečné webové aplikace ABAKU, elektronické verze jedné z nejlepších her na počítání vůbec, za kterou stojí společnost AL.21. Cílem projektu není nic menšího než naučit děti počítat. Jedná se o edukační nástroj určený dětem na základních školách, ale ze zkušeností víme, že si ji rád zahraje i leckterý dospělý.
Abaku je hra, kterou lze hrát jak s živým protihráčem, tak s umělou inteligencí o různé obtížnosti. Obrovské využití má hra pro učitele, kteří mohou díky speciálním scénářům procvičovat různé početní dovednosti. Zároveň mají k dispozici i podrobné statistiky o vývoji znalostí jednotlivých žáků a kompletní uživatelskou správu.
Gaming
AL. 21 s.r.o.
Web
Výzvou byla již samotná architektura. Do té se promítal i požadavek na univerzálnost kvůli různým businessovým modelům, které chce společnost aplikovat v odlišných částech světa.
Největší výzvou je ovšem hra samotná a umělá inteligence v ní. Základem hry je herní engine, který má na starost vyhodnocování správnosti tahu a následně s tím spojené animace zobrazení jednotlivých příkladů. To vše pro více hráčů.
Umělá inteligence se stará o simulování protihráče, který má být stejně dobrý jako jeho protihráč. Musí být nejen schopný hrát hru “dle pravidel”, ale i reagovat na schopnosti protihráče (tj. kombinovat různé strategie vedoucí k vítězství), a přitom stíhat vyhodnocení do několika málo sekund. Neméně podstatná je stále přítomná schopnost vzdělávat.
Hra ABAKU není úplně nový produkt, ve skutečnosti se jedná o její pátou verzi. Poprvé je však vytvářena pro anglicky mluvící trh.
Tentokrát byl také kladen velký důraz na rychlost aplikace (zvláště pak robota suplujícího protihráče), možnost rozšíření a přeložení do více jazyků a především na kvalitu umělé inteligence, která musí být schopná vytvářet taktiky a adaptovat se na zkušenost protihráče.
Snažíme se o co největší partnerství s klientem a máme rádi Scrum, což se nám v tomto projektu podařilo výborně spojit. Do vývojového týmu se tak přímo na pozici Product Ownera zapojil Petr - přímý zástupce investora a zároveň tělem i duší vývojář. Nejenže zná původní verze ABAKU aplikace, a s tím spojené “edge casy” jako své boty, ale také rozumí problémům a otázkám našeho týmu. Pro nás ideální kombinace. Petr je s námi na standupech, groominzích, na review schůzkách a je aktivní v návrhu celého designu.
Základním kamenem je serverless řešení od AWS, programovací jazyk je hlavně TypeScript. Komunikace služeb a klienta běží přes GraphQL. Databáze přes DynamoDB.
TypeScript, React.js, GraphQL
TypeScript, Node.js, GraphQL, AWS, DynamoDB
Řešení je postavené na serverless AWS infrastruktuře. Bylo to nejefektivnější řešení, které zároveň umožňuje jednoduchou integraci s ostatními službami. Pro správu uživatelů jsme použili Cognito.
Aplikace je rozdělena do několika služeb, které spravují konkrétní funkcionalitu v doméně. K tomuto rozhodnutí nás vedl především požadavek klienta, který počítá s tím, že by se hra dala časem publikovat i mimo školní prostředí a zpřístupnit pro veřejnost, a také požadavek na škálovatelnost celého systému.
Na proces nasazování těchto služeb jsme použili AWS CloudFormation.
Projekt Abaku byl výzva nejen po stránce projektové ale i technologické. Celá aplikace je serverless a využívá celé plejády AWS služeb. Od API gateway, přes lambda funkce, Dynamo DB streams, IOT pubsub, až po AWS SQS. Výsledkem je vysoce škálovatelná realtime hra, která běží kompletně serverless s minimálními náklady.
Nesmírně důležitá část Abaku je Robot, neboli soupeř v podobě algoritmu na vyhodnocování tahů. Ten umožňuje hráči hrát proti virtuálnímu protivníkovi. Jeden z požadavků na Robota byl, aby byl schopen porazit i ty nejlepší hráče. Vzhledem k počtu možností ve hře a prvku náhody, bylo pro nás programování tohoto AI úžasnou výzvou.