"Nya Legender". För dev, ops och nyfikna mÀnniskor

"Nya Legender". För dev, ops och nyfikna mÀnniskor

PÄ begÀran av lÀsare inleds en stor serie artiklar om tillÀmpningen av serverlösa berÀkningsteknologier för att utveckla verkliga applikationer. I denna serie kommer vi att titta pÄ applikationsutveckling, testning och leverans till slutanvÀndare med hjÀlp av moderna verktyg: mikrotjÀnstarkitektur för applikationer (i serverless-version, baserad pÄ OpenFaaS), en kluster kubernetes för distribution av applikationen, databaser MongoDB, fokuserad pÄ molnklustring och tillÀmpning, samt en molnbuss NATS. Applikationen implementerar spelet "Byliny", en av varianterna av det populÀra salongsspelet "Mafia".

Vad Àr "Byliny"?

Det Àr en variant av spelet "Mafia", Àven kÀnt som "Werewolf". Det bygger pÄ ett lagspel dÀr deltagarna steg för steg ska ta reda pÄ vem som Àr vem och försöka vinna. TyvÀrr försvinner en viktig del av spelet, det personliga interaktionen, nÀr man spelar online, och reglerna för klassisk "Mafia" Àr ganska enkla, sÄ för en mer icke-linjÀr och intressant spelupplevelse lÀggs vanligtvis andra karaktÀrer till, men de grundlÀggande dragen av originalet "Mafia" bevaras, till exempel skiftet mellan dag och natt, drag enbart pÄ natten, samt allianser mellan deltagarna. En viktig skillnad nÀr man spelar online Àr att spelledaren (den sÄ kallade SpelmÀstaren, BerÀttaren) vanligtvis Àr ett datorprogram.

Spelbeskrivning

Spelreglerna som jag vill implementera Àr hÀmtade frÄn en gammal IRC-bot som jag sparade i mitt personliga arkiv för cirka 10 Är sedan. "Byliny" har en bakgrundshistoria som inleder varje spel:

I det trettionde kungariket, det trettionde riket, bortom sju hav, bodde ett par byar, och i dem Duktiga unga mĂ€n och Sköna mö. De sĂ„dde sĂ€d och gick till den nĂ€rliggande skogen för att plocka svamp och bĂ€r... SĂ„ fortsatte det frĂ„n generation till generation, tills en fruktansvĂ€rd katastrof skakade jorden och ondskan började sprida sig över vĂ€rlden! NĂ€tter blev lĂ„nga och kalla, och i mörkret rörde sig skrĂ€mmande och onda varelser i skogen och kom in i byn. Enstaka flög Zmey Gorynych och började stjĂ€la de Sköna möerna och ta allt vĂ€rdefullt frĂ„n bönderna. Den skadliga och giriga Baba Yaga, som flög in pĂ„ sin sopkvast frĂ„n avlĂ€gsna skogar, förvirrade invĂ„narnas sinnen, och till och med nĂ„gra övergav sina yrken och tog till skogen för att bli banditer, dĂ€r de samlade en liga. Leshiy, som kunde förvandla sig till trĂ€d och buskar, började han övervaka de fredliga bönderna och tjĂ€nade pĂ„ banditerna, snokande efter om de goda pojkarna planerade nĂ„got för att befria sina byar frĂ„n orĂ€ttvisor. De goda pojkarna och de röda flickorna, uttrĂ„kade av banditernas anfall, och fruktansvĂ€rda dödar genom det hemska Varlikens Enögde, samlade guld och bjöd in en berömd krigare frĂ„n grannstaden — Ivan Tsarevich, som lovade att befria byn frĂ„n banditerna. PĂ„ en glĂ€nta i skogen rĂ€ddade Ivan frĂ„n en ofrĂ„nkomlig undergĂ„ng GrĂ„ Vargen, som hade fallit i en fĂ€lla satt av banditerna. I gengĂ€ld lovade Vargen att informera Tsarevich om olika skogsvarelser. En kĂ€nd lĂ€kare passerade Vasilisa den Kloka, och nĂ€r hon sĂ„g elĂ€ndet stannade hon för att ta hand om de invĂ„nare som drabbats av attackerna frĂ„n de onda. Bakom skogen dök ett svart slott upp, dĂ€r, enligt rykten, hade bosatt sig Koschei den Odödlige, varje natt besökte han byarna och förtrollade de goda pojkarna och de röda flickorna, sĂ„ att de inte vĂ„gade trotsa hans order, alla gjorde som han sa. Och i den Livlösa Skogen hade bosatt sig Katten-Bayun, och den som mötte honom somnade genast in i en dödlig sömn efter hans sagor eller dog av hans jĂ€rnklor.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Tredje kungariket

Som redan syns, delas spelarna upp i flera grupper:

  • fredliga invĂ„nare (god pojke, röda flickor, Ivan Tsarevich, GrĂ„ Varg och Vasilisa den Kloka)
  • banditer (sjĂ€lva banditerna, samt Baba Yaga och Leshiy)
  • oberoende (Zmey Gorynych, Varliken Enögde, Tsarevna Grodan, Koschei den Odödlige, Katten-Bayun)

Spelets mÄl, som nÀmnts ovan, Àr att överleva och vinna. MotstÄndarna mÄste pÄ ett eller annat sÀtt lÀmna spelet, och de oberoende bör ocksÄ överleva till spelets slut. I spelet finns det guld, en slags spelvaluta som spelarna tjÀnar enbart inuti spelet. De som vinner fÄr guld. Ju mer guld, desto högre blir spelarens ranking.

LÄt mig beskriva karaktÀrerna lite mer detaljerat.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
God pojke

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Röda flicka

God pojke och Röda flicka — den mest folkrika och grundlĂ€ggande rollen i spelet. Det Ă€r fredliga invĂ„nare som sover pĂ„ nĂ€tterna och arbetar pĂ„ dagarna. PĂ„ natten attackeras de av nĂ„gon av rövarna, Zmey Gorynych och andra roller, medan Vasilisa Pramudra lĂ€ker dem. Med viss, liten sannolikhet kan en God Ungman eller Röd Jungfru överleva en attack utan skada (kanske förlorar de guld), men alla fĂ„r veta spelarens alias nĂ€sta dag efter attacken. PĂ„ natten gör dessa spelare inga drag, utan analyserar spelsituationen utifrĂ„n meddelanden i spelchatten. PĂ„ dagen röstar dessa spelare för att avgöra vem av dem som inte Ă€r God Ungman eller Röd Jungfru. Den spelare som fĂ„r majoriteten av rösterna frĂ„n andra spelare tas bort frĂ„n spelet, medan de kvarstĂ„ende fĂ„r eller förlorar guld. Om spelarna inte valt nĂ„gon med majoritetsröster, kommer ingen av spelarna att halshuggas.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Ivan Tsarevich

Ivan Tsarevich — en ursprungligen anonym beskyddare av fredliga invĂ„nare. PĂ„ nĂ€tterna kontrollerar han rollerna för andra spelare, eftersom han bara kĂ€nner till en av sina allierade — den GrĂ„ Vargen. Med den GrĂ„ Vargens direkta deltagande (som ocksĂ„ kan kontrollera rollerna för andra spelare) kan Ivan Tsarevich, istĂ€llet för att kolla, döda en annan karaktĂ€r pĂ„ natten. Om Ivan Tsarevich som resultat av sin kontroll ser rollen som God Ungman eller Röd Jungfru hos en spelare, kan han bjuda in dem till sig och introducera dem för den GrĂ„ Vargen och andra Goda Ungar och Röda Jungfrur. Ivan kan bli hindrad av Tsarevna-Lyagushka, som kan fresta honom pĂ„ natten utan att avslöja hans roll för de andra spelarna pĂ„ dagen. Om Ivan sjĂ€lv upptĂ€cker Tsarevna-Lyagushka kan han föreslĂ„ att hon gĂ„r med de fredliga invĂ„narna, men om Tsarevna vĂ€grar, dör hon av Ivans hand. Zmey Gorynych kan ocksĂ„ störa Ivans kontroller, men till skillnad frĂ„n Tsarevna-Lyagushka kommer han pĂ„ dagen att berĂ€tta för de andra spelarna vem som Ă€r Ivan Tsarevich. PĂ„ dagen Ă€r Ivan Tsarevich inget annat Ă€n andra Goda Ungar.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
GrÄ Varg

GrĂ„ Varg — Ivan Tsarevich’s assistant, whose keen sense helps Ivan find other Good Young Men and Red Maidens. The Gray Wolf tells these players who Ivan Tsarevich is and also informs about other players with the roles of Good Young Men and Red Maidens. If the Wolf discovers a robber or another opponent, he promptly reports this to Ivan Tsarevich so that he can take action the next night. If the Princess-Frog attacks the Wolf, he turns into an ordinary Good Young Man and cannot check anyone, while the Princess will not realize that it was actually the Gray Wolf, as the Wolf does not sleep at night. However, the Wolf learns during the day who among the players is the Princess-Frog and can try to persuade the other Good Young Men and Red Maidens that he brought to vote for the execution of the Princess-Frog. Also, the Wolf can anonymously try to persuade the Princess-Frog to side with the peaceful villagers that night so she does not harm any of them. At night, the Wolf can sacrifice himself to save Ivan Tsarevich or Vasilisa the Wise if he suspects they might be attacked by robbers or have been zombified by Koschei (the Wolf has innate immunity to Koschei's charms), but after sacrificing himself, the Wolf is out of the game.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Vasilisa den Kloka

Vasilisa den Kloka — plays for the peaceful villagers, although they are unaware of her presence, as Vasilisa is very modest. Additionally, Vasilisa the Wise does not ask questions when healing and treats everyone like a good doctor. However, if her medicine is consumed by Koschei, LikhĐŸ, or Leshiy, they do not have long to live since Vasilisa only heals people. Zmey Gorynych or Kot-Bayun will also not benefit from Vasilisa's medicine, but it will not cause them harm either. Furthermore, at night, Kot-Bayun does not bother Vasilisa because she does not go to the Lifeless Forest for medicinal herbs. Also, the female charms of the Princess-Frog do not affect Vasilisa. If her patient is attempted to be killed twice, medicine will prove useless. Vasilisa cannot save from magical attacks, such as a curse from LikhĐŸ. During the day, Vasilisa behaves like a Red Maiden, and only a fleeting, slightly sad glance may hint that she is the best healer in the Three-Nine Kingdom.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
RĂ€pare

RÀpare, till skillnaden frÄn alla tidigare roller, kÀnner de varandra, eftersom de bor i samma Lya, och kÀnner ocksÄ Leshiy och Baba Yaga, sÄ de kan agera samordnat frÄn första draget. Men endast ledaren för gÀnget utför handlingar pÄ natten och röstar inte pÄ dagen, medan de andra Riddarna noggrant lÄtsas vara Goda Ungdomar och Röda Flickor. Om ledaren lÀmnar spelet av nÄgon anledning tar en av de ÄterstÄende Riddarna omedelbart hans plats. Först och frÀmst försöker Riddarna att slÄ ut Ivan Tsarevich, innan han har samlat tillrÀckligt med styrka frÄn de Goda Ungdomarna och Röda Flickorna för att aktivt motstÄ Riddarna pÄ dagen.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Leshiy

Leshiy spionerar pÄ natten för Riddarna, meddelar dem om hittade roller i deras Lya, men röstar inte pÄ dagen eftersom han inte bor i byn. Andra spelare kan dock rösta för Leshiy och pÄ sÄ sÀtt döma honom. Eftersom Leshiy kommer frÄn trÀsket kan han inte bli förförd av Tsarevna Grodan, och om hon försöker, sÄ kommer Leshiy att markera hennes hus, sÄ att byborna fÄr veta vem hon verkligen Àr. Leshiy behöver inte vara rÀdd för Koshcheys besvÀrjelser, men Vasilisa kan skada honom till döds. Om Kot-Bayun försöker attackera Leshiy riskerar han att förlora sina jÀrnklaffar, och sen mÄste Kot döva sina offer med bara sitt mjauande.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Baba Yaga

Baba Yaga fungerar ocksÄ tillsammans med Riddarna, trollar pÄ natten: hon kan antingen Ädra andra spelare sjukdom eller skydda nÄgon av sina allierade frÄn attack. Hennes magi Àr till och med starkare Àn Lichs förbannelse. PÄ dagen Àr Baba Yaga ocksÄ aktiv: den som hon skyddar kan inte dömas, Àven med majoritetens röster. Dock Àr hennes reserver av magiska rötter för dagligt skydd begrÀnsade, sÄ Baba Yaga kan inte skydda nÄgon, inklusive sig sjÀlv, mer Àn tre gÄnger per spel. Under dagen lÄtsas Baba Yaga ocksÄ vara en vanlig Röd Flicka och röstar tillsammans med alla andra.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Zmey Gorynych

Zmey Gorynych Flyger pĂ„ natten över byar, skogar och trĂ€sk och sysslar med rĂ„n, blottar under dagen sin roll som rĂ„nad. PĂ„ dagen sover Zmey och röstar dĂ€rför inte, men kan dömas till döden med enkel majoritet. Zmey Ă€r mycket farlig för alla, sĂ€rskilt för Rövarna och Ivan Tsarevich. Zmey bryr sig inte om vem han rĂ„nar, men om han avslöjas av Vargen eller Leshy kan han bli en vĂ€rdefull allierad. Om Zmey dödas pĂ„ natten kan man, med viss sannolikhet, fĂ„ en mycket vĂ€rdefull föremĂ„l — Zmeys Skinn, som skyddar sin Ă€gare en gĂ„ng frĂ„n en fysisk attack.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Enögt LikhĐŸ

Enögt LikhĐŸ Dödar pĂ„ natten alla som korsar hans vĂ€g, och de han inte kan döda (Leshy, Kot-Bayun, eller Zmey Gorynych) förbannar han, sĂ„ att alla som försöker interagera med den fördömda samma natt kommer att dö inom dagen. Den fördömda dödas ocksĂ„, men Kot-Bayun överlever; han lĂ€gger sig bara ner för att sova och samla kraft, vilket leder till att han missar sitt drag nĂ€sta natt. Endast Baba Yaga kan rĂ€dda den fördömda frĂ„n förbannelsen. Förbannelsen gĂ€ller inte heller den som besegrade Kot-Bayun: precis som Kot lĂ€gger han sig ned för att sova och missar sitt drag.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Prinsessan Groda

Prinsessan Groda kan inte vinna spelet, men kan tjĂ€na mycket pengar genom att förföra andra spelare pĂ„ natten. Den förförda spelaren missar sitt drag. Grodan kan inte förföra Vasilisa den Kloka och bör ocksĂ„ undvika Leshy, som kommer att avslöja henne nĂ€sta dag. Om Ivan Tsarevich eller Rövarens Ledare hittar Grodan kan de bjuda in henne till de fredliga invĂ„narna eller Rövarna, dĂ€r Ivan inte accepterar Grodans avslag, medan Ledaren Ă€r mindre krĂ€sen. Men Prinsessan Ă€r tillrĂ€ckligt listig, kan bli en dubbelagent, för trots att hon ensam inte kan vinna — Ă€r det en utmĂ€rkt chans att samla guld, eftersom chansen att nĂ„ spelets slut ökar kraftigt! PĂ„ dagen lĂ„tsas Prinsessan Groda vara den Röda Flickan och röstar tillsammans med alla andra.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Koschei den Odödlige

Koschei den Odödlige bor hos sig sjÀlv i slottet. PÄ nÀtterna vandrar han runt i de omgivande byarna och zombifierar de Goda MÀnnen och Röda Flickorna, som övergÄr till hans tjÀnst och lydigt utför alla uppdrag. Om de vÀgrar att följa en order, som exempelvis att rösta pÄ ett annat sÀtt Àn vad Kosjey befallt under dagen, eller att skriva meddelanden i chatten under dagen om Kosjey har förbjudit det, dör Kosjeys tjÀnare. PÄ sÄ sÀtt kan Kosjey pÄverka röstresultaten under dagen, Àven om han sjÀlv inte röstar. Om Kosjey dödas, dör ocksÄ alla hans offer. Vasilisa kan hela Kosjeys tjÀnare, som sedan ÄtergÄr till sin ursprungliga roll. Zmey-Gorynych och Vargen har medfödd immunitet mot zombifiering, sÄ Kosjey kan inte ta dem till sin tjÀnst Àven om han skulle vilja. Dessutom kan Vargen rÀdda Ivan eller Vasilisa frÄn fara genom att offra sig sjÀlv. De som rÀddas av Vargen fÄr Vargens immunitet mot zombifiering.

"Nya Legender". För dev, ops och nyfikna mÀnniskor
Katten-Bayun

Katten-Bayun bor i skogen, jagar pĂ„ nĂ€tterna. PĂ„ dagen sover han i sin ho, vilket innebĂ€r att han inte deltar i röstningen. Men under dagen kan han avrĂ€ttas med röstuppbĂ„d. Katten kan attackera pĂ„ tvĂ„ sĂ€tt: genom att spinna — dĂ„ somnar hans offer och kan inte röra sig pĂ„ natten, samt rösta nĂ€sta dag — eller genom att döda med sina jĂ€rnklor. Klösmannen fungerar inte pĂ„ Zmey-Gorynych, och om han attackerar Leshiy kan Katten till och med förlora sina klor! Likhots kan inte förbanna Katten, som efter fördömelsen bara kommer att sova en natt. Om nĂ„gon lyckas besegra Kot-Bayun, kommer de att bota alla sjukdomar och plĂ„gor, inklusive Likhots förbannelse. Denna katts förmĂ„ga behĂ„lls av spelaren till slutet av spelet. Kosjeys tjĂ€nare kan inte rösta för Katten under dagen, men kan indirekt ta reda pĂ„ vem Katten Ă€r utan att informera Kosjey.

AnvÀnda teknologier

För att skriva spelet valde jag serverlösa berÀkningar (serverless) baserat pÄ OpenFaaS, eftersom det Àr tillrÀckligt enkelt för att organisera spelet, samtidigt som det Àr tillrÀckligt utvecklat för att skriva komplexa spelregler utan onödiga komplikationer. Jag kommer ocksÄ att anvÀnda ett Kubernetes-kluster, eftersom detta sÀtt att distribuera applikationer gör det ganska enkelt och pÄlitligt att fÄ snabb distribution och möjligheten till enkel skalning. För att skapa spelloopar kan man klara sig med endast OpenFaaS, men jag kommer Àven att försöka göra en SagoberÀttare i form av en separat container för att jÀmföra svÄrighetsgraden av implementeringen. Som huvudsprÄk för mikrotjÀnster och funktioner valde jag Go, eftersom jag har studerat det pÄ fritiden istÀllet för Perl, och för att interagera med anvÀndare genom mikrotjÀnster och funktioner kommer jag att anvÀnda js baserat pÄ nÄgot ramverk. Jag kommer att berÀtta om det slutgiltiga beslutet i den relaterade artikeln i cykeln. För kommunikationen mellan funktionerna valde jag NATS.io, eftersom jag har stött pÄ det tidigare, och det har ganska lÀtt integration i Kubernetes.

TillkÀnnagivande

  • Introduktion
  • Installation av utvecklingsmiljö, uppdelning av uppgift i funktioner
  • Arbete med backend
  • Arbete med frontend
  • InstĂ€llning av CICD, organisering av testning
  • Start av provspel
  • Sammanfattning

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster