
Auf vielfachen Wunsch der Leser beginnt eine große Artikelreihe über die Anwendung der Serverless-Computing-Technologie zur Entwicklung einer realen Anwendung. In dieser Reihe wird die Entwicklung der Anwendung, die Tests und die Bereitstellung an die Endbenutzer unter Verwendung moderner Mittel behandelt: der Microservices-Architektur der Anwendung (im serverless Ansatz, basierend auf ), einem Cluster zur Bereitstellung der Anwendung, einer Datenbank , die auf cloud-basiertes Clustering und Anwendung ausgerichtet ist, sowie einer Cloud-Bus . Die Anwendung implementiert das Spiel "Byliny", eine Variante des beliebten Salonspiels "Mafia."
Was sind "Byliny"?
Dies ist eine Version des Spiels „Mafia“, auch bekannt als „Werwolf“. Es handelt sich um ein Teamspiel, bei dem die Teilnehmer Schritt für Schritt herausfinden müssen, wer wer ist, und versuchen zu gewinnen. Leider fehlt bei einer Online-Version ein so wichtiger Aspekt des Spiels wie die persönliche Interaktion, und die Regeln der klassischen „Mafia“ sind recht einfach. Daher werden für einen interessanteren und weniger linearen Spielverlauf in der Regel andere Charaktere hinzugefügt, während die grundlegenden Merkmale der ursprünglichen „Mafia“ erhalten bleiben, wie zum Beispiel der Wechsel zwischen Tag und Nacht, Züge nur nachts und Allianzen zwischen den Teilnehmern. Ein weiteres wichtiges Merkmal des Spiels im Internet ist, dass der Spielleiter (auch bekannt als Meister des Spiels oder Geschichtenerzähler) normalerweise ein Computerprogramm ist.
Spielebeschreibung
Die Regeln des Spiels, das ich umsetzen möchte, stammen von einem alten IRC-Bot, den ich vor etwa 10 Jahren in meinem persönlichen Archiv gespeichert habe. „Bülin“ hat eine Hintergrundgeschichte, die mit jedem Spiel beginnt:
Im neunten Königreich, im dreißigsten Staat, hinter sieben Meeren lebten mehrere Dörfer, und in diesen gute junge Männer und schöne Jungfrauen. Sie säten Brot, während sie in den nahegelegenen Wald gingen, um Pilze und Beeren zu sammeln… So ging es von Generation zu Generation, bis eine schreckliche Katastrophe die Erde erschütterte und das Böse sich über die Welt ausbreitete! Die Nächte wurden lang und kalt, und in der Dunkelheit schlichen sich unheimliche und furchterregende Kreaturen im Wald umher und drangen ins Dorf ein. Es kam von irgendwoher Zmej Gorynych und begann, die Roten Jungfrauen zu stehlen und alles Wertvolle von den Dorfbewohnern zu rauben. Die heimtückische und gierige Baba Yaga, die auf ihrem Besen aus fernen Wäldern geflogen kam, verwirrte den Verstand der Einwohner, und sogar einige ließen ihr Handwerk fahren und zogen in den Wald, um zu rauben und scharten eine Bande um sich. Die Bösewichte trafen auf Leshiy, der sich in Bäume und Sträucher verwandeln konnte. Er begann, die friedlichen Dorfbewohner zu beobachten und den Räubern zu dienen, indem er herumlauschte, ob die tapferen jungen Männer etwas vorhätten, um ihre Siedlungen vom Unheil zu befreien. Die tapferen jungen Männer und die Roten Jungfrauen, müde von den Überfällen der Räuber und den grässlichen Toden durch die Hände des schrecklichen Einsäugigen Übels, sammelten Gold und luden aus der benachbarten Stadt einen berühmten Kämpfer ein — Iwan Zarewitsch, der versprach, das Dorf von den Räubern zu befreien. Auf einer Lichtung im Wald rettete Iwan vor dem unvermeidlichen Untergang den Grauen Wolf, der in die Falle der Räuber geraten ist. Im Gegenzug versprach der Wolf, dem Fürsten von verschiedenen Waldungeheuern zu berichten. Vorbeifahrend war die bekannte Heilerin. Vasilisa die WeWise, und als sie das Unglück sah, blieb sie bei den Bewohnern, die unter den Angriffen der Bösen gelitten hatten. Hinter dem Wald erschien ein schwarzes Schloss, in dem, so die Gerüchte, sich niedergelassen hatte. Koschey der Unsterbliche, der jede Nacht in die Dörfer kam und die Guten Jünglinge und Roten Mädchen verzauberte, damit sie sich nicht gegen seinen Willen auflehnten; sie taten alles, was er befahl. Und im Leblosen Wald hatte sich niedergelassen Katz-Bajun, und jeder, der ihm begegnete, fiel in einen toten Schlaf nach seinen Geschichten oder starb durch seine eisernen Klauen.

Das Dreifache Königreich
Wie bereits sichtbar ist, teilen sich die Spieler in mehrere Gruppen:
- friedliche Bürger (Gute Jünglinge, Rote Mädchen, Ivan-Zar, Grauer Wolf und Vasilisa die Weise)
- Räuber (die Räuber selbst sowie Baba Jaga und der Leshy)
- unabhängige (Zmej-Gorynytsch, Licho mit einem Auge, die Prinzessin-Frosch, Koschey der Unsterbliche, Katz-Bajun)
Wie bereits erwähnt, besteht das Ziel des Spiels darin, zu überleben und zu gewinnen. Die Gegner müssen auf die ein oder andere Weise aus dem Spiel ausscheiden, während die Unabhängigen bis zum Ende des Spiels am Leben bleiben sollten. Im Spiel gibt es Gold, eine Art Spielwährung, die die Spieler nur innerhalb des Spiels verdienen können. Die Sieger erhalten Gold. Je mehr Gold man hat, desto höher ist das Ranking des Spielers.
Ich möchte etwas ausführlicher auf die Beschreibung der Charaktere eingehen.

Guter Bursche

Rotes Mädchen
Guter Bursche und Rotes Mädchen — die am weitesten verbreitete und zentrale Rolle im Spiel. Dies sind die Dorfbewohner, die nachts schlafen und tagsüber arbeiten. Nachts werden sie von einem der Räuber, dem Zmej Gorynych und anderen Rollen angegriffen, während Vasilisa Prekrasnaya sie heilt. Mit einer gewissen, geringen Wahrscheinlichkeit können der Gute Junger Mann oder das Rote Mädchen den Angriff ohne Schaden überstehen (möglicherweise verlieren sie dabei Gold). Allerdings erfahren alle am nächsten Tag nach dem Angriff den Spielernamen des betroffenen Spielers. Nachts unternehmen diese Spieler keine Züge, sondern analysieren die Spielsituation basierend auf den Nachrichten im Spiel-Chat. Tagsüber entscheiden diese Spieler durch Abstimmung, wer von ihnen nicht der Gute Junge oder das Rote Mädchen ist. Der Spieler, für den die Mehrheit der anderen Spieler gestimmt hat, scheidet aus dem Spiel aus, die verbleibenden Spieler erhalten oder verlieren Gold. Wenn die Spieler niemanden mit Mehrheit wählen, wird keiner der Spieler hingerichtet.

Iwan-Zarewitsch
Iwan-Zarewitsch — ursprünglich ein anonymer Beschützer der Unschuldigen. Nachts überprüft er die Rollen der anderen Spieler, da er nur einen Verbündeten kennt – den Grauen Wolf. Mit direkter Unterstützung des Grauen Wolfes (der ebenfalls die Rollen anderer Spieler überprüfen kann) kann Iwan-Zariewitsch anstelle einer Überprüfung nachts einen anderen Charakter töten. Sollte Iwan-Zariewitsch bei seiner Überprüfung die Rolle des Guten Jünglings oder der Roten Jungfer bei einem Spieler sehen, kann er sie einladen, ihn zu besuchen und sie mit dem Grauen Wolf sowie anderen Guten Jünglingen und Roten Jungfern bekanntzumachen. Iwan könnte von der Prinzessin-Frosch gestört werden, die ihn nachts verführen kann, ohne seine Rolle tagsüber anderen Spielern zu verraten. Wenn Iwan die Prinzessin-Frosch selbst entdeckt, kann er ihr anbieten, sich den Unschuldigen anzuschließen. Wenn die Prinzessin jedoch ablehnt, stirbt sie durch Iwans Hand. Der Drache Gorynych kann ebenfalls Iwan-Zariewitschs Überprüfungen stören, wird jedoch tagsüber den anderen Spielern verraten, wer Iwan-Zariewitsch ist. Tagsüber unterscheidet sich Iwan-Zariewitsch nicht von den anderen Guten Jünglingen.

Grauer Wolf
Grauer Wolf — der Helfer von Ivan-Zarevich, dessen scharfer Instinkt ihm hilft, andere Gute Jungs und Rote Mädchen zu finden. Der Graue Wolf erzählt diesen Spielern, wer Ivan-Zarevich ist und informiert über andere Spieler mit den Rollen von Guten Jungs und Roten Mädchen. Wenn der Wolf einen Räuber oder einen anderen Gegner entdeckt, informiert er sofort Ivan-Zarevich, damit dieser in der nächsten Nacht Maßnahmen ergreifen kann. Wenn die Prinzessin-Frosch den Wolf angreift, verwandelt er sich in einen gewöhnlichen Guten Jungen und kann niemanden überprüfen, und die Prinzessin wird nicht erkennen, dass es sich tatsächlich um den Grauen Wolf handelte, da der Wolf nachts nicht schläft. Dennoch erfährt der Wolf tagsüber, wer von den Spielern die Prinzessin-Frosch ist, und kann versuchen, die anderen Guten Jungs und Roten Mädchen, die er zu Ivan-Zarevich gebracht hat, dazu zu bringen, für die Hinrichtung der Prinzessin-Frosch zu stimmen. Auch in der nächsten Nacht kann er anonym versuchen, die Prinzessin-Frosch auf die Seite der friedlichen Dorfbewohner zu ziehen, damit sie niemanden von ihnen angreift. Nachts kann der Wolf sich opfern, um Ivan-Zarevich oder Wasilisa die Weise zu retten, wenn er vermutet, dass diese plötzlich von Räubern angegriffen werden oder von Koschei zombifiziert wurden (der Wolf hat eine angeborene Immunität gegen die Zauber von Koschei), aber nach dem Selbstopfer scheidet der Wolf aus dem Spiel aus.

Vasilisa die WeWise
Vasilisa die WeWise — spielt für die friedlichen Bewohner, doch diese wissen nichts von ihr, da Vasilisa sehr bescheiden ist. Vasilisa die Weise heilt, ohne Fragen zu stellen, und behandelt alle gleich wie eine gute Ärztin. Doch wenn ihre Arznei von Koschei, Licho oder Leshy eingenommen wird, haben sie nicht länger als einen Tag zu leben, denn Vasilisa heilt nur Menschen. Für Zmey Gorynych oder Kot-Bayun ist Vasilisas Medizin ebenso wenig hilfreich, schadet aber auch nicht. Außerdem wird Vasilisa nachts von Kot-Bayun nicht gestört, da sie im Lebensfeindlichen Wald keine heilenden Kräuter sucht. Zudem wirken die weiblichen Reize der Zarevna-Lyagushka nicht auf Vasilisa. Wenn ein Patient zweimal versucht wird zu töten, bleibt die Medizin machtlos. Vasilisa kann auch bei magischen Angriffen, wie etwa dem Fluch von Licho, nicht helfen. Tagsüber verhält sich Vasilisa wie das Rote Mädchen, und nur ein flüchtiger, leicht trauriger Blick kann andeuten, dass sie die beste Heilerin im Dreifachreich ist.

Räuber
Räuber, im Gegensatz zu allen vorherigen Rollen kennen sie sich, da sie im selben Loge leben, und kennen auch den Leshy und die Baba Jaga, weshalb sie sofort ab dem ersten Zug koordiniert handeln können. Nur der Anführer der Bande führt nachts Aktionen aus und stimmt tagsüber nicht ab, während die anderen Räuber sich sorgfältig als edle Helden und schöne Damen ausgeben. Wenn der Anführer aus irgendeinem Grund aus dem Spiel ausscheidet, wird sein Platz sofort von einem der verbleibenden Räuber eingenommen. Vorrangig versuchen die Räuber, Ivan Tsarevich auszuschalten, bevor er genug Kräfte aus den edlen Helden und schönen Damen gesammelt hat, um tagsüber aktiv gegen die Räuber zu kämpfen.

Leshy
Leshy Nachts spioniert er für die Räuber und informiert sie über gefundene Rollen in ihrem Versteck, doch tagsüber gibt er keine Stimme ab, da er nicht im Dorf lebt. Andere Spieler können jedoch für den Leschiy stimmen und ihn damit verurteilen. Da Leschiy aus den Sümpfen stammt, kann ihn die Froschprinzessin nicht verführen; wenn sie es doch versucht, wird Leschiy ihr Zuhause markieren, und die Dorfbewohner erfahren, wer sie wirklich ist. Leschiy sollte sich nicht vor den Zaubern des Koschei fürchten, aber Vasilisa könnte ihn bis zum Tod heilen. Wenn der Kater-Bayun versucht, Leschiy anzugreifen, riskiert er, seine eisernen Krallen zu verlieren, und wird dann seine Opfer nur mit seinem Schnurren einschläfern müssen.

Baba Yaga
Baba Yaga Das funktioniert auch in Zusammenarbeit mit den Räubern. Nachts wirkt sie zauberhaft: Sie kann entweder eine Krankheit auf andere Spieler senden oder einen Verbündeten vor einem Angriff schützen. Ihre Magie ist sogar stärker als der Fluch des Lichs. Tagsüber ist Baba Yaga ebenfalls aktiv: Wer unter ihrem Schutz steht, kann selbst mit einer Mehrheitsabstimmung nicht hingerichtet werden. Allerdings sind die magischen Wurzeln für den Tagschutz begrenzt, sodass Baba Yaga während eines Spiels nicht mehr als dreimal jemanden, einschließlich sich selbst, schützen kann. Tagsüber tarnt sich Baba Yaga jedoch als gewöhnliches rotes Mädchen und stimmt mit allen anderen ab.

Zmej Gorynitsch
Zmej Gorynitsch Nachts fliegt er über Dörfer, Wälder und Sümpfe und begeht Raubüberfälle, während er tagsüber die Rolle des Überfallenen spielt. Tagsüber schläft Zmej und stimmt daher nicht ab, kann aber mit einer Mehrheitsabstimmung hingerichtet werden. Zmej ist für alle sehr gefährlich, besonders für die Räuber und Fürst Ivan. Zmej ist gleichgültig gegenüber dem, wen er raubt, aber wenn ihn der Wolf oder der Leshy entlarvt, kann er ein wertvoller Verbündeter werden. Wenn man Zmej nachts besiegt, hat man mit etwas Glück die Chance, einen sehr wertvollen Gegenstand zu erhalten – die Schuppe des Zmej, die ihren Träger einmal vor einem physischen Angriff schützt.

Das Einäugige Übel
Das Einäugige Übel Nachts tötet er alle, die ihm in den Weg kommen, und verflucht die, die er nicht töten kann (den Leshiy, den Kot-Bayun oder den Zmey Gorynych), sodass jeder, der versucht, mit dem Verfluchten noch in dieser Nacht zu kommunizieren, am folgenden Tag stirbt. Der Verfluchte selbst stirbt ebenfalls, nur der Kot-Bayun überlebt, da er sich einfach schlafen legt, um neue Kräfte zu sammeln und die nächste Nacht auszulassen. Nur Baba-Jaga kann vor dem Fluch des Licha retten. Der Fluch wirkt nicht auf den, der den Kot-Bayun besiegt hat: Er legt sich, wie der Kot, ebenfalls schlafen und lässt die Runde aus.

Die Prinzessin-Frosch
Die Prinzessin-Frosch kann im Spiel nicht gewinnen, aber sie kann sehr viel Geld verdienen, indem sie andere Spieler nachts verführt. Der Verführte überspringt dabei seinen Zug. Die Froschkönigin kann Wasilisa die WeWise nicht verführen, außerdem sollte sie den Leschij meiden, der sie am nächsten Tag allen verraten wird. Wenn Iwan-Zariz und der Anführer der Räuber die Froschkönigin finden, können sie sie einladen, sich den friedlichen Bürgern oder den Räubern anzuschließen. Iwan akzeptiert die Ablehnung der Froschkönigin nicht, während der Anführer nicht so wählerisch ist. Aber die Froschkönigin ist clever genug und kann zur Doppelagentin werden, denn obwohl sie alleine nicht gewinnen kann, ist das eine ausgezeichnete Gelegenheit, um Gold zu sammeln; die Chancen, bis zum Ende des Spiels durchzuhalten, steigen erheblich! Tagsüber gibt sich die Froschkönigin als Rote Jungfrau aus und stimmt mit allen anderen ab.

Koschey der Unsterbliche
Koschey der Unsterbliche lebt in seinem Schloss. Nachts wandert er durch die umliegenden Dörfer und verwandelt die Guten Jungen und Schönen Mädchen in seine Diener, die ihm ohne zu zögern alle Befehle ausführen. Wer sich weigert, beispielsweise tagsüber anders zu stimmen, als von Koschtschej gesagt, oder tagsüber Nachrichten im Chat zu schreiben, wenn Koschtschej dies verboten hat, der Diener Koschtschejs stirbt. So kann Koschtschej die Abstimmungsergebnisse am Tag beeinflussen, obwohl er selbst persönlich nicht abstimmt. Wenn Koschtschej getötet wird, sterben auch all seine Opfer. Wasilisa kann den Diener Koschtschejs heilen, der dann zu seiner ursprünglichen Rolle zurückkehrt. Der Zmej-Gorynych und der Wolf haben eine angeborene Immunität gegen die Verwandlung, sodass Koschtschej, so sehr er sich auch wünscht, sie nicht in seine Dienste zwingen kann. Auch der Wolf kann Iwan oder Wasilisa aus der Not retten, indem er sich opfert. Die vom Wolf Geretteten erhalten die Wolf-Immunität gegen die Verwandlung.

Katz-Bajun
Katz-Bajun lebt im Wald und jagt nachts. Tagsüber schläft er in seinem hohlen Baum, deshalb nimmt er am Voting nicht teil. Doch tagsüber kann ihn die Mehrheit der Stimmen verurteilen. Die Katze kann auf zwei Arten angreifen: durch Schnurren – dann schläft ihr Opfer ein und kann nachts nicht gehen, und auch am nächsten Tag nicht abstimmen – oder sie tötet sofort mit ihren eisernen Krallen. Der Angriff mit den Krallen funktioniert nicht gegen den Schlangendrache und beim Angriff auf den Waldgeist könnte die Katze sogar ohne Krallen dastehen! Der Lich kann die Katze nicht verfluchen; nach einem Fluch wird sie einfach eine Nacht schlafen. Wer es schafft, den Katzen-Bajun zu besiegen, wird von jeder Krankheit und jedem Übel geheilt, einschließlich des Fluchs des Lichs. Diese Fähigkeit der Katze bleibt bis zum Ende des Spiels beim Spieler. Die Diener des Koschej können tagsüber nicht für die Katze stimmen, können aber indirekt herausfinden, wer die Katze ist, ohne das Koschej mitzuteilen. Der Katzen-Bajun geht keine Allianzen mit Iwan oder den Räubern ein, daher sind diese für die Katze das Hauptziel.
Verwendete Technologien
Für die Entwicklung des Spiels habe ich die serverlose Computing-Technologie (serverless) auf Basis von OpenFaaS gewählt, da sie einfach genug ist, um das Spiel zu organisieren, und gleichzeitig entwickelt genug, um komplexe Spielregeln ohne unnötige Komplikationen zu schreiben. Zudem werde ich ein Kubernetes-Cluster verwenden, da diese Art der Anwendungsbereitstellung eine einfache und zuverlässige Möglichkeit bietet, um schnelle Bereitstellungen und einfache Skalierung zu ermöglichen. Für die Spiel-Logik könnte man sich nur auf OpenFaaS stützen; ich werde jedoch auch versuchen, den Geschichtenerzähler als separaten Container zu erstellen, um die Umsetzungskomplexität zu vergleichen. Als Hauptprogrammiersprache für Microservices und Funktionen habe ich ausgewählt , da ich sie seit langem in meiner Freizeit als Ersatz für Perl lerne, und für die Interaktion der Benutzer mit den Microservices und Funktionen werde ich js auf Basis eines bestimmten Frameworks verwenden. Über die endgültige Entscheidung werde ich in dem entsprechenden Artikel der Reihe berichten. Für die Kommunikation zwischen den Funktionen habe ich NATS.io gewählt, da ich bereits früher damit gearbeitet habe und es eine recht einfache Integration in Kubernetes ermöglicht.
Ankündigung
- Einführung
- Einrichtung der Entwicklungsumgebung, Aufteilung der Aufgabe in Funktionen.
- Arbeiten am Backend.
- Arbeiten am Frontend.
- Einrichtung von CICD, Organisation der Tests.
- Start einer Testspielsession.
- Ergebnisse
Quelle: habr.com
