„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen

Auf vielfachen Wunsch unserer Leser beginnt eine große Serie von Artikeln ĂŒber die Anwendung der serverlosen Berechnungstechnologie zur Entwicklung einer echten Anwendung. In dieser Serie wird die Entwicklung der Anwendung, das Testen und die Bereitstellung fĂŒr Endbenutzer unter Verwendung moderner Mittel wie der mikroservicebasierten Anwendungsarchitektur (im serverless-Modus, basierend auf OpenFaaS), einem Cluster Kubernetes zur Bereitstellung der Anwendung, einer Datenbank MongoDB, die auf Cloud-Clustering und Anwendung ausgerichtet ist, sowie einem Cloud-Bus NATS. Die Anwendung implementiert das Spiel „Bylyny“, eine Variante des beliebten Salonspiels „Mafia“.

Was sind „Bylyny“?

Es ist eine Variante des Spiels „Mafia“, auch bekannt als „Werwolf“. Es basiert auf einem Teamspiel, bei dem die Teilnehmer Schritt fĂŒr Schritt herausfinden mĂŒssen, wer wer ist, und versuchen zu gewinnen. Leider geht bei einem Online-Spiel ein so wichtiger Bestandteil des Spiels wie die persönliche Interaktion verloren, und die Regeln der klassischen „Mafia“ sind relativ einfach, sodass normalerweise andere Charaktere hinzugefĂŒgt werden, um einen weniger linearen und interessanteren Spielprozess zu schaffen; dennoch bleiben die Hauptmerkmale der Originalversion der „Mafia“ erhalten, wie der Wechsel von Tag und Nacht, die ZĂŒge nur nachts und auch die Allianzen zwischen den Teilnehmern. Ein weiteres wichtiges Merkmal des Online-Spiels ist, dass der Moderator (auch Meister des Spiels, GeschichtenerzĂ€hler genannt) normalerweise ein Computerprogramm ist.

Spielbeschreibung

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. „Bylyny“ hat eine Vorgeschichte, die jeder Runde vorausgeht:

In einem weit entfernten Königreich, im dreizehnten Reich, jenseits der sieben Meere, lebten einige Dörfer, in denen tapfere junge MĂ€nner und schöne MĂ€dchenlebten. Sie sĂ€ten Getreide und gingen in den umliegenden Wald auf Pilze und Beeren... Und so ging es von Zeit zu Zeit, 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 im Dunkeln schlichen böse und schreckliche Wesen durch den Wald und verirren sich ins Dorf. Aus dem Nichts kam Zmey Gorynych und begann, die schönen MĂ€dchen zu stehlen und den Dorfbewohnern alles Wertvolle zu rauben. Eine böse und gierige Baba Yaga, die auf einem Besen aus fernen WĂ€ldern angekommen war, verunsicherte den Verstand der Bewohner, und sogar einige gaben ihr Handwerk auf und gingen in den Wald, um zu rauben und dort eine Bande zu grĂŒnden. Die ÜbeltĂ€ter trafen den Waldgeist, der sich in BĂ€ume und StrĂ€ucher verwandeln konnte. Er begann, die friedlichen Dorfbewohner zu beobachten und den RĂ€ubern zu dienen, um herauszufinden, ob die edlen Jungen etwas planten, um ihre Siedlungen von den Ungeheuern zu befreien. Die edlen Jungen und die schönen MĂ€dchen, mĂŒde von den ÜberfĂ€llen der RĂ€uber und dem schrecklichen Tod durch die HĂ€nde des schrecklichen EinĂ€ugigen Unheils, 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 der Lichtung im Wald rettete Iwan vor dem unvermeidlichen Untergang den Grauen Wolf, der in eine Falle der RĂ€uber gefallen war. Im Gegenzug versprach der Wolf, Iwan ĂŒber verschiedene Ungeheuer aus dem Wald zu informieren. An der Straße fuhr die bekannte Heilerin Wasilisa die Weise, und als sie das UnglĂŒck sah, blieb sie, um die Bewohner, die unter den ÜberfĂ€llen litten, zu pflegen. Hinter dem Wald erschien ein schwarzes Schloss, in dem, so die GerĂŒchte, sich Koschtschej der Unsterbliche, jede Nacht in die Dörfer schlich und die edlen Jungen und schönen MĂ€dchen verzauberte, damit sie es wagten, seinen Befehlen nicht zu gehorchen; alle taten, was er sagte. Und im Lebenslosen Wald lebte der Kater Bayun, und jeder, der ihm begegnete, fiel nach seinen Geschichten in einen tiefen Schlaf oder starb durch seine eisernen Krallen.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Das dreimal neunte Königreich

Wie bereits zu erkennen ist, teilen sich die Spieler in mehrere Gruppen auf:

  • friedliche Bewohner (edle Jungen, schöne MĂ€dchen, Iwan Zarewitsch, Grauer Wolf und Wasilisa die Weise)
  • RĂ€uber (eigentliche RĂ€uber sowie Baba Yaga und der Waldgeist)
  • UnabhĂ€ngige (Zmei Gorynych, EinĂ€ugiges Unheil, die Prinzessin-Frosch, Koschtschej der Unsterbliche, der Kater Bayun)

Das Ziel des Spiels, wie bereits erwĂ€hnt, ist es, am Leben zu bleiben und zu gewinnen. Die Gegner mĂŒssen auf die eine oder andere Weise das Spiel verlassen, und die UnabhĂ€ngigen sollten ebenfalls bis zum Ende des Spiels am Leben bleiben. Im Spiel gibt es Gold, eine Art SpielwĂ€hrung, die die Spieler nur im Spiel verdienen. Die Gewinner erhalten Gold. Je mehr Gold, desto höher die Bewertung des Spielers.

Ich werde etwas ausfĂŒhrlicher auf die Beschreibung der Charaktere eingehen.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Edler Junge

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Schönes MÀdchen

Edler Junge und Schönes MĂ€dchen — die hĂ€ufigste und wichtigste Rolle im Spiel. Es sind friedliche Bewohner, die nachts schlafen und tagsĂŒber arbeiten. Nachts werden sie von einem der RĂ€uber, dem Schlangendrachen und anderen Rollen angegriffen, und die weise Wassilissa heilt sie. Mit einer gewissen, geringen Wahrscheinlichkeit können der Gute Mensch oder das Rote MĂ€dchen den Angriff ohne Schaden ĂŒberstehen (möglicherweise dabei Gold verlieren), jedoch erfĂ€hrt am nĂ€chsten Tag nach dem Angriff jeder ihren Spielernamen. Nachts unternehmen diese Spieler keine ZĂŒge, sondern analysieren die Spielsituation anhand der Nachrichten im Spiel-Chat. TagsĂŒber entscheiden diese Spieler durch Abstimmung, wer von ihnen kein Guter Mensch oder Rotes MĂ€dchen ist. Der Spieler, der von der Mehrheit der anderen Spieler gewĂ€hlt wurde, verlĂ€sst das Spiel, wĂ€hrend die verbleibenden Spieler Gold gewinnen oder verlieren. Wenn die Spieler niemanden mit einer Mehrheit wĂ€hlen, wird niemand hingerichtet.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Iwan-Zarewitsch

Iwan-Zarewitsch — ursprĂŒnglich ein anonymer BeschĂŒtzer der friedlichen Bewohner. Nachts ĂŒberprĂŒft er die Rollen anderer Spieler, da er nur einen VerbĂŒndeten kennt — den Grauen Wolf. Mit der direkten UnterstĂŒtzung des Grauen Wolves (der ebenfalls die Rollen anderer Spieler ĂŒberprĂŒfen kann) kann Iwan-Zarewitsch anstelle einer ÜberprĂŒfung nachts einen anderen Charakter töten. Wenn Iwan-Zarewitsch bei einer ÜberprĂŒfung die Rolle des Guten Menschen oder des Roten MĂ€dchens bei einem Spieler sieht, kann er sie zu sich einladen und ihnen den Grauen Wolf sowie andere Gute Menschen und Rote MĂ€dchen vorstellen. Iwan könnte von der Prinzessin-Frosch behindert werden, die ihn nachts verfĂŒhren kann, ohne seine Rolle am Tag anderen Spielern zu verraten. Wenn Iwan die Prinzessin-Frosch selbst entdeckt, kann er ihr vorschlagen, sich den friedlichen Bewohnern anzuschließen, jedoch, wenn die Prinzessin ablehnt, wird sie durch Ivans Hand sterben. Der Schlangendrache kann ebenfalls Ivans ÜberprĂŒfungen stören, wird jedoch im Gegensatz zur Prinzessin-Frosch am Tag den anderen Spielern erzĂ€hlen, wer von ihnen Iwan-Zarewitsch ist. TagsĂŒber unterscheidet sich Iwan-Zarewitsch nicht von anderen Guten Menschen.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Grauer Wolf

Grauer Wolf — der Helfer von Iwan Zarewitsch, dessen scharfer Geruchssinn Iwan hilft, andere Gute Burschen und Rote MĂ€dchen zu finden. Der Graue Wolf sagt diesen Spielern, wer Iwan Zarewitsch ist, und informiert ĂŒber andere Spieler mit den Rollen der Guten Burschen und Roten MĂ€dchen. Wenn der Wolf einen RĂ€uber oder einen anderen Gegner entdeckt, informiert er sofort Iwan Zarewitsch, 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 Burschen und kann niemanden prĂŒfen, und die Prinzessin erkennt nicht, dass es tatsĂ€chlich der Graue Wolf war, da der Wolf nachts nicht schlĂ€ft. Der Wolf erfĂ€hrt jedoch tagsĂŒber, wer von den Spielern die Prinzessin Frosch ist, und kann versuchen, die anderen Guten Burschen und Roten MĂ€dchen, die er zu Iwan Zarewitsch gebracht hat, dazu zu bringen, fĂŒr die Hinrichtung der Prinzessin Frosch zu stimmen. Auch in der nĂ€chsten Nacht kann er versuchen, die Prinzessin Frosch anonym auf die Seite der friedlichen Bewohner zu ziehen, damit sie niemanden von ihnen angreift. In der Nacht kann der Wolf sein Leben opfern, um Iwan Zarewitsch oder die weise Wasilisa zu retten, wenn er vermutet, dass sie plötzlich von RĂ€ubern angegriffen werden oder von Kotschej verzaubert wurden (der Wolf hat eine angeborene ImmunitĂ€t gegen Kotschejs Magie), aber nach dem Selbstopfer scheidet der Wolf aus dem Spiel aus.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Wasilisa die Weise

Wasilisa die Weise — spielt fĂŒr die friedlichen Bewohner, jedoch wissen sie nichts von ihr, da Wasilisa sehr bescheiden ist. Auch wenn Wasilisa die Heilung durchfĂŒhrt, stellt sie keine Fragen und behandelt wie eine gute Ärztin alle ohne Unterschied. Doch wenn ihr Medikament Kotschej, Licho oder Leschij verabreicht wird – ihnen bleibt nicht lĂ€nger als ein Tag zu leben, da Wasilisa nur Menschen heilt. Der Schlange Gorynytsch oder der Katze Bayun wird Wasilisas Arznei ebenfalls nicht helfen, bringt jedoch auch keinen Schaden. Auch die Katze Bayun berĂŒhrt Wasilisa nachts nicht, da sie nicht in den Leeren Wald zum HeilkrĂ€utern geht. Außerdem wirken die weiblichen Reize der Prinzessin Frosch nicht auf Wasilisa. Wenn man versucht, ihren Patienten zweimal zu töten, wird die Medizin machtlos sein. Wasilisa wird auch vor magischen Angriffen nicht retten, zum Beispiel vor dem Fluch von Licho. TagsĂŒber verhĂ€lt sich Wasilisa wie ein Rotes MĂ€dchen, und nur ein flĂŒchtiger, leicht trauriger Blick kann leicht andeuten, dass sie die beste Heilerin im Dreivietzen Königreich ist.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
RĂ€uber

RĂ€uber, im Gegensatz zu allen vorherigen Rollen, kennen sich gegenseitig, da sie in einem einzigen Logik leben und auch Lesch und Baba Jaga kennen, weshalb sie sofort ab dem ersten Zug koordiniert handeln können. Aber nur der AnfĂŒhrer der Bande agiert nachts und stimmt tagsĂŒber nicht ab, wĂ€hrend die anderen RĂ€uber sich bemĂŒhen, als Gute Jungs und Rote MĂ€dchen zu fungieren. Wenn der AnfĂŒhrer aus irgendeinem Grund aus dem Spiel ausscheidet, nimmt sofort einer der verbleibenden RĂ€uber seinen Platz ein. In erster Linie versuchen die RĂ€uber, Iwan den Zaren außer Gefecht zu setzen, bevor er genĂŒgend Macht aus den Guten Jungs und Roten MĂ€dchen gesammelt hat, um tagsĂŒber aktiv gegen die RĂ€uber vorzugehen.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Lesch

Lesch spioniert nachts fĂŒr die RĂ€uber und informiert sie ĂŒber gefundene Rollen in ihrem Logik, aber tagsĂŒber stimmt er nicht ab, da er nicht im Dorf lebt. Andere Spieler können jedoch fĂŒr Lesch stimmen und ihn damit hinrichten. Da Lesch aus den SĂŒmpfen stammt, kann die Prinzessin-Heuschrecke ihn nicht verfĂŒhren, und wenn sie es versucht, markiert Lesch ihr Haus, und die Dorfbewohner erfahren, wer sie wirklich ist. Lesch braucht sich auch nicht vor den Zaubern von Koschej zu fĂŒrchten, aber Wassilisa kann ihn bis zum Tod heilen. Wenn die Katze-Bajun versucht, Lesch anzugreifen, riskiert sie, ihre eisernen Krallen zu verlieren, und dann muss die Katze ihre Opfer nur durch Schnurren einschlĂ€fern.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Baba Yaga

Baba Yaga arbeitet ebenfalls zusammen mit den RĂ€ubern, zaubert nachts: sie kann entweder anderen Spielern Krankheiten auferlegen oder einen ihrer VerbĂŒndeten vor Angriffen schĂŒtzen. Ihre Magie ist sogar stĂ€rker als der Fluch des Ungeheuers. TagsĂŒber ist Baba Jaga ebenfalls aktiv: den, der unter ihrem Schutz steht, kann man selbst mit einer Mehrheitsabstimmung nicht hinrichten. Allerdings sind die VorrĂ€te an magischen Wurzeln fĂŒr den tagsĂŒber Schutz begrenzt, sodass Baba Jaga niemanden, einschließlich sich selbst, mehr als dreimal im Spiel schĂŒtzen kann. TagsĂŒber gibt sich Baba Jaga als gewöhnliches rotes MĂ€dchen aus und stimmt gemeinsam mit allen ab.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Schlange-Gorynych

Schlange-Gorynych Nachts fliegt er ĂŒber Dörfer, WĂ€lder und SĂŒmpfe und bringt Raub, indem er tagsĂŒber die Rolle des Bestohlenen spielt. TagsĂŒber schlĂ€ft der Drache und stimmt deshalb nicht ab, doch er kann mit Mehrheit verurteilt werden. Der Drache ist sehr gefĂ€hrlich fĂŒr alle, insbesondere fĂŒr die RĂ€uber und Ivan-Zarevich. Es ist dem Drachen egal, wen er beraubt, aber wenn ihn der Wolf oder der Leshy entlarven, kann er zu einem wertvollen VerbĂŒndeten werden. Wenn man den Drachen nachts tötet, hat man mit einer gewissen Wahrscheinlichkeit die Chance auf einen sehr wertvollen Gegenstand – die Drachenhaut, die ihren Besitzer einmal vor physischem Angriff schĂŒtzt.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
EinĂ€ugiger WĂŒterich

EinĂ€ugiger WĂŒterich tötet nachts alle, die ihm in den Weg kommen, und diejenigen, die er nicht töten kann (Leshy, Kot-Bayon oder Zmaj Gorynych) verflucht, sodass jeder, der versucht, in dieser Nacht mit dem Verfluchten zu sprechen, am folgenden Tag stirbt. Der Verfluchte selbst kommt dabei ebenfalls um, nur der Kot-Bayon bleibt verschont und legt sich einfach schlafen, um Kraft zu tanken, wodurch er seinen Zug in der nĂ€chsten Nacht aussetzt. Nur Baba-Jaga kann von dem Fluch befreien. Der Fluch wirkt auch nicht gegen denjenigen, der Kot-Bayon besiegt hat: Er, wie auch der Kot, liegt einfach schlafen und setzt seinen Zug aus.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Die Prinzessin-Frosch

Die Prinzessin-Frosch kann im Spiel nicht gewinnen, aber kann viel Geld verdienen, indem sie andere Spieler nachts verfĂŒhrt. Der VerfĂŒhrte setzt dabei seinen Zug aus. Der Frosch kann Vasilisa die Weisen nicht verfĂŒhren und sollte auch den Leshy meiden, der sie am nĂ€chsten Tag allen preisgeben wird. Wenn Ivan-Zarevich oder der AnfĂŒhrer der RĂ€uber den Frosch finden, können sie ihn auf die Seite der Friedlichen oder der RĂ€uber einladen; Ivan akzeptiert die Ablehnung des Frosches nicht, der AnfĂŒhrer ist da weniger wĂ€hlerisch. Aber die Prinzessin ist ziemlich schlau, sie kann eine Doppelagentin werden, denn obwohl sie alleine nicht gewinnen kann, ist es eine hervorragende Chance, Gold zu sammeln, da die Chancen, bis zum Ende des Spiels durchzuhalten, erheblich steigen! TagsĂŒber gibt sich die Prinzessin-Frosch als Rote Jungfrau aus und stimmt gemeinsam mit allen anderen ab.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
Koschtschej der Unsterbliche

Koschtschej der Unsterbliche lebt in seiner Burg. Nachts wandert er durch die umliegenden Dörfer und zombifiziert die Guten Gesellen und Roten Jungfrauen, die ihm in den Dienst treten und alle Aufgaben bedingungslos erfĂŒllen. Wenn sie beispielsweise den Befehl verweigern, tagsĂŒber anders abzustimmen, als es Koschei gesagt hat, oder tagsĂŒber Nachrichten im Chat zu schreiben, wenn Koschei dies verboten hat, stirbt der Diener Koscheis. Dadurch kann Koschei die Ergebnisse der Abstimmung tagsĂŒber beeinflussen, obwohl er selbst nicht abstimmt. Wenn Koschei getötet wird, sterben auch all seine Opfer. Vasilisa kann den Diener Koscheis heilen, der dann zu seiner ursprĂŒnglichen Rolle zurĂŒckkehrt. Der Drache Zmey-Gorynych und der Wolf haben eine angeborene ImmunitĂ€t gegen das Zombifizieren, somit kann Koschei sie trotz aller BemĂŒhungen nicht in seinen Dienst zwingen. Außerdem kann der Wolf Ivan oder Vasilisa in der Not retten, indem er sich opfert. Die vom Wolf Geretteten erwerben die Wolf-ImmunitĂ€t gegen das Zombifizieren.

„Neue Bylyny“. FĂŒr Dev, Ops und neugierige Menschen
der Kater Bayun

der Kater Bayun lebt im Wald und jagt nachts. TagsĂŒber schlĂ€ft er in seinem Baumstamm und nimmt daher nicht an Abstimmungen teil. TagsĂŒber kann er jedoch mit einer Mehrheit der Stimmen hingerichtet werden. Der Kater kann auf zwei Arten angreifen: schnurren — und dann schlĂ€ft sein Opfer ein und kann nachts nicht gehen und am nĂ€chsten Tag nicht abstimmen — oder sofort mit eisernen Krallen töten. Der Angriff mit Krallen funktioniert nicht gegen Zmey-Gorynych, und wenn der Kater den Leshy angreift, kann er ganz ohne Krallen dastehen! Der Lich kann den Kater nicht verfluchen, nachdem dieser einfach eine Nacht schlafen wird. Wer es schafft, Kater Bayun zu besiegen, wird von jeder Krankheit und jedem Übel, einschließlich des Fluchs des Lichs, geheilt. Diese FĂ€higkeit des Katers bleibt bis zum Ende des Spiels beim Spieler. Die Diener Koscheis können tagsĂŒber nicht fĂŒr den Kater abstimmen, können jedoch indirekt herausfinden, wer der Kater ist, ohne dies Koschei mitzuteilen. Kater Bayun bildet keine Allianzen mit Ivan oder den RĂ€ubern, sodass sie fĂŒr den Kater das Hauptziel sind.

Verwendete Technologien

FĂŒr die Entwicklung des Spiels habe ich die serverless Technologie basierend auf OpenFaaS gewĂ€hlt, da sie einfach genug ist, um das Spiel zu organisieren, und gleichzeitig fortgeschritten genug, um komplexe Spielregeln ohne unnötige Komplikationen zu schreiben. Ich werde auch ein Kubernetes-Cluster verwenden, da diese Bereitstellungsmethode eine schnelle und zuverlĂ€ssige Bereitstellung sowie einfache Skalierbarkeit ermöglicht. FĂŒr die Erstellung der Spiel-Logik kann man nur OpenFaaS nutzen, aber ich werde auch versuchen, einen GeschichtenerzĂ€hler als separaten Container zu machen, um die KomplexitĂ€t der Umsetzung zu vergleichen. Als Hauptprogrammiersprache fĂŒr Mikrodienste und Funktionen habe ich gewĂ€hlt Go, da ich ihn seit langem in meiner Freizeit als Ersatz fĂŒr Perl lerne, und fĂŒr die Interaktion der Benutzer mit den Mikrodiensten und Funktionen wird js auf Grundlage eines bestimmten Frameworks verwendet. Über die endgĂŒltige Entscheidung werde ich in einem entsprechenden Artikel der Serie berichten. FĂŒr die Kommunikation zwischen den Funktionen habe ich mich fĂŒr NATS.io entschieden, da ich bereits vorher damit in Kontakt war 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 von Tests
  • Start einer Testspiel-Session
  • Ergebnisse

Quelle: habr.com

60GB SSD 8Gb DDR4