
Op verzoek van onze lezers starten we een grote serie artikelen over het gebruik van serverless computing technologie voor de ontwikkeling van een echte applicatie. In deze serie zullen we de ontwikkeling van de applicatie, testfase en levering aan eindgebruikers behandelen met behulp van moderne middelen: een microservices-architectuur voor de applicatie (in serverless variant, gebaseerd op ), een cluster voor de implementatie van de applicatie, een database , gericht op cloud-gestuurde clustering en toepassing, evenals een cloud bus . De applicatie implementeert het spel ‘Bylina’, een variant van het populaire salonspel ‘Mafia’.
Wat is ‘Bylina’?
Het is een variant van het spel ‘Mafia’, ook wel ‘Werewolf’. De basis van het spel is teamwork, waarbij de deelnemers stap voor stap moeten ontdekken wie wie is en proberen te winnen. Helaas gaat bij online spelen een belangrijk aspect van het spel verloren, namelijk de persoonlijke interactie, en de regels van de klassieke ‘Mafia’ zijn vrij eenvoudig, zodat meestal andere personages worden toegevoegd voor een minder lineair en interessanter spelverloop, terwijl de basiskenmerken van het originele ‘Mafia’, zoals de afwisseling van dag en nacht, zetten alleen ’s nachts, en allianties tussen deelnemers behouden blijven. Ook een belangrijk verschil van het online spel is dat de spelleider (de Master of het Verhaal) meestal een computerprogramma is.
Spelbeschrijving
De regels van het spel dat ik wil realiseren, zijn ontleend aan een oude irc-bot die ik zo'n tien jaar geleden in mijn persoonlijke archief heb opgeslagen. ‘Byliny’ heeft een achtergrondverhaal, dat elke game opent:
In het negende koninkrijk, in het dertigste rijk, achter zeven zeeën, leefden een aantal dorpjes, en daar Goede jonge mannen en Mooie meisjes. Zij zaaiden graan en gingen naar het nabijgelegen bos voor paddenstoelen en bessen… En zo ging het van eeuw tot eeuw, totdat een vreselijke catastrofe de Aarde schokte en het kwaad zich over de wereld verspreidde! De nachten werden lang en koud, en in de duisternis zwierven er slechte en angstaanjagende wezens door het bos en kwamen bij het dorp binnen. Er kwam van ergens de Draak Gorynych en begon Schone meisjes te stelen en alle waardevolle spullen van de dorpelingen af te nemen. De kwaadaardige en hebzuchtige Baba Yaga, die op een bezem uit verre bossen kwam, verwarde de gedachten van de inwoners, en zelfs sommigen stopten met hun ambacht en gingen in het bos roven, waar ze een bende vormt. De schurken ontmoetten... Leshy, die in bomen en struiken kon veranderen, begon de vredige dorpelingen te observeren en diende de bandieten, terwijl hij uitk keek of de Dappere Jongelingen iets planden om hun nederzettingen van het kwaad te bevrijden. De Dappere Jongelingen en de Mooie Meisjes, moe van de aanvallen van de Bandieten en de gruwelijke doden door de handen van de verschrikkelijke Eénogige Wanhoop, verzamelden goud en nodigden een beroemde vechter uit de naburige stad uit — Ivan Tsarevich, die beloofde het dorp van de bandieten te bevrijden. Op een open plek in het bos redde Ivan van zeker verlies de Grauwe Wolf, die in een val van de Bandieten was terechtgekomen. In ruil daarvoor beloofde de Wolf Tsarevich te informeren over de verschillende bosgeesten. Een beroemde genezeres Vasilisa de Wijsheid, kwam voorbij en, toen ze het ongeluk zag, bleef ze de bewoners verplegen die geleden hadden van de aanvallen van de slechten. Achter het bos verscheen een zwart paleis, waar, naar verluidt, zich had gevestigd Koschey de Onsterfelijke, die elke nacht de dorpen bezocht en de Dappere Jongelingen en Mooie Meisjes betoverde, zodat ze zijn bevelen niet durfden te negeren, iedereen deed zoals hij het zei. En in het Doodse Bos vestigde zich Kot Bayun, en ieder die hem ontmoette viel in een doden slaap na zijn verhalen of stierf door zijn ijzeren klauwen.

Het Derde Koninkrijk
Zoals al te zien is, zijn de spelers verdeeld in verschillende groepen:
- de vredige inwoners (de Dappere Jongelingen, Mooie Meisjes, Ivan Tsarevich, Grauwe Wolf en Vasilisa de Wijsheid)
- de bandieten (de echte bandieten, maar ook Baba Yaga en Leshy)
- de onafhankelijken (Zmey Gorynych, Eénogige Wanhoop, Prinses Kikker, Koschey de Onsterfelijke, Kot Bayun)
Het doel van het spel, zoals eerder gezegd, is om in leven te blijven en te winnen. Tegenstanders moeten op de een of andere manier het spel verlaten, en de onafhankelijken moeten ook tot het einde in leven blijven. In het spel is er goud, een soort speel valuta die spelers alleen binnen het spel verdienen. De winnaars ontvangen goud. Hoe meer goud, hoe hoger de beoordeling van de speler.
Ik zal iets uitgebreider ingaan op de beschrijving van de personages.

Dappere Jongeling

Mooie Meisje
Dappere Jongeling en Mooie Meisje — de meest voorkomende en belangrijkste rol in het spel. Dit zijn de vredelievende dorpsbewoners, die 's nachts slapen en overdag werken. 's Nachts worden ze aangevallen door een van de bandieten, Zmei Gorynych en andere rollen, terwijl Vasilisa Premudraya hen geneest. Met een kleine kans kunnen de Dappere Jongeman of het Rode Meisje de aanval overleven zonder schade (mogelijk met verlies van goud), maar daarbij wordt de bijnaam van de speler de volgende dag na de aanval bekendgemaakt. 's Nachts ondernemen deze spelers geen acties, maar analyseren ze de spelsituatie aan de hand van berichten in de spelchat. Overdag besluiten deze spelers door te stemmen wie niet de Dappere Jongeman of het Rode Meisje is. De speler op wie de meeste stemmen zijn uitgebracht, verlaat het spel, de overgebleven spelers verdienen of verliezen goud. Als de spelers niemand met een meerderheid van stemmen kiezen, wordt er niemand geëxecuteerd.

Ivan Tsarevich
Ivan Tsarevich — oorspronkelijk een anonieme beschermer van de vredelievende dorpsbewoners. 's Nachts controleert hij de rollen van andere spelers, omdat hij maar één bondgenoot kent — de Grijze Wolf. Met de directe hulp van de Grijze Wolf (die ook andere rollen kan controleren), kan Ivan Tsarevich in plaats van te controleren 's nachts een ander personage doden. Als Ivan Tsarevich als resultaat van de controle de rol van de Dappere Jongeman of het Rode Meisje bij een speler ziet, kan hij hen uitnodigen en voorstellen aan de Grijze Wolf en andere Dappere Jongemannen en Rode Meisjes. Ivan kan worden tegengehouden door de Prinses-Kikker, die hem 's nachts kan verleiden, zonder zijn rol aan andere spelers overdag te onthullen. Als Ivan zelf de Prinses-Kikker ontdekt, kan hij haar voorstellen om zich bij de vredelievende dorpsbewoners aan te sluiten, maar als de Prinses-Kikker weigert, sterft ze door de hand van Ivan. Zmei Gorynych kan ook de controles van Ivan Tsarevich verstoren, maar in tegenstelling tot de Prinses-Kikker zal hij overdag aan de andere spelers vertellen wie Ivan Tsarevich is. Overdag verschilt Ivan Tsarevich niet van andere Dappere Jongemannen.

Grijze Wolf
Grijze Wolf — de helper van Ivan Tsarevich, wiens scherpe neus Ivan helpt om andere Goeden Jongemannen en Rode Meisjes te vinden. De Grijze Wolf vertelt deze spelers wie Ivan Tsarevich is, en geeft ook informatie over andere spelers met de rollen van Goeden Jongemannen en Rode Meisjes. Als de Wolf een bandiet of een andere tegenstander ontdekt, brengt hij dit onmiddellijk ter kennis van Ivan Tsarevich, zodat deze de volgende nacht actie kan ondernemen. Als de Prinses-Kikker de Wolf aanvalt, verandert hij in een gewone Goede jongeman en kan hij niemand controleren, en de Prinses zal niet weten dat het eigenlijk de Grijze Wolf was, omdat de Wolf 's nachts niet slaapt. De Wolf komt echter overdag te weten wie de spelers zijn – de Prinses-Kikker, en kan proberen de andere Goeden Jongemannen en Rode Meisjes die hij naar Ivan Tsarevich heeft gebracht, te beïnvloeden om voor de executie van de Prinses-Kikker te stemmen. De Wolf kan ook de volgende nacht proberen de Prinses-Kikker anoniem naar de zijde van de vredelievenden te trekken, zodat ze niemand van hen aanraakt. 'S Nachts kan de Wolf zichzelf opofferen om Ivan Tsarevich of Vasilisa de Wijze te redden, als hij vermoedt dat zij misschien onder de aanval van bandieten komen, of als ze door Koschei zijn gehypnotiseerd (de Wolf heeft een aangeboren immuniteit tegen Koschei's magie), maar na de zelfopoffering is de Wolf uit het spel.

Vasilisa de Wijsheid
Vasilisa de Wijsheid — speelt voor de vredelievenden, maar zij weten het niet, omdat Vasilisa heel bescheiden is. Ook Vasilisa de Wijze, wanneer ze geneest, stelt geen vragen en behandelt iedereen als een goede dokter. Maar als haar medicijn door Koschei, Likhо of Leshiy wordt gedronken, zullen ze niet langer dan één dag leven, omdat Vasilisa alleen mensen geneest. De Hagedis Gorynych of de Kat-Bayun zullen ook geen baat hebben bij Vasilisa's medicijnen, maar het zal hen ook geen kwaad doen. Bovendien wordt Vasilisa 's nachts niet lastiggevallen door de Kat-Bayun, omdat Vasilisa geen geneeskrachtige kruiden in het Doodse Bos verzamelt. Daarnaast hebben de vrouwelijke charmes van de Prinses-Kikker geen effect op Vasilisa. Als haar patiënt twee keer wordt aangevallen, zal de geneeskunde machteloos zijn. Vasilisa kan ook niet redden van magische aanvallen, zoals de vloek van Likhо. Overdag gedraagt Vasilisa zich als een Rode Meisje, en slechts een vluchtige, ietwat sombere blik kan een beetje suggereren dat zij de beste genezeres is in het drietien koninkrijk.

Bandiet
Bandieten, in tegenstelling tot alle voorgaande rollen, kennen ze elkaar, omdat ze in dezelfde onderwereld wonen, en ze kennen ook de Leshiy en Baba Yaga, waardoor ze vanaf de eerste zet gecoördineerd kunnen handelen. Maar alleen de leider van de bende voert 's nachts acties uit en stemt overdag niet, terwijl de overige bandieten zich ijverig voordoen als Goede Jongmannen en Rode Meisjes. Als de leider om de een of andere reden uit het spel valt, neemt een van de resterende bandieten onmiddellijk zijn plaats in. In de eerste plaats proberen de bandieten Ivan Tsarevich uit te schakelen voordat hij voldoende kracht van de Goede Jongmannen en Rode Meisjes heeft verzameld om actief tegen de bandieten op te treden tijdens de dag.

Leshiy
Leshiy spioneert 's nachts voor de bandieten en meldt hen over de gevonden rollen in hun onderwereld, maar stemt overdag niet, omdat hij niet in het dorp woont. Andere spelers kunnen echter op Leshiy stemmen en hem zo ter dood brengen. Aangezien Leshiy uit moerassen komt, kan hij niet door de Prinses-Op-De-Feit worden verleid, en als ze het zou proberen, zou Leshiy haar huis markeren, zodat de dorpsbewoners ontdekken wie ze werkelijk is. Leshiy zou ook geen vrees hoeven hebben voor de tovenarij van Koschey, maar Vasillisa kan hem tot de dood toe genezen. Als Kot-Bayun probeert Leshiy aan te vallen, riskeert hij zijn ijzeren klauwen te verliezen, en dan moet de Kat zijn slachtoffers met alleen het spinnen in slaap wiegen.

Baba Yaga
Baba Yaga werkt ook samen met de bandieten, en tovert 's nachts: hij kan ofwel een ziekte op andere spelers aansteken, ofwel een van zijn bondgenoten beschermen tegen een aanval. Haar toverkunst is zelfs sterker dan de vloek van de Doden. Overdag is Baba Yaga ook actief: degene die onder haar bescherming staat, kan zelfs niet door de meerderheid van stemmen ter dood worden gebracht. Echter, de voorraad van magische wortels voor bescherming overdag is beperkt, waardoor Baba Yaga niemand, inclusief zichzelf, meer dan drie keer in het spel kan beschermen. Overdag doet Baba Yaga zich voor als een gewone Rode Meid en stemt ze samen met de anderen.

Zmey Gorynych
Zmey Gorynych vliegt 's nachts over dorpen, bossen en moerassen en pleegt overvallen, terwijl hij overdag de rol van de overvallene speelt. Overdag slaapt de Draak, dus hij stemt niet, maar kan met een meerderheid van stemmen worden geëxecuteerd. De Draak is zeer gevaarlijk voor iedereen, vooral voor de bandieten en Ivan de Tsarevich. De Draak maakt geen verschil wie hij overvalt, maar als de Wolf of de Leshy hem ontmaskert, kan hij een waardevolle bondgenoot worden. Als je de Draak 's nachts doodt, kun je met enige waarschijnlijkheid een zeer waardevol item verkrijgen - de Draakshuid, die de drager één keer beschermt tegen een fysieke aanval.

De Enge Éénogige
De Enge Éénogige slaat 's nachts iedereen dood die op zijn pad komt, en wie hij niet kan doden (de Leshy, de Kat-Bayun of de Draak Gorynych) vervloekt, zodat iedereen die diezelfde nacht met de vervloekte probeert te communiceren, binnen een dag zal sterven. De vervloekte persoon sterft ook, behalve de Kat-Bayun, die gewoon gaat slapen om zijn kracht terug te krijgen en de volgende nacht overslaat. Alleen Baba Yaga kan iemand van de vloek redden. De vloek heeft ook geen effect op degene die de Kat-Bayun heeft verslagen: hij, net als de Kat, gaat simpelweg slapen en slaat zijn beurt over.

De Prinses-Kikker
De Prinses-Kikker kan het spel niet winnen, maar kan wel veel geld verdienen door 's nachts andere spelers te verleiden. Degene die verleid is, slaat zijn beurt over. De Kikker kan Vasilya de Wijze niet verleiden en moet ook de Leshy vermijden, die haar de volgende dag aan iedereen zal verklikken. Als Ivan de Tsarevich of de Hoofd Bandiet de Kikker vinden, kunnen ze haar uitnodigen om aan de kant van de vredelievende bewoners of de Bandieten te komen, waarbij Ivan geen weigering van de Kikker accepteert, terwijl de Hoofd Bandiet minder veeleisend is. Maar de Prinses is slim genoeg om een dubbele agent te worden, want hoewel ze alleen niet kan winnen, is het een geweldige kans om goud te verzamelen, omdat de kansen om het einde van het spel te bereiken aanzienlijk toenemen! Overdag doet de Prinses-Kikker zich voor als een Rode Maagd en stemt ze met iedereen samen.

Koschey de Onsterfelijke
Koschey de Onsterfelijke woont in zijn kasteel. 's Nachts loopt hij door de omliggende dorpen en zombifies hij de Goede Jongens en Rode Meiden, die bij hem in dienst treden en al zijn opdrachten zonder aarzeling uitvoeren. Als ze weigeren een bevel uit te voeren, bijvoorbeeld om overdag anders te stemmen dan Koshchey heeft gezegd, of om overdag berichten in de chat te schrijven als Koshchey dat heeft verboden, komt de Dienaar van Koshchey om. Op deze manier kan Koshchey de uitkomst van de stemming overdag beïnvloeden, hoewel hij zelf niet stemt. Als Koshchey wordt gedood, sterven ook al zijn slachtoffers. Vasilisa kan de Dienaar van Koshchey genezen, die vervolgens terugkeert naar zijn oorspronkelijke rol. Zmey Gorynych en de Wolf hebben een aangeboren immuniteit tegen zombificatie, dus zelfs als Koshchey het zou willen, kan hij hen niet in zijn dienst nemen. Bovendien kan de Wolf Ivan of Vasilisa uit de problemen helpen door zichzelf op te offeren. De geredde persoon krijgt Wolf-immuniteit tegen zombificatie.

Kot Bayun
Kot Bayun woont in het bos en jaagt 's nachts. Overdag slaapt hij in zijn hol en neemt daarom niet deel aan de stemming. echter kan hij overdag door een meerderheid van stemmen worden geëxecuteerd. De Kat kan op twee manieren aanvallen: door te spinnen - waardoor zijn slachtoffer in slaap valt en niet 's nachts kan lopen, en de volgende dag niet kan stemmen - of door het slachtoffer onmiddellijk met zijn ijzeren klauwen te doden. De klauwaanval werkt niet op Zmey Gorynych, en een aanval op Leshy kan ervoor zorgen dat de Kat helemaal zonder klauwen komt te zitten! De Lich kan de Kat niet vervloeken, die na de vloek gewoon één nacht zal slapen. Als iemand erin slaagt om Kat-Bayun te verslaan, zal hij van elke ziekte en kwaal, inclusief de vloek van de Lich, genezen. Deze vaardigheid van de Kat blijft bij de speler tot het einde van het spel. De Dienaren van Koshchey kunnen overdag niet stemmen voor de Kat, maar kunnen indirect achterhalen wie de Kat is zonder dit aan Koshchey te melden. Kat-Bayun sluit zich niet aan bij allianties met Ivan of de Bandieten, dus zij zijn voor de Kat de belangrijkste doelwit.
Gebruikte technologieën
Voor het ontwikkelen van de game heb ik gekozen voor serverless computing met OpenFaaS, omdat het eenvoudig te organiseren is en tegelijkertijd voldoende ontwikkeld om complexe spelregels zonder ongerechtvaardigde complicaties te schrijven. Ook ga ik een Kubernetes-cluster gebruiken, omdat deze implementatiemethode een snelle en betrouwbare uitrol en eenvoudige schaalbaarheid biedt. Voor het creëren van de spellogica kan ik het alleen met OpenFaaS doen, maar ik zal ook proberen om de Verteller als een aparte container te maken om de implementatiecomplexiteit te vergelijken. Als programmeertaal voor microservices en functies heb ik gekozen voor , omdat ik het al lange tijd in mijn vrije tijd bestudeer als vervanging voor Perl, en voor de interactie van gebruikers met de microservices en functies zal ik js gebruiken op basis van een of ander framework. Ik zal het definitieve besluit in het bijbehorende artikel van de cyclus delen. Voor de communicatie tussen functies heb ik NATS.io gekozen, omdat ik daar eerder al mee te maken heb gehad en het een vrij eenvoudige integratie in Kubernetes heeft.
Aankondiging
- Inleiding
- Het instellen van de ontwikkelomgeving, het opdelen van de taak in functies
- Werkzaamheden aan de backend
- Werkzaamheden aan de frontend
- Instellen van CICD, organisatie van testen
- Start van een proefspel
- Conclusies
Bron: habr.com
