"Nya epos". För utvecklare, ops och nyfikna människor

"Nya epos". För utvecklare, ops och nyfikna människor

På grund av många förfrågningar från läsare börjar en stor serie artiklar om användningen av serverlös datorteknik för att utveckla en riktig applikation. Denna cykel kommer att täcka applikationsutveckling, testning och leverans till slutanvändare med hjälp av moderna verktyg: mikrotjänstapplikationsarkitektur (i en serverlös version, baserad på OpenFaaS), kluster Kubernetes för applikationsdistribution, databas MongoDB, fokuserat på molnkluster och applikationer, samt molnbuss NATS. Applikationen implementerar spelet "Epics", en av varianterna av det populära parlorspelet "Mafia".

Vad är "Epos"?

Detta är en variant av spelet "Mafia", även känt som "Werewolf". Den bygger på ett lagspel där deltagarna steg för steg måste lära sig vem som är vem och försöka vinna. Tyvärr, när man spelar online, försvinner en så viktig komponent i spelet som personlig interaktion, och reglerna för den klassiska "Mafia" är ganska enkla, därför, för ett mer icke-linjärt och intressant spel, läggs vanligtvis andra karaktärer till, men i allmänhet är huvuddragen i den ursprungliga "maffian" bevarade, till exempel bytet av dag och natt, rörelser bara på natten, såväl som allianser mellan deltagare. En annan viktig skillnad mellan att spela online är att värden (aka Game Master, Storyteller) 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. "Epics" har en bakgrund som varje spel börjar med:

I det avlägsna riket, i det trettionde tillståndet, bortom de sju haven, bodde och bodde flera byar, och i dem Bra kompisar и Vackra tjejer. De sådde bröd och gick till den omgivande skogen för att plocka svamp och bär... Och detta fortsatte från århundrade till århundrade, tills en fruktansvärd katastrof skakade jorden och ondskan började spridas över hela världen! Nätterna blev långa och kalla, och i mörkret strövade ovänliga och fruktansvärda varelser i skogen och vandrade in i byn. Kom någonstans ifrån Orm Gorynych och fick för vana att stjäla Röda jungfrur och ta bort allt värdefullt från byborna. Skadligt och girigt Baba Yaga, som flög på ett mortel från avlägsna skogar, förvirrade invånarnas sinnen, och till och med några gav upp sitt hantverk och gick in i skogen för att råna, och bildade där ett gäng. Skurkarna träffades Troll, som visste hur man förvandlas till träd och buskar, började han övervaka fridfulla bybor och betjäna rånarna, och nosade ut om de goda kollegorna hade på sig något för att befria deras bosättningar från onda andar. Goda kamrater och vackra jungfrur, trötta på rånarnas räder och fruktansvärda dödsfall i händerna på de fruktansvärda Strålande enögd, samlade guld och bjöd in en berömd brottare från en närliggande stad - Ivan Tsarevich, som lovade att befria byn från rövare. I en glänta i skogen räddade Ivan från en säker död Gråvarg, som föll i rånarnas fälla. I gengäld lovade vargen att informera tsarevitjen om olika skogliga onda andar. En berömd healer gick förbi Vasilisa den vise, och när hon såg problem, stannade hon för att vårda de boende som hade drabbats av attackerna från de käcka. Bakom skogen dök ett svart palats upp, i vilket han, enligt rykten, slog sig ned Koschei den dödslösa, varje natt besökte han byarna och förhäxade de goda kamrarna och röda jungfrur för att de inte skulle våga olyda hans order, de skulle göra allt som han sa. Och bosatte sig i den livlösa skogen Katt Baiyun, och alla som mötte honom somnade efter hans sagor eller dog av hans järnklor.

"Nya epos". För utvecklare, ops och nyfikna människor
Far Far Away rike

Som du redan kan se är spelare indelade i flera grupper:

  • civila (Good Fellows, Red Maidens, Ivan Tsarevich, Grey Wolf och Vasilisa the Wise)
  • rånare (rånarna själva, såväl som Baba Yaga och Leshy)
  • oberoende (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey the Immortal, Cat-Bayun)

Målet med spelet, som nämnts ovan, är att hålla sig vid liv och vinna. Motståndare måste lämna spelet på ett eller annat sätt, och oberoende måste också förbli vid liv till slutet av spelet. Spelet har guld, en sorts spelvaluta som spelarna tjänar endast inom spelet. Vinnarna får guld. Ju mer guld, desto högre betyg har spelaren.

Jag kommer att uppehålla mig lite mer i detalj vid beskrivningen av karaktärerna.

"Nya epos". För utvecklare, ops och nyfikna människor
Bra kille

"Nya epos". För utvecklare, ops och nyfikna människor
Röda jungfrun

Bra kille и Röda jungfrun - den mest utbredda och huvudrollen i spelet. Det är civila som sover på nätterna och jobbar på dagarna. På natten blir de attackerade av en av rånarna, ormen Gorynych och andra roller, och Vasilisa den vise botar dem. Med en liten sannolikhet kan Good Fellow eller Red Maiden överleva attacken utan skada (möjligen att förlora guld i processen), men alla kommer att känna igen spelarens smeknamn nästa dag efter attacken. På natten gör dessa spelare inga rörelser, utan analyserar spelsituationen utifrån meddelanden i spelchatten. Under dagen avgör dessa spelare genom att rösta vem av dem som inte är Good Fellow eller Red Maiden. Den spelare som röstats fram av majoriteten av andra spelare lämnar spelet, de återstående spelarna får eller förlorar guld. Om spelare inte väljer någon med majoritetsröst, kommer ingen spelare att avrättas.

"Nya epos". För utvecklare, ops och nyfikna människor
Ivan Tsarevich

Ivan Tsarevich - initialt en anonym försvarare av civila. På natten kontrollerar han rollerna för andra spelare, eftersom han bara känner en av sina allierade - den grå vargen. Med direkt deltagande av den grå vargen (som också kan kontrollera rollerna för andra spelare), kan Ivan Tsarevich, istället för att kontrollera, döda en annan karaktär på natten. Om, som ett resultat av kontrollen, Ivan Tsarevich ser rollen som en Good Fellow eller en Red Maiden i en spelare, då kan han bjuda in dem till sin plats och presentera dem för den Grå Vargen och andra Good Fellows och Red Maidens. Ivan kan bli störd av grodprinsessan, som kan förföra honom på natten, utan att avslöja sin roll för andra spelare under dagen. Om Ivan själv upptäcker grodprinsessan kan han bjuda in henne att gå med civila, men om prinsessan vägrar dör hon i händerna på Ivan. Ormen-Gorynych kan också störa Ivan-Tsarevichs checkar, men till skillnad från grodprinsessan kommer han under dagen att berätta för de andra spelarna vem av dem som är Ivan-Tsarevich. Under dagen skiljer sig Ivan Tsarevich inte från andra Good Fellows.

"Nya epos". För utvecklare, ops och nyfikna människor
gråvarg

gråvarg - assistent till Ivan Tsarevich, vars skarpa luktsinne hjälper Ivan att hitta andra Good Fellows och Red Maidens. Grey Wolf berättar för dessa spelare vem Ivan Tsarevich är, och informerar även om andra spelare med rollerna som Good Fellows och Red Maidens. Om vargen upptäcker en rånare eller annan fiende, informerar han omedelbart Ivan Tsarevich så att han kan vidta åtgärder nästa natt. Om vargen blir attackerad av grodprinsessan förvandlas han till en vanlig god karl och kan inte kolla på någon, och prinsessan kommer inte att veta att det faktiskt var den grå vargen, eftersom vargen inte sover på natten. Vargen själv kommer dock under dagen att ta reda på vem av spelarna som är grodprinsessan, och kan försöka övertala resten av Good Fellows och Red Maidens, som han tog med till Ivan Tsarevich, att rösta för avrättningen av grodan Prinsessa. Även nästa natt kan han försöka att anonymt övertala grodprinsessan till civila så att hon inte rör någon av dem. Vargen kan offra sig själv på natten för att rädda Ivan Tsarevich eller Vasilisa den vise, om han antar att de plötsligt kommer att falla under attacken av rånare, eller har blivit zombifierad av Koshchei (Vargen har en medfödd immunitet mot Koshcheis charm), men efter självuppoffringen vargen hoppar ur spelet.

"Nya epos". För utvecklare, ops och nyfikna människor
Vasilisa den vise

Vasilisa den vise - spelar för civila, men de vet inte om henne, eftersom Vasilisa är väldigt blygsam. Dessutom ställer inte Vasilisa den vise, när hon behandlar, frågor och behandlar alla, som en bra läkare. Men om Koschey, Likho eller Leshy dricker hennes medicin, kommer de inte att leva längre än en dag, eftersom Vasilisa bara behandlar människor. Medicinen av Vasilisa den vise kommer inte heller att hjälpa ormen Gorynych eller Cat-Bayun, men de kommer inte heller att skada. Kot-Bayun rör inte heller Vasilisa på natten, eftersom Vasilisa inte åker till den livlösa skogen för att köpa medicinska örter. Dessutom fungerar inte grodprinsessans kvinnliga charm på Vasilisa. Om de försökte döda hennes patient två gånger skulle medicinen vara maktlös. Vasilisa kommer inte att rädda dig från magiska attacker, till exempel från den överväldigande förbannelsen. Under dagen beter sig Vasilisa som en Red Maiden, och bara en flyktig, lite ledsen blick kan antyda lite om att hon är den bästa healern i Far Away Kingdom.

"Nya epos". För utvecklare, ops och nyfikna människor
Skurk

rånare, till skillnad från alla tidigare roller, känner de varandra, eftersom de bor i samma lya, och även känner till Leshy och Baba Yaga, så de kan agera tillsammans redan från första draget. Men bara ledaren för gänget utför handlingar på natten och röstar inte på dagen, medan resten av rånarna flitigt låtsas vara Good Fellows och Red Maidens. Om ledaren lämnar spelet av någon anledning tar en av de återstående skurkarna omedelbart hans plats. Först och främst försöker Rånarna att inaktivera Ivan Tsarevich tills han har samlat tillräckligt med styrkor från Good Fellows och Red Maidens för att aktivt konfrontera Rånarna under dagen.

"Nya epos". För utvecklare, ops och nyfikna människor
trä troll

trä troll på natten spionerar han för rånarna och informerar dem om rollerna som finns i deras lya, men under dagen röstar han inte, eftersom han inte bor i byn. Däremot kan andra spelare rösta på Leshy och därmed avrätta honom. Eftersom Leshy kommer från träsken kan han inte förföras av Grodprinsessan, och om han försöker kommer Leshyn att markera hennes hus, och byborna kommer att ta reda på vem hon verkligen är. Leshem borde inte vara rädd för Koshcheis besvärjelse, men Vasilisa kan bota honom till döds. Om Kot-Bayun försöker attackera Leshy riskerar han att tappa sina järnklor, och då måste Kot vagga offren i sömns med bara sin spinnande.

"Nya epos". För utvecklare, ops och nyfikna människor
Baba Yaga

Baba Yaga Han arbetar också tillsammans med rånarna och trollformler på natten: han kan antingen skicka sjukdom till andra spelare eller skydda en av sina allierade från attack. Hennes häxkonst är ännu starkare än Likhs förbannelse. Under dagen är Baba Yaga också aktiv: någon som står under hennes skydd kan inte avrättas ens med en majoritetsröst. Tillgången på magiska rötter för skydd under dagtid är dock begränsad, så Baba Yaga kan inte skydda någon, inklusive henne själv, mer än tre gånger per match. Under dagen låtsas Baba Yaga vara en vanlig Red Maiden och röstar med alla andra.

"Nya epos". För utvecklare, ops och nyfikna människor
drake

drake på natten flyger han över byar, skogar och träsk och ägnar sig åt rån och avslöjar rollen som den rånade under dagen. På dagen sover Ormen, så han röstar inte, men han kan avrättas med en majoritetsröst. Ormen är mycket farlig för alla, särskilt för Rånarna och Ivan Tsarevich. Ormen bryr sig inte om vem han rånar, men om han upptäcks av vargen eller leshyn kan han bli en värdefull allierad. Om du dödar ormen på natten kan du, med viss sannolikhet, få ett mycket värdefullt föremål - ormskinnet, som kommer att skydda sin ägare en gång från fysisk attack.

"Nya epos". För utvecklare, ops och nyfikna människor
berömt enögd

berömt enögd på natten dödar han alla som kommer i hans väg, och den han inte kan döda (Leshy, Kota-Bayun eller ormen Gorynych) förbannar han, så att alla som försöker kommunicera med den fördömde samma natt kommer att dö under dagen . Den fördömde själv dör också i det här fallet, bara Kot-Bayun dör inte, som helt enkelt går och lägger sig för att få kraft och hoppar över sin tur nästa natt. Endast Baba Yaga kan rädda Likh från förbannelsen. Förbannelsen påverkar inte den som besegrade Cat-Bayun: han, precis som katten, går helt enkelt och lägger sig och hoppar över en sväng.

"Nya epos". För utvecklare, ops och nyfikna människor
Prinsessgroda

Prinsessgroda kan inte vinna spelet, men han kan tjäna mycket pengar genom att förföra andra spelare på natten. Den frestade missar sin tur. Grodan kan inte förföra Vasilisa den vise, och hon bör också undvika Leshy, som kommer att förråda henne till alla nästa dag. Om Ivan Tsarevich eller Rånarnas ledare hittar grodan kan de bjuda in civila eller rånarna till sin sida, medan Ivan inte accepterar grodans vägran, men ledaren är inte så kräsen. Men prinsessan är ganska listig, hon kan bli dubbelagent, för trots att hon inte kan vinna ensam, är detta en utmärkt chans att vinna guld, eftersom chanserna att överleva till slutet av spelet ökar avsevärt! Under dagen låtsas grodprinsessan vara den röda jungfrun och röstar med alla tillsammans.

"Nya epos". För utvecklare, ops och nyfikna människor
Koschei den dödslösa

Koschei den dödslösa bor i sitt slott. På natten går han genom de omgivande byarna och zombifierar Good Fellows och Red Maidens, som kommer till hans tjänst och utan tvekan utför alla order. Genom att vägra utföra en order, till exempel att rösta annorlunda under dagen än vad Koshchei berättade, eller att skriva meddelanden i chatten under dagen om Koshchei förbjöd det, dör Koshcheis tjänare. Därmed kan Koschey påverka resultatet av omröstningen under dagen, trots att han själv inte röstar. Om Koshchei dödas dör också alla hans offer. Vasilisa kan bota tjänare Koshchei, som sedan återgår till sin ursprungliga roll. Ormen-Gorynych och vargen har en medfödd immunitet mot zombifiering, så Koschey, hur mycket han än vill, kan inte göra dem till sin tjänst. Vargen kan också hjälpa Ivan eller Vasilisa ur problem genom att offra sig själv. Saved by the Wolf får Wolf immunitet mot zombifiering.

"Nya epos". För utvecklare, ops och nyfikna människor
Katt Baiyun

Katt Baiyun bor i skogen, jagar på natten. På dagarna sover han i sin hålighet, så han deltar inte i omröstningen. Han kan dock under dagen avrättas med majoritetsröst. Katten kan attackera på två sätt: spinna - och sedan somnar dess offer och kan inte gå på natten, och kan inte rösta nästa dag - eller döda direkt med järnklor. Att attackera med klor fungerar inte på Snake-Gorynych, och efter att ha attackerat Leshy kan katten lämnas utan klor alls! Drasning kan inte förbanna katten, som efter förbannelsen helt enkelt kommer att sova en natt. Om någon lyckas besegra Kota-Bayun kommer han att bli botad från någon sjukdom eller sjukdom, inklusive Likhs förbannelse. Denna kattförmåga finns kvar hos spelaren tills spelets slut. Koshcheis tjänare kan inte rösta på Katten under dagen, men de kan indirekt ta reda på vem Katten är utan att informera Koshchei om det. Kot-Bayun ingår inte allianser med Ivan eller Rånarna, så de är det primära målet för Kot.

Teknik som används

För att skriva spelet valde jag serverlös datorteknik baserad på OpenFaaS, eftersom den är enkel nog att organisera spelet, och samtidigt tillräckligt avancerad för att skriva komplexa spelregler utan onödiga komplikationer. Jag kommer också att använda ett Kubernetes-kluster, eftersom denna metod för att distribuera applikationer gör det ganska enkelt och pålitligt att få snabb distribution och möjligheten att enkelt skala. För att skapa spellogiken kan du bara klara dig med OpenFaaS, men jag ska också försöka göra Storyteller som en separat behållare för att jämföra komplexiteten i implementeringen. Som huvudprogrammeringsspråk för mikrotjänster och funktioner valde jag Go, eftersom jag har studerat det länge på min fritid för att ersätta Perl, och js kommer att användas utifrån ett visst ramverk för användarinteraktion med mikrotjänster och funktioner. Jag kommer att berätta om det slutliga beslutet i motsvarande artikel i serien. För att kommunicera funktioner med varandra valde jag NATS.io, eftersom jag redan hade stött på det tidigare, och det har ganska enkel integration i Kubernetes.

Meddelande

  • Inledning
  • Sätta upp utvecklingsmiljön, bryta ner uppgiften i funktioner
  • Backend arbete
  • Frontend arbete
  • Ställer in CICD, organiserar tester
  • Starta en provspelssession
  • Resultat av

Källa: will.com

Lägg en kommentar