"Nové eposy". Pro vývojáře, operátory a zvědavé lidi

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi

Kvůli četným žádostem čtenářů začíná velká série článků o využití bezserverové výpočetní technologie k vývoji skutečné aplikace. Tento cyklus bude zahrnovat vývoj aplikací, testování a dodávání koncovým uživatelům pomocí moderních nástrojů: mikroservisní aplikační architektura (ve verzi bez serveru, založená na OpenFaaS), shluk guvernéři pro nasazení aplikací, databáze MongoDB, zaměřený na cloud clustering a aplikace, stejně jako cloud bus NATS. Aplikace implementuje hru "Epics", jednu z variant oblíbené společenské hry "Mafia".

Co jsou „Byliny“?

Jedná se o variantu hry „Mafia“, známé také jako „Vlkodlak“. Je založen na týmové hře, ve které se účastníci musí krok za krokem učit, kdo je kdo, a snažit se vyhrát. Bohužel při hraní online zmizí tak důležitá složka hry, jako je osobní interakce, a pravidla klasické „Mafie“ jsou poměrně jednoduchá, proto se pro nelineárnější a zajímavější hru obvykle přidávají další postavy, ale obecně jsou zachovány hlavní rysy původní „mafie“, například změna dne a noci, přesuny pouze v noci, stejně jako spojenectví mezi účastníky. Dalším důležitým rozdílem mezi hraním online je to, že hostitel (aka Game Master, Storyteller) je obvykle počítačový program.

Popis hry

Pravidla hry, kterou chci implementovat, jsou převzata ze starého irc bota, kterého jsem si uložil do svého osobního archivu asi před 10 lety. „Epics“ má svůj příběh, kterým každá hra začíná:

Ve vzdáleném království, ve třicátém státě, za sedmi moři, žilo a žilo několik vesnic a v nich Dobří kolegové и Krásné dívky. Zaseli chleba a chodili do okolního lesa sbírat houby a lesní plody... A tak to pokračovalo ze století do století, dokud Zemí neotřásla strašlivá katastrofa a zlo se začalo šířit po celém světě! Noci se staly dlouhými a chladnými a ve tmě se lesem procházely nevlídné a hrozné bytosti a putovaly do vesnice. Přiletěl odněkud Hada Gorynych a dostal se do zvyku krást Rudé panny a sebrat vesničanům vše cenné. Škodlivý a chamtivý Baba Yaga, která přiletěla na minomet z dalekých lesů, zmátla mysl obyvatel a i někteří se svého řemesla vzdali a odešli do lesa loupit a vytvořili tam partu. Padouši se setkali Šotek, který se uměl proměnit ve stromy a keře, začal sledovat mírumilovné vesničany a sloužit lupičům, vyčmuchal, zda mají Hodní kolegové něco, co by jejich osady zbavilo zlých duchů. Dobří chlapíci a krásné dívky, unavené nájezdy lupičů a hroznými smrtmi z rukou strašných Dash of the One-Eyed, sbíral zlato a pozval slavného zápasníka ze sousedního města - Ivan carevič, který slíbil, že zbaví obec lupičů. Na mýtině v lese Ivan zachránil před jistou smrtí Šedý vlk, který spadl do pasti Loupežníků. Na oplátku Vlk slíbil, že bude careviče informovat o různých lesních zlých duších. Kolem prošel známý léčitel Vasilisa Moudrá, a když viděla potíže, zůstala ošetřovat obyvatele, kteří trpěli útoky těch ušlechtilých. Za lesem se objevil černý palác, ve kterém se podle pověstí usadil Koschei the Deathless, každou noc navštěvoval vesnice a učaroval Dobrým druhům a Rudým pannám, aby se neodvážili neuposlechnout jeho rozkazů, udělali vše, jak řekl. A usadil se v Lese bez života Kočka Baiyuna každý, kdo ho potkal, po jeho pohádkách usnul nebo zemřel jeho železnými drápy.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Daleko vzdálené království

Jak již můžete vidět, hráči jsou rozděleni do několika skupin:

  • civilisté (Dobří kolegové, Rudé panny, Ivan Carevič, Šedý vlk a Vasilisa Moudrá)
  • lupiči (sami lupiči, stejně jako Baba Yaga a Leshy)
  • nezávislý (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey the Immortal, Cat-Bayun)

Cílem hry, jak již bylo zmíněno výše, je zůstat naživu a vyhrát. Protivníci musí tak či onak opustit hru a nezávislí musí také zůstat naživu až do konce hry. Hra má zlato, jakousi herní měnu, kterou hráči vydělávají pouze ve hře. Vítězové obdrží zlato. Čím více zlata, tím vyšší je hodnocení hráče.

Trochu podrobněji se zastavím u popisu postav.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Dobrý společník

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Rudá panna

Dobrý společník и Rudá panna - nejrozšířenější a hlavní role ve hře. Jde o civilisty, kteří v noci spí a přes den pracují. V noci je přepadne jeden z lupičů, Had Gorynych a další role, a Vasilisa Moudrý je uzdraví. S nějakou malou pravděpodobností může Good Fellow nebo Red Maiden přežít útok bez poškození (možná při tom ztratí zlato), nicméně každý druhý den po útoku pozná hráčovu přezdívku. V noci tito hráči neprovádějí žádné tahy, ale analyzují herní situaci na základě zpráv v herním chatu. Během dne se tito hráči hlasováním rozhodnou, kdo z nich není Good Fellow nebo Red Maiden. Hráč, pro kterého hlasovala většina ostatních hráčů, opouští hru, zbývající hráči obdrží nebo prohrají zlato. Pokud si hráči nevyberou nikoho většinovým hlasováním, žádný hráč nebude popraven.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Ivan carevič

Ivan carevič - zpočátku anonymní ochránce civilistů. V noci kontroluje role ostatních hráčů, protože zná pouze jednoho svého spojence - Šedého vlka. Za přímé účasti Šedého vlka (který může kontrolovat i role ostatních hráčů) může Ivan Carevič místo kontroly v noci zabít jinou postavu. Pokud v důsledku kontroly uvidí Ivan Carevič v hráči roli Dobrého kolegu nebo Rudé panny, může je pozvat k sobě a představit je Šedému vlkovi a dalším Hodníkům a Rudým pannám. Ivanovi může překážet Žabí princezna, která ho může v noci svést, aniž by ve dne prozradila jeho roli ostatním hráčům. Pokud Ivan sám objeví Žabí princeznu, může ji pozvat, aby se přidala k civilistům, ale pokud princezna odmítne, umírá rukou Ivana. Had-Gorynych může také zasahovat do kontroly Ivana-Tsareviče, ale na rozdíl od Žabí princezny během dne ostatním hráčům řekne, kdo z nich je Ivan-Carevich. Během dne se Ivan Carevič neliší od ostatních Good Fellows.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Šedý vlk

Šedý vlk - asistent Ivana Careviče, jehož bystrý čich pomáhá Ivanovi najít další Dobré Fellows a Rudé panny. Šedý vlk těmto hráčům říká, kdo je Ivan carevič, a také informuje o dalších hráčích v rolích Good Fellows a Red Maidens. Pokud Vlk objeví lupiče nebo jiného nepřítele, okamžitě informuje Ivana Careviče, aby mohl příští noc jednat. Pokud Vlka napadne Žabí princezna, promění se v obyčejného Hodného chlapíka a nemůže nikoho kontrolovat a princezna nepozná, že to byl ve skutečnosti Šedý vlk, protože Vlk v noci nespí. Sám Vlk však během dne zjistí, kdo z hráčů je Žabí princezna, a může se pokusit přesvědčit zbytek Hodných kamarádů a Rudých panen, které přivedl k Ivanu Carevičovi, aby hlasovali pro popravu Žáby. Princezna. Také další noc se může pokusit anonymně přesvědčit Žabí princeznu na stranu civilistů, aby se nikoho z nich nedotkla. Vlk se může v noci obětovat, aby zachránil Ivana Careviče nebo Vasilisu Moudrou, pokud předpokládá, že náhle padnou pod útokem lupičů, nebo je Koshchei zombifikoval (Vlk má vrozenou imunitu vůči Koshcheiovým kouzlům), ale po sebeobětování Vlk vypadne ze hry.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Vasilisa Moudrá

Vasilisa Moudrá - hraje pro civilisty, ale oni o ní nevědí, protože Vasilisa je velmi skromná. Také Vasilisa Moudrá, když léčí, nevyptává se a jako správný lékař ošetří každého. Ale pokud Koschey, Likho nebo Leshy vypijí její lék, nebudou žít déle než jeden den, protože Vasilisa léčí pouze lidi. Lék Vasilisy moudré také nepomůže hadovi Gorynychovi nebo Cat-Bayunovi, ale ani neublíží. Kot-Bayun se také Vasilisy v noci nedotkne, protože Vasilisa nechodí do lesa bez života kupovat léčivé byliny. Navíc na Vasilisu nefungují ženské půvaby Žabí princezny. Kdyby se pokusili zabít jejího pacienta dvakrát, medicína by byla bezmocná. Vasilisa vás nezachrání před magickými útoky, například před kletbou Dashing. Přes den se Vasilisa chová jako Rudá panna a jen letmý, trochu smutný pohled může trochu napovědět, že je nejlepší léčitelkou ve Far Far Away Kingdom.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Darebák

Loupeží, na rozdíl od všech předchozích rolí se znají, protože žijí ve stejném Doupěti a znají také Leshy a Baba Yaga, takže mohou hrát ve shodě hned od prvního pohybu. Ale pouze vůdce gangu provádí akce v noci a ve dne nehlasuje, zatímco zbytek lupičů pilně předstírá, že jsou Good Fellows a Red Maidens. Pokud Vůdce z jakéhokoli důvodu opustí hru, jeden ze zbývajících Rogue okamžitě zaujme jeho místo. Za prvé, lupiči se snaží zneškodnit Ivana careviče, dokud neshromáždí dostatek sil od Good Fellows a Red Maiden, aby se během dne mohli aktivně postavit lupičům.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Goblin

Goblin v noci špehuje lupiče, informuje je o rolích nalezených v jejich Doupěti, ale přes den nehlasuje, protože nebydlí ve vesnici. Ostatní hráči však mohou hlasovat pro Leshyho a tím ho popravit. Protože Leshy pochází z bažin, nemůže se nechat svést Žabí princeznou, a pokud se o to pokusí, Leshy označí její dům a vesničané zjistí, kdo doopravdy je. Leshem by se neměl bát Koshcheiova kouzla, ale Vasilisa ho může vyléčit k smrti. Pokud se Cat-Bayun pokusí zaútočit na Leshyho, riskuje, že ztratí své železné drápy, a pak bude muset Kocour ukolébat oběti ke spánku pouhým jeho vrněním.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Baba Yaga

Baba Yaga Spolupracuje také s lupiči a kouzlí v noci: může buď poslat nemoc jiným hráčům, nebo chránit jednoho ze svých spojenců před útokem. Její čarodějnictví je ještě silnější než Likhova kletba. Přes den je aktivní i Baba Yaga: nikoho pod její ochranou nelze popravit ani většinou hlasů. Zásoba magických kořenů pro denní ochranu je však omezená, takže Baba Yaga nemůže nikoho, včetně sebe, chránit více než třikrát za hru. Baba Yaga během dne předstírá, že je obyčejná Rudá panna a hlasuje se všemi ostatními.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Drak

Drak v noci létá nad vesnicemi, lesy a bažinami a zapojuje se do loupeží, přičemž ve dne odhaluje roli okradeného. Přes den Had spí, takže nehlasuje, ale může být popraven většinou hlasů. Had je velmi nebezpečný pro všechny, zvláště pro Loupežníky a Ivana Careviče. Hadovi je jedno, koho okrade, ale pokud ho objeví Vlk nebo Leshy, může se stát cenným spojencem. Pokud zabijete Hada v noci, můžete s určitou pravděpodobností získat velmi cenný předmět - Hadí kůži, která svého majitele jednou ochrání před fyzickým útokem.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
famózně jednooký

famózně jednooký v noci zabíjí každého, kdo se mu připlete do cesty, a koho nemůže zabít (Leshy, Kota-Bayun nebo had Gorynych), toho prokleje, takže každý, kdo se tutéž noc pokusí komunikovat s tím zatraceným, zemře ve dne. . Sám zatracený v tomto případě také umírá, nezemře pouze Kot-Bayun, který si jde prostě lehnout, aby nabral sílu, další noc přeskočí svůj tah. Pouze Baba Yaga může zachránit Likha před kletbou. Kletba se netýká toho, kdo porazil Cat-Bayuna: on, stejně jako Kočka, prostě jde spát a vynechá zatáčku.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Princezna Žába

Princezna Žába nemůže vyhrát hru, ale může vydělat spoustu peněz tím, že v noci svádí ostatní hráče. Pokušený mine svůj tah. Žába nemůže svést Vasilisu Moudrou a také by se měla vyhýbat Leshymu, který ji druhý den všem prozradí. Pokud Carevič Ivan nebo Vůdce lupičů najdou žábu, mohou na svou stranu pozvat civilisty nebo lupiče, zatímco Ivan nepřijme Žabovo odmítnutí, ale vůdce není tak vybíravý. Princezna je ale docela mazaná, může se stát dvojitým agentem, protože i když nemůže vyhrát sama, je to skvělá šance na zisk zlata, protože šance na přežití do konce hry se výrazně zvyšuje! Žabí princezna se přes den vydává za Rudou pannu a hlasuje se všemi společně.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Koschei the Deathless

Koschei the Deathless žije na svém zámku. V noci chodí po okolních vesnicích a zombizuje Good Fellows a Red Maidens, kteří mu přicházejí do služeb a bez pochyby plní všechny rozkazy. Odmítnutím splnit příkaz, například hlasovat během dne jinak, než řekl Koshchei, nebo psát zprávy do chatu během dne, pokud to Koshchei zakázal, Koshchei's Servant zemře. Koschey tak může během dne ovlivňovat výsledky hlasování, i když sám nehlasuje. Pokud je Koshchei zabit, zemřou také všechny jeho oběti. Vasilisa dokáže vyléčit sluhu Koshchei, který se poté vrátí do své původní role. Had-Gorynych a Vlk mají vrozenou imunitu vůči zombifikace, takže Koschey, ať chce, jak chce, je nemůže proměnit ve své služby. Vlk může také pomoci Ivanovi nebo Vasilise z nesnází tím, že se obětuje. Saved by the Wolf získává Wolf imunitu vůči zombifikace.

"Nové eposy". Pro vývojáře, operátory a zvědavé lidi
Kočka Baiyun

Kočka Baiyun žije v lese, v noci loví. Přes den spí ve svém dolíku, takže se hlasování neúčastní. Během dne však může být popraven většinou hlasů. Kočka může zaútočit dvěma způsoby: předení - a pak její oběť usne a nemůže v noci chodit a druhý den nemůže volit - nebo rovnou zabít železnými drápy. Útok drápy na Snake-Gorynycha nefunguje a po útoku na Leshyho může Kočka zůstat úplně bez drápů! Dashing nemůže proklínat Kočku, která po kletbě prostě bude spát jednu noc. Pokud se někomu podaří porazit Kota-Bayuna, bude vyléčen z jakékoli nemoci nebo nemoci, včetně kletby Likh. Tato schopnost Cat zůstává hráči až do konce hry. Koshcheiovi služebníci nemohou přes den hlasovat pro Kočku, ale mohou nepřímo zjistit, kdo Kočka je, aniž by o tom Koshchei informovali. Kot-Bayun nevstupuje do spojenectví s Ivanem nebo Loupežníky, takže jsou pro Kota primárním cílem.

Použité technologie

K napsání hry jsem zvolil bezserverovou výpočetní technologii založenou na OpenFaaS, protože je dostatečně jednoduchá na organizaci hry a zároveň dostatečně pokročilá, aby bylo možné bez zbytečných komplikací psát složitá pravidla hry. Použiji také cluster Kubernetes, protože tento způsob nasazování aplikací umožňuje poměrně jednoduché a spolehlivé rychlé nasazení a možnost snadného škálování. Chcete-li vytvořit herní logiku, můžete si vystačit pouze s OpenFaaS, ale také se pokusím vytvořit Storyteller jako samostatný kontejner pro srovnání složitosti implementace. Jako hlavní programovací jazyk pro mikroslužby a funkce jsem zvolil Go, jelikož jsem to ve svém volném čase dlouho studoval, abych nahradil Perl, a js se bude používat na základě určitého frameworku pro interakci uživatele s mikroslužbami a funkcemi. O konečném rozhodnutí vám řeknu v odpovídajícím článku v seriálu. Pro vzájemnou komunikaci funkcí jsem zvolil NATS.io, protože jsem se s ním již setkal a má poměrně snadnou integraci do Kubernetes.

Oznámení

  • úvod
  • Nastavení vývojového prostředí, rozdělení úkolu do funkcí
  • Backendová práce
  • Frontendová práce
  • Nastavení CICD, organizace testování
  • Spusťte zkušební hru
  • Výsledky

Zdroj: www.habr.com

Přidat komentář