"Nye eposer". For udviklere, ops og nysgerrige mennesker

"Nye eposer". For udviklere, ops og nysgerrige mennesker

På grund af talrige forespørgsler fra læsere begynder en stor serie af artikler om brugen af ​​serverløs computerteknologi til at udvikle en rigtig applikation. Denne cyklus vil dække applikationsudvikling, test og levering til slutbrugere ved hjælp af moderne værktøjer: mikroservice applikationsarkitektur (i en serverløs version, baseret på OpenFaaS), klynge guvernør til applikationsimplementering, database MongoDB, med fokus på cloud clustering og applikation, samt cloud bus NATS. Applikationen implementerer spillet "Epics", en af ​​varianterne af det populære parlor-spil "Mafia".

Hvad er "Epos"?

Dette er en variant af spillet "Mafia", også kendt som "Werewolf". Det er baseret på et holdspil, hvor deltagerne trin for trin skal lære, hvem der er hvem og forsøge at vinde. Desværre, når man spiller online, forsvinder en så vigtig komponent i spillet som personlig interaktion, og reglerne for den klassiske "Mafia" er ret enkle, derfor tilføjes andre karakterer for et mere ikke-lineært og interessant gameplay, men generelt er hovedtrækkene i den originale "Mafia" bevaret, for eksempel ændringen af ​​dag og nat, bevægelser kun om natten, samt alliancer mellem deltagere. En anden vigtig forskel mellem at spille online er, at værten (aka Game Master, Storyteller) normalt er et computerprogram.

Game Description

De spilleregler, som jeg vil implementere, er hentet fra en gammel irc-bot, som jeg gemte i mit personlige arkiv for omkring 10 år siden. "Epics" har en baggrundshistorie, som hvert spil begynder med:

I det fjerne rige, i den tredivte stat, hinsides de syv have, boede og levede flere landsbyer, og i dem Gode ​​kammerater и Smukke piger. De såede brød og gik til den omkringliggende skov for at plukke svampe og bær... Og dette fortsatte fra århundrede til århundrede, indtil en frygtelig katastrofe rystede Jorden og ondskaben begyndte at brede sig over hele verden! Nætterne blev lange og kolde, og i mørket strejfede uvenlige og forfærdelige skabninger i skoven og vandrede ind i landsbyen. Ankommet fra et sted Slange Gorynych og fik for vane at stjæle røde piger og tage alt værdifuldt fra landsbybeboerne. Skadelig og grådig Baba Yaga, som fløj på en morter fra fjerne skove, forvirrede indbyggerne, og endda nogle opgav deres håndværk og gik ind i skoven for at røve, og dannede en bande der. Skurkene mødtes Goblin, som vidste, hvordan man forvandler sig til træer og buske, begyndte han at overvåge fredelige landsbyboere og tjene røverne, idet han opsnusede, om de gode kammerater var i gang med noget for at befri deres bosættelser for onde ånder. Gode ​​kammerater og smukke jomfruer, trætte af røvernes razziaer og frygtelige dødsfald i hænderne på de frygtelige Flot enøjet, samlede guld og inviterede en berømt wrestler fra en naboby - Ivan Tsarevich, der lovede at befri landsbyen for røvere. I en lysning i skoven reddede Ivan fra den sikre død Grå ulv, der faldt i røvernes fælde. Til gengæld lovede Ulven at informere Tsarevich om forskellige skov onde ånder. En berømt healer gik forbi Vasilisa den Vise, og da hun så problemer, blev hun for at pleje de beboere, der havde lidt af de kræsne angreb. Bag skoven dukkede et sort palads op, hvori han ifølge rygterne slog sig ned Koschei den Dødeløse, hver nat besøgte han landsbyerne og forheksede de gode kammerater og røde jomfruer, så de ikke turde adlyde hans ordre, de ville gøre alt, som han sagde. Og slog sig ned i den livløse skov Kat Baiyun, og alle, der mødte ham, faldt i søvn efter hans fortællinger eller døde af hans jernkløer.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Langt langt væk rige

Som du allerede kan se, er spillere opdelt i flere grupper:

  • civile (Good Fellows, Red Maidens, Ivan Tsarevich, Grey Wolf og Vasilisa the Wise)
  • røvere (røverne selv, såvel som Baba Yaga og Leshy)
  • uafhængig (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey the Immortal, Cat-Bayun)

Målet med spillet, som nævnt ovenfor, er at holde sig i live og vinde. Modstandere skal forlade spillet på den ene eller anden måde, og uafhængige skal også forblive i live indtil slutningen af ​​spillet. Spillet har guld, en slags spilvaluta, som spillerne kun tjener inden for spillet. Vinderne modtager guld. Jo mere guld, jo højere er spillerens vurdering.

Jeg vil dvæle lidt mere detaljeret ved beskrivelsen af ​​karaktererne.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
God fyr

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Rød Jomfru

God fyr и Rød Jomfru - den mest udbredte og hovedrolle i spillet. Det er civile, der sover om natten og arbejder om dagen. Om natten bliver de angrebet af en af ​​røverne, Slangen Gorynych og andre roller, og Vasilisa den Vise helbreder dem. Med en lille sandsynlighed kan den gode ven eller den røde jomfru overleve angrebet uden skader (misten muligvis guld i processen), dog vil alle genkende spillerens kaldenavn næste dag efter angrebet. Om natten foretager disse spillere ingen bevægelser, men analyserer spilsituationen baseret på beskeder i spilchatten. I løbet af dagen bestemmer disse spillere ved at stemme, hvem af dem der ikke er den gode ven eller den røde jomfru. Den spiller, der er stemt på af flertallet af andre spillere, forlader spillet, de resterende spillere modtager eller taber guld. Hvis spillere ikke vælger nogen ved flertalsafstemning, vil ingen spiller blive henrettet.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Ivan Tsarevich

Ivan Tsarevich - i første omgang en anonym forsvarer af civile. Om natten tjekker han rollerne for andre spillere, da han kun kender en af ​​sine allierede - den grå ulv. Med direkte deltagelse af den grå ulv (som også kan kontrollere andre spilleres roller), kan Ivan Tsarevich, i stedet for at tjekke, dræbe en anden karakter om natten. Hvis Ivan Tsarevich som et resultat af checken ser rollen som en Good Fellow eller en Red Maiden i en spiller, så kan han invitere dem til sit sted og introducere dem til den Grå Ulv og andre Good Fellows og Red Maidens. Ivan kan blive forstyrret af frøprinsessen, som kan forføre ham om natten uden at afsløre sin rolle for andre spillere i løbet af dagen. Hvis Ivan selv opdager frøprinsessen, kan han invitere hende til at slutte sig til de civile, men hvis prinsessen nægter, dør hun i hænderne på Ivan. Slangen-Gorynych kan også forstyrre Ivan-Tsarevichs checks, men i modsætning til frøprinsessen vil han i løbet af dagen fortælle de andre spillere, hvem af dem der er Ivan-Tsarevich. I løbet af dagen er Ivan Tsarevich ikke anderledes end andre Good Fellows.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Grå ulv

Grå ulv - assistent for Ivan Tsarevich, hvis skarpe lugtesans hjælper Ivan med at finde andre Good Fellows og Red Maidens. Gray Wolf fortæller disse spillere, hvem Ivan Tsarevich er, og informerer også om andre spillere med rollerne som Good Fellows og Red Maidens. Hvis ulven opdager en røver eller en anden fjende, informerer han straks Ivan Tsarevich, så han kan tage affære næste nat. Hvis ulven bliver angrebet af frøprinsessen, bliver han til en almindelig god ven og kan ikke kontrollere nogen, og prinsessen vil ikke vide, at det faktisk var den grå ulv, da ulven ikke sover om natten. Ulven vil dog selv finde ud af i løbet af dagen, hvem af spillerne der er frøprinsessen, og kan forsøge at overtale resten af ​​de gode kammerater og røde jomfruer, som han bragte til Ivan Tsarevich, til at stemme for henrettelse af frøen Prinsesse. Også næste nat kan han forsøge anonymt at overtale frøprinsessen til civile, så hun ikke rører nogen af ​​dem. Ulven kan ofre sig selv om natten for at redde Ivan Tsarevich eller Vasilisa den Vise, hvis han antager, at de pludselig vil falde under røvernes angreb, eller er blevet zombificeret af Koshchei (Ulven har en medfødt immunitet over for Koshcheis charme), men efter selvopofrelsen falder ulven ud af spillet.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Vasilisa den Vise

Vasilisa den Vise - spiller for civile, men de kender ikke til hende, da Vasilisa er meget beskeden. Også Vasilisa den Vise, når hun behandler, stiller ikke spørgsmål og behandler, som en god læge, alle. Men hvis Koschey, Likho eller Leshy drikker hendes medicin, vil de ikke leve længere end én dag, da Vasilisa kun behandler mennesker. Medicinen af ​​Vasilisa den Vise vil heller ikke hjælpe slangen Gorynych eller Cat-Bayun, men de vil heller ikke bringe skade. Kot-Bayun rører heller ikke Vasilisa om natten, da Vasilisa ikke tager til den livløse skov for at købe lægeurter. Derudover virker frøprinsessens kvindelige charme ikke på Vasilisa. Hvis de forsøgte at dræbe hendes patient to gange, ville medicin være magtesløs. Vasilisa vil ikke redde dig fra magiske angreb, for eksempel fra Dashing-forbandelsen. I løbet af dagen opfører Vasilisa sig som en Rød Jomfru, og kun et flygtigt, lidt trist blik kan antyde lidt, at hun er den bedste healer i Far Away Kingdom.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Røver

røvere, i modsætning til alle tidligere roller kender de hinanden, da de bor i den samme hule, og også kender Leshy og Baba Yaga, så de kan optræde i koncert lige fra første træk. Men kun lederen af ​​banden udfører handlinger om natten og stemmer ikke om dagen, mens resten af ​​røverne flittigt foregiver at være Good Fellows og Red Maidens. Hvis lederen forlader spillet af en eller anden grund, overtager en af ​​de resterende Rogues straks hans plads. Først og fremmest forsøger røverne at deaktivere Ivan Tsarevich, indtil han har samlet nok kræfter fra Good Fellows og Red Maidens til aktivt at konfrontere røverne i løbet af dagen.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
træ goblin

træ goblin om natten spionerer han for røverne og informerer dem om rollerne i deres hule, men om dagen stemmer han ikke, da han ikke bor i landsbyen. Andre spillere kan dog stemme på Leshy og dermed henrette ham. Da Leshy kommer fra sumpene, kan han ikke lade sig forføre af Frøprinsessen, og hvis han forsøger, vil Leshy markere hendes hus, og landsbyboerne vil finde ud af, hvem hun egentlig er. Leshem skal ikke være bange for Koshcheis besværgelse, men Vasilisa kan helbrede ham til døden. Hvis Kot-Bayun forsøger at angribe Leshy, risikerer han at miste sine jernkløer, og så bliver Kot nødt til at lulle ofrene i søvn med blot sin spinden.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Baba Yaga

Baba Yaga Han arbejder også sammen med røverne og besværgelser om natten: han kan enten sende sygdom til andre spillere eller beskytte en af ​​sine allierede mod angreb. Hendes hekseri er endnu stærkere end Likhs forbandelse. I løbet af dagen er Baba Yaga også aktiv: nogen under hendes beskyttelse kan ikke henrettes, selv med et flertal. Udbuddet af magiske rødder til beskyttelse i dagtimerne er dog begrænset, så Baba Yaga kan ikke beskytte nogen, inklusive sig selv, mere end tre gange pr. spil. I løbet af dagen foregiver Baba Yaga at være en almindelig Rød Jomfru og stemmer med alle andre.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Trække på

Trække på om natten flyver han over landsbyer, skove og sumpe og begår røveri og afslører rollen som den røvede om dagen. Om dagen sover Slangen, så han stemmer ikke, men han kan henrettes ved flertalsafstemning. Slangen er meget farlig for alle, især for røverne og Ivan Tsarevich. Slangen er ligeglad med, hvem han røver, men hvis han bliver opdaget af Ulven eller Leshy, kan han blive en værdifuld allieret. Hvis du dræber Slangen om natten, kan du med en vis sandsynlighed modtage en meget værdifuld genstand - Snake Skin, som vil beskytte sin ejer én gang mod fysiske angreb.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Strålende enøjet

Strålende enøjet om natten dræber han alle, der kommer i vejen for ham, og den, han ikke kan dræbe (Leshy, Kota-Bayun eller Slangen Gorynych), bander han, så enhver, der forsøger at kommunikere med den forbandede samme nat, vil dø i løbet af dagen . Den forbandede selv dør også i dette tilfælde, kun Kot-Bayun dør ikke, som simpelthen går i seng for at få styrke og springer sin tur over næste nat. Kun Baba Yaga kan redde Likh fra forbandelsen. Forbandelsen påvirker ikke den, der besejrede Cat-Bayun: han, ligesom katten, går simpelthen i seng og springer en tur over.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Prinsesse Frø

Prinsesse Frø kan ikke vinde spillet, men han kan tjene mange penge ved at forføre andre spillere om natten. Den fristede savner sin tur. Frøen kan ikke forføre Vasilisa den Vise, og hun bør også undgå Leshy, som vil forråde hende til alle næste dag. Hvis Ivan Tsarevich eller lederen af ​​røverne finder frøen, kan de invitere civile eller røverne til deres side, mens Ivan ikke vil acceptere frøens afvisning, men lederen er ikke så kræsen. Men prinsessen er ret snedig, hun kan blive dobbeltagent, for på trods af at hun ikke kan vinde alene, er dette en glimrende chance for at vinde guld, fordi chancerne for at overleve til spillets afslutning øges markant! I løbet af dagen udgiver frøprinsessen sig for at være den røde jomfru og stemmer med alle sammen.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Koschei den Dødeløse

Koschei den Dødeløse bor på sit slot. Om natten går han gennem de omkringliggende landsbyer og zombificerer Good Fellows og Red Maidens, som kommer i hans tjeneste og uden tvivl udfører alle ordrer. Ved at nægte at udføre en ordre, for eksempel om at stemme anderledes i løbet af dagen, end hvad der blev fortalt af Koshchei, eller at skrive beskeder i chatten i løbet af dagen, hvis Koshchei forbød det, dør Koshcheis tjener. Dermed er Koschey i stand til at påvirke resultatet af afstemningen i løbet af dagen, selvom han ikke selv stemmer. Hvis Koshchei bliver dræbt, dør alle hans ofre også. Vasilisa kan helbrede tjener Koshchei, som derefter vender tilbage til sin oprindelige rolle. Slangen-Gorynych og Ulven har en medfødt immunitet over for zombificering, så Koschey, uanset hvor meget han ønsker, kan ikke gøre dem til sin tjeneste. Ulven kan også hjælpe Ivan eller Vasilisa ud af problemer ved at ofre sig selv. Saved by the Wolf får Wolf immunitet over for zombificering.

"Nye eposer". For udviklere, ops og nysgerrige mennesker
Kat Baiyun

Kat Baiyun bor i skoven, jager om natten. Om dagen sover han i sin hule, så han deltager ikke i afstemningen. Han kan dog i løbet af dagen henrettes ved flertalsafstemning. Katten kan angribe på to måder: spinde - og så falder dens offer i søvn og kan ikke gå om natten og kan ikke stemme dagen efter - eller dræbe direkte med jernkløer. At angribe med kløer virker ikke på Snake-Gorynych, og efter at have angrebet Leshy, kan katten stå uden kløer overhovedet! Dashing kan ikke forbande Katten, som efter forbandelsen blot vil sove en nat. Hvis nogen formår at besejre Kota-Bayun, vil han blive helbredt for enhver sygdom eller sygdom, inklusive Likhs forbandelse. Denne Cat-evne forbliver hos spilleren indtil slutningen af ​​spillet. Koshcheis tjenere kan ikke stemme på Katten i løbet af dagen, men de kan indirekte finde ud af, hvem Katten er uden at informere Koshchei om det. Kot-Bayun indgår ikke alliancer med Ivan eller røverne, så de er det primære mål for Kot.

Anvendte teknologier

Til at skrive spillet valgte jeg serverløs computerteknologi baseret på OpenFaaS, da den er enkel nok til at organisere spillet, og samtidig avanceret nok til at skrive komplekse spilleregler uden unødvendige komplikationer. Jeg vil også bruge en Kubernetes-klynge, da denne metode til implementering af applikationer gør det ret simpelt og pålideligt at få hurtig implementering og mulighed for nemt at skalere. For at skabe spillogikken kan du kun klare dig med OpenFaaS, men jeg vil også forsøge at lave Storytelleren som en separat beholder for at sammenligne kompleksiteten af ​​implementeringen. Som det primære programmeringssprog for mikrotjenester og funktioner, valgte jeg Go, da jeg længe har studeret det i min fritid at erstatte Perl, og js vil blive brugt ud fra en bestemt ramme for brugerinteraktion med mikrotjenester og funktioner. Jeg vil fortælle dig om den endelige beslutning i den tilsvarende artikel i serien. For at kommunikere funktioner med hinanden, valgte jeg NATS.io, fordi jeg allerede havde stødt på det før, og det har ret nem integration i Kubernetes.

annoncering

  • Indledning
  • Opsætning af udviklingsmiljøet, opdeling af opgaven i funktioner
  • Backend arbejde
  • Frontend arbejde
  • Opsætning af CICD, organisering af test
  • Start en prøvespilsession
  • Resultaterne af

Kilde: www.habr.com

Tilføj en kommentar