
Na četná přání čtenářů začíná velký cyklus článků o využití technologie serverless výpočtů pro vývoj skutečné aplikace. V tomto cyklu se zaměříme na vývoj aplikace, testování a dodávání koncovým uživatelům s využitím moderních nástrojů: mikroservisní architektury aplikace (v serverless variantě, na základě ), clusteru pro nasazení aplikace, databáze , zaměřené na cloudovou klasifikaci a využití, a také cloudové sběrnice . Aplikace realizuje hru „Bylyny“, jeden z variant populární salonní hry „Mafie“.
Co jsou „Bylyny“?
To je varianta hry „Mafie“, také známá jako „Werewolf“. Její podstatou je týmová hra, při které se účastníci krok za krokem snaží zjistit, kdo je kdo, a pokusit se vyhrát. Bohužel, při online hře se vytrácí taková důležitá složka hry, jako je osobní interakce, a pravidla klasické „Mafie“ jsou dost jednoduchá, takže pro zajímavější a méně lineární herní proces se obvykle přidávají další postavy, ale v celkovém pohledu zůstávají hlavní rysy původní „Mafie“, jako například změna dne a noci, tažení pouze v noci, stejně jako spojenectví mezi účastníky. Také důležitým rozdílem online hry je to, že moderátor (také známý jako Mistr hry, Pohádkář) je obvykle počítačový program.
Popis hry
Pravidla hry, kterou chci realizovat, jsou převzata ze starého irc-bota, který jsem uchoval ve svém osobním archivu před deseti lety. „Bylyny“ mají příběh, který začíná každou hru:
Ve třicátém království, ve třicátém státě, za sedmi moři, žily si tam několik vesniček, a v nich Dobří mladíci a Krásné dívky. Sázeli obilí, chodili do okolního lesíka pro houby a plody… A tak to pokračovalo z generace na generaci, dokud strašlivá katastrofa neotřásla Zemí a zlo nezačalo pronikat do světa! Noci se staly dlouhými a studenými, a v temnotě se po lese toulaly a do vesnice se dostávaly zlé a strašné bytosti. Přiletěl odněkud Zmij Gorynyč a začal krást krásné dívky a brát vše cenné od sedláků. Hamižná a zlá Baba-Jaga, přiletěl na koštěti z dalekých lesů, zmatil rozum obyvatel, a dokonce někteří opustili řemeslo a odešli do lesa loupit, kde si vytvořili bandu. Zločinci se setkali s Lesním mužem, který uměl přeměňovat se na stromy a keře, začal sledovat mírumilovné vesničany a sloužit zločincům, vyšetřoval, zda se Dobří mládenci nechystají k osvobození svých osad od nečistot. Dobří mládenci a Krásné dívky, unavené z nájezdů Zločinců a hrůzných smrtí z rukou strašného Jednookého Zlého, shromáždili zlato a pozvali z vedlejšího města známého bojovníka — Ivana Caroviče, který slíbil osvobodit vesnici od zločinců. Na světlině v lese Ivan zachránil od nevyhnutelné smrti Šedého vlka, který se dostal do pasti Zločinců. Na oplátku Vlk slíbil informovat Caroviče o různých lesních nečistotách. Kolem projížděla známá léčitelka Vasilisa Předmětná, a když uviděla neštěstí — zůstala se starat o obyvatele, kteří trpěli z útoků zločinců. Za lesem se objevil černý palác, ve kterém podle pověstí sídlil Kostěj Nesmrtelný, každou noc se vkrádal do vesnic a kouzlil Dobré Mladce a Krásné Dívky, aby se neodvažovali nesplnit jeho rozkazy, všichni dělali, jak on nařídil. A v Bezduchém lese sídlil Kočka-Bajun, a každý, kdo jej potkal, usnul mrtvým spánkem po jeho pohádkách nebo zahynul jeho železnými drápy.

Třetí království
Jak již bylo vidět, hráči se dělí do několika skupin:
- mírumilovní obyvatelé (Dobří mládenci, Krásné dívky, Ivan Carovič, Šedý vlk a Vasilisa Předmětná)
- zločinci (vlastní zločinci, jakož i Baba Jaga a Lesní muž)
- nezávislí (Had-Gorynyč, Jednooké Zlé, Princezna Žába, Kostěj Nesmrtelný, Kočka-Bajun)
Cílem hry, jak bylo řečeno výše, zůstat naživu a zvítězit. Odpůrci by měli nějakým způsobem opustit hru, a nezávislí by také měli přežít až do konce hry. Ve hře je zlato, svým způsobem herní měna, kterou hráči získávají pouze uvnitř hry. Vítězí ti, kteří získají zlato. Čím více zlata, tím vyšší hodnocení hráče.
Zastavím se podrobněji u popisu postav.

Dobří mládci

Krásné dívky
Dobří mládci a Krásné dívky — nejmasovější a hlavní role ve hře. Jsou to mírumilovní obyvatelé, kteří v noci spí a přes den pracují. V noci na ně útočí někdo z lupičů, Zmaj Gorynych a další role, zatímco Vasilisa Moudrá je léčí. S určitou, malou pravděpodobností může Dobrý mladec nebo Červená dívka přežít útok bez poškození (možná přitom ztratí zlato), avšak během následujícího dne po útoku se všichni dozvědí přezdívku hráče. V noci tito hráči neprovádějí žádné tahy, ale analyzují herní situaci na základě zpráv v herním chatu. Přes den se tito hráči rozhodují hlasováním, kdo z nich není Dobrým mladcem nebo Červenou dívkou. Hráč, pro kterého hlasovala většina ostatních hráčů, odchází ze hry, zbývající buď získávají, nebo ztrácejí zlato. Pokud hráči nenašli většinou hlasů nikoho, nikdo z hráčů nebude popraven.

Ivan-Carjevich
Ivan-Carjevich — původně anonymní ochránce mírumilovných obyvatel. V noci kontroluje role ostatních hráčů, jelikož zná pouze jednoho svého spojence — Šedého Vlk. Při přímé účasti Šedého Vlka (který také může kontrolovat role ostatních hráčů) může Ivan-Carjevich místo kontroly v noci zabít jinou postavu. Pokud během kontroly Ivan-Carjevich vidí roli Dobrého mladce nebo Červené dívky u hráče, může je pozvat k sobě a seznámit je se Šedým Vlkem a dalšími Dobrými mladci a Červenými dívkami. Ivanovi může překážet Carjevna-Žabička, která ho může v noci svést, přičemž neodhalí jeho roli ostatním hráčům ve dne. Pokud Ivan sám objeví Carjevnu-Žabičku, může jí nabídnout, aby se připojila k mírumilovným obyvatelům, avšak pokud Carjevna odmítne, zahyne rukou Ivana. Zmaj-Gorynych také může bránit Ivanovým kontrolám, ale na rozdíl od Carjevny-Žabičky za dne ostatním hráčům řekne, kdo z nich je Ivan-Carjevich. Přes den se Ivan-Carjevich ničím neliší od ostatních Dobrých mladců.

Šedý Vlk
Šedý Vlk — asistent Ivana-Careviče, jehož bystrý instinkt pomáhá Ivanovi najít další Hodné Mladce a Červené Dívky. Šedý Vlka říká těmto hráčům, kdo je Ivan-Carevič, a také informuje o dalších hráčích s rolemi Hodných Mladců a Červených Dívky. Pokud Vlka odhalí zbojník nebo jiný protivník, okamžitě o tom informuje Ivana-Careviče, aby mohl následující noc podniknout kroky. Pokud na Vlka zaútočí Carovna-Zápotěžka, promění se v obyčejného Hodného mladce a nemůže kontrolovat nikoho, zatímco Carovna nezjistí, že to ve skutečnosti byl Šedý Vlka, protože Vlka v noci nespí. Nicméně sám Vlka si během dne zjistí, kdo z hráčů je Carovna-Zápotěžka, a může se pokusit přimět ostatní Hodné Mladce a Červené Dívky, které přivedl k Ivanovi-Carevičovi, hlasovat pro popravu Carovny-Zápotěžky. Také následující noc se může pokusit anonymně přimět Carovnu-Zápotěžku na stranu mírumilovných, aby se nikoho z nich nedotkla. Vlka v noci se může obětovat, aby zachránil Ivana-Careviče nebo Vasilisu Premudrou, pokud se domnívá, že by se mohli dostat pod útok zbojníků, nebo byli zombírovaní Koštěm (Vlka má vrozenou imunitu na kouzla Koštěte), ale po oběti Vlk vypadne ze hry.

Vasilisa Předmětná
Vasilisa Předmětná — hraje za mírumilovné, avšak ti o ní nevědí, protože Vasilisa je velmi skromná. Také Vasilisa Premudrá, když léčí, se na nic neptá a jako dobrý doktor léčí všechny bez výjimky. Ale pokud její lék vypije Koště, Liho nebo Lešij — nebudou žít déle než jeden den, protože Vasilisa léčí pouze lidi. Hada Gorynyče nebo Kočka-Bajuna léky Vasilisy Premudré také nepomohou, ale ani neublíží. Také na Vasilisu v noci neútočí Kočka-Bajun, protože Vasilisa nechodí do Bezživotného Lesa pro léčivé byliny. Kromě toho ženské kouzla Carovny-Zápotěžky na Vasilisu nefungují. Pokud se jejího pacienta pokusí zabít dvakrát, medicína bude bezmocná. Vasilisa také nezachrání před magickými útoky, například před prokletím Lihem. Během dne se Vasilisa chová jako Červená Dívka, a pouze letmý, mírně smutný pohled může trochu naznačit, že je nejlepším lékařem v Třetím království.

Zbojník
Zbojníci, na rozdíl od všech předchozích rolí, se znají navzájem, protože žijí v jednom Doupěti, a také znají Lesního Muže a Baby-Jagu, takže mohou jednat koordinovaně hned od prvního kola. Ale pouze Vůdce bandy provádí akce v noci a nehlasuje během dne, zatímco ostatní Lupiči se snaží usilovně převlékat za Hodné Chlapce a Červené Dívky. Pokud Vůdce vypadne ze hry z jakéhokoli důvodu, jeho místo okamžitě zaujme jeden z zbývajících Lupičů. V první řadě se Lupiči snaží neutralizovat Ivana-Careviče, dokud neshromáždí dostatek sil z Hodných Chlapců a Červených Dívěk pro aktivní odpor Lupiči během dne.

Lesní Muž
Lesní Muž v noci špehuje pro Lupiči, informuje je o nalezených rolích v jejich Doupěti, ale během dne nehlasuje, protože nežije v vesnici. Ostatní hráči však mohou hlasovat pro Lesního Muže a tím ho odsoudit. Protože Lesní Muž pochází z bažin, nemůže ho svést Princezna-Žába, a pokud se o to pokusí, Lesní Muž označí její dům, a obyvatelé vesnice tak zjistí, kdo vlastně je. Lesní Muž se také nemusí obávat kouzel Koštěje, ale Vasilisa ho může vyléčit až k smrti. Pokud se Kočka-Bajun pokusí zaútočit na Lesního Muže, riskuje, že přijde o své železné drápy, a bude muset poté uspat oběti pouze svým mručením.

Baba-Jaga
Baba-Jaga také pracuje spolu s Lupiči, v noci kouzlí: může buď uvrhnout nemoc na ostatní hráče, nebo chránit někoho z ally od útoku. Její kouzla jsou dokonce silnější než prokletí Kosti. Během dne je Baba-Jaga také aktivní: toho, kdo je pod její ochranou, nelze odsoudit ani většinou hlasů. Nicméně zásoba kouzelných kořenů pro denní ochranu je omezená, takže Baba-Jaga nemůže chránit někoho, včetně sebe, více než třikrát za hru. Přitom během dne Baba-Jaga přetváří se na obyčejnou Červenou Dívku a hlasuje se všemi.

Had-Gorynych
Had-Gorynych v noci létá nad vesnicemi, lesy a bažinami a přepadá, přičemž přes den hraje roli přepadeného. Ve dne Drak spí, takže nehlasuje, ale může být popraven většinou hlasů. Drak je velmi nebezpečný pro všechny, zvlášť pro Loupežníky a Ivana Caroviče. Drakovi je jedno, koho přepadá, ale pokud ho odhalí Vlk nebo Lesník, může se stát cenným spojencem. Pokud se Draka zabije v noci, lze s určitou pravděpodobností získat velmi cenný předmět — Drakovou Kůži, která ochrání svého majitele jednou před fyzickým útokem.

Zlý Jednooký
Zlý Jednooký v noci zabíjí všechny, kdo mu přijdou do cesty, a koho zabít nemůže (Lesníka, Kočka-Bajuna nebo Draka Gorynyče) — proklíná, takže kdokoliv, kdo se pokusí komunikovat s prokletým té samé noci, zemře během dne. Sám prokletý při tom také zahyne, jen Kočka-Bajun nezahyne, ten si jednoduše lehne spát, aby nabral síly a vynechal další noc. Zachránit od prokletí Zlého může pouze Baba Jaga. Prokletí neplatí ani na toho, kdo porazil Kočku-Bajuna: ten, stejně jako Kočka, si jednoduše lehne spát a vynechá svou akci.

Carovna-Ryba
Carovna-Ryba nemůže vyhrát ve hře, ale může si vydělat spoustu peněz sváděním ostatních hráčů v noci. Sváděný při tom vynechává akci. Ryba nemůže svést Vasilisu Přebornou, a měla by se také vyhýbat Lesníkovi, který ji prozradí všem následující den. Pokud Ivan Carovič nebo Vůdce Loupežníků najdou Rybu, mohou ji pozvat na stranu mírumilovných nebo Loupežníků, přičemž Ivan nepřijímá odmítnutí od Ryb, zatímco Vůdce není tak vybíravý. Ale Carovna je dost chytrá, může se stát dvojitým agentem, protože i když sama nemůže vyhrát, — je to skvělá šance nabrat zlato, protože šance dojít do konce hry výrazně vzrůstají! Ve dne se Carovna-Ryba přestrojí za Červenou Dívku a hlasuje se všemi.

Kostěj Nesmrtelný
Kostěj Nesmrtelný žije ve svém zámku. V noci chodí po okolních vesnicích a zombíruje Dobré Mladce a Červené Dívky, které přecházejí k němu na službu a bezpodmínečně plní všechny pokyny. Pokud se odmítnou vykonat příkaz, například hlasovat během dne jinak než řekl Kočej, nebo psát zprávy během dne v chatu, pokud to Kočej zakázal, Sluhovi Kočeje hrozí smrt. Tímto způsobem může Kočej ovlivnit výsledky hlasování během dne, přestože sám osobně nehlasuje. Pokud Kočeje zabijí, všechny jeho oběti také zemřou. Vasilisa může vyléčit Služebníka Kočeje, který se pak vrací zpět k své původní roli. Zmaj-Gorynyč a Vlk mají vrozenou imunitu vůči zombírování, takže je Kočej žádným způsobem nemůže obrátit k sobě na službu. Také Vlk může zachránit Ivana nebo Vasilisu tím, že se obětuje. Zachránění Vlkem získávají Vlkou imunitu vůči zombírování.

Kočka-Bajun
Kočka-Bajun žije v lese, v noci loví. Ve dne spí ve svém doupěti, takže se neúčastní hlasování. Nicméně ve dne ho mohou popravit většinou hlasů. Kočka může útočit dvěma způsoby: mručením — a tehdy její oběť usne a nemůže chodit v noci, ani hlasovat následující den, — nebo zabíjet okamžitě železnými drápy. Útok drápy nefunguje na Zmaj-Gorynyče a pokud zaútočí na Lesního muže, Kočka může zůstat bez drápů! Licho nemůže proklít Kočku, která po prokletí jen usne na jednu noc. Pokud někdo dokáže porazit Kočku-Bajuna, uzdraví se od jakékoli nemoci a neduhu, včetně prokletí Licha. Tato schopnost Kočky zůstává u hráče až do konce hry. Sluhové Kočeje nemohou během dne hlasovat za Kočku, ale mohou nepřímo zjistit, kdo Kočka je, aniž by o tom informovali Kočeje. Kočka-Bajun nespolupracuje s Ivanem nebo Loupežníky, takže oni jsou pro Kočku — primární cíl.
Používané technologie
Pro vývoj hry jsem zvolil technologii bezserverového počítání (serverless) založenou na OpenFaaS, protože je dost jednoduchá na organizaci hry a zároveň dost vyspělá, aby umožnila psát složitá herní pravidla bez zbytečných komplikací. Také budu používat klastr Kubernetes, protože tento způsob nasazení aplikací umožňuje poměrně snadno a spolehlivě dosáhnout rychlé implementace a možnosti snadného škálování. Pro vytvoření herní logiky lze vystačit pouze s OpenFaaS, nicméně se také pokusím vytvořit Vypravěče jako samostatný kontejner, abych porovnal složitost implementace. Jako hlavní programovací jazyk pro mikroslužby a funkce jsem zvolil , protože jej už delší dobu studuji ve svém volném čase jako náhradu za Perl, a pro interakci uživatelů s mikroslužbami a funkcemi bude používán js na základě nějakého frameworku. O konečném rozhodnutí budu hovořit v příslušném článku cyklu. Pro komunikaci funkcí mezi sebou jsem zvolil NATS.io, protože s ní mám již dřívější zkušenost a její integrace do Kubernetes je poměrně snadná.
Oznámení
- Úvod
- Nastavení vývojového prostředí, rozdělení úkolu na funkce
- Práce na backendu
- Práce na frontendu
- Nastavení CICD, organizace testování
- Spuštění zkušební hry
- Závěry
Zdroj: habr.com
