"Nouvelles épopées". Pour les développeurs, les ops et les curieux


À la demande des lecteurs, un grand cycle d'articles commence sur l'application de la technologie informatique sans serveur pour développer une véritable application. Dans ce cycle, nous considérerons le développement, le test et la livraison d'applications aux utilisateurs finaux à l'aide d'outils modernes: une architecture d'application microservice (dans une version sans serveur basée sur OpenFaaS ), un cluster kubernetes pour le déploiement d'applications, une base de données MongoDB axée sur le clustering et l'application cloud, et bus cloud NATS . L'application met en œuvre le jeu "Epics", l'une des variantes du jeu de salon populaire "Mafia".


Qu'est-ce que "Epics"?


Il s'agit d'une variante du jeu "Mafia", c'est aussi "Werewolf". Il est basé sur un jeu d'équipe dans lequel les participants doivent apprendre étape par étape qui est qui et essayer de gagner. Malheureusement, lorsque vous jouez sur le réseau, une composante aussi importante du jeu que l'interaction personnelle disparaît et les règles de la «mafia» classique sont assez simples, par conséquent, d'autres personnages sont généralement ajoutés pour un gameplay plus non linéaire et intéressant, mais en général, les principales caractéristiques de la «mafia» d'origine sont préservées, par exemple, un changement de jour et de nuit, ne bouge que la nuit, ainsi que des alliances entre les participants. Une autre différence importante du jeu sur le réseau est que l'hôte (alias Game Master, Storyteller) est généralement un programme informatique.


Description du jeu


Les règles du jeu que je veux mettre en œuvre sont tirées de l'ancien irc-bot, que j'ai enregistré dans des archives personnelles il y a environ 10 ans. "Bylin" a une trame de fond avec laquelle chaque jeu commence:


Dans le royaume lointain, dans le trentième état, sur sept mers, plusieurs villages vivaient pour eux-mêmes, et en eux les bons et les jeunes filles rouges . Ils ont semé du pain, et sont allés dans la forêt voisine pour les champignons et les baies ... Et cela a continué comme ça de siècle en siècle, jusqu'à ce qu'une terrible catastrophe secoue la Terre et que le mal commence à se répandre dans le monde! Les nuits devinrent longues et froides, et les ténèbres parcouraient la forêt et erraient dans le village de créatures méchantes et terribles. Un Serpent Gorynych est venu de quelque part et a pris l'habitude de voler les Vierges Rouges et de prendre tout ce qui a de la valeur aux villageois. Le nuisible et gourmand Baba Yaga , volant sur un stupa de forêts lointaines, a dérouté l'esprit des habitants, et même certaines personnes ont abandonné l'engin et sont allées dans les bois pour voler, ont fait un gang là-bas. Likhedey a rencontré Leshii, qui savait comment se transformer en arbres et en buissons, il a commencé à regarder les villageois paisibles et à servir les voleurs, en flairant si les bons gars étaient prêts à sauver leurs colonies des mauvais esprits. Les bons gars et les filles rouges, fatigués des raids des voleurs et des morts terribles aux mains du terrible Likh One-eyed , ont ramassé de l'or et ont invité un célèbre combattant, Ivan Tsarevich , de la ville voisine, qui a promis de sauver le village des voleurs. Dans une clairière dans la forêt, Ivan a sauvé de la mort imminente du loup gris , qui est tombé dans le piège des voleurs. En retour, le Loup a promis d'informer Tsarévitch de divers mauvais esprits. Un guérisseur bien connu Vasilisa le Sage est passé et quand elle a vu des problèmes, elle est restée à soigner les résidents qui ont été touchés par des attaques fringantes. Derrière la forêt, un palais noir est apparu, dans lequel, selon les rumeurs, Koshchei l'Immortel s'est installé, chaque soir, il a visité les villages et a jeté un sort aux Bons et aux Filles Rouges afin qu'ils n'osent pas désobéir à son ordre, ils ont tout fait comme il dirait. Et dans la forêt sans vie, Cot-Bayun s'est installé et tous ceux qui l'ont rencontré se sont endormis après ses contes de fées ou sont morts de ses griffes de fer.


Royaume lointain


Comme déjà vu, les joueurs sont répartis en plusieurs groupes:


  • civils (Bons amis, Red Maidens, Ivan Tsarevich, Grey Wolf et Vasilisa the Wise)
  • voleurs (voleurs eux-mêmes, ainsi que Baba Yaga et Leshy)
  • indépendant (Serpent-Gorynych, Likho borgne, princesse grenouille, Koschey l'immortel, Cot-Bayun)

Le but du jeu, comme mentionné ci-dessus, est de rester en vie et de gagner. Les adversaires doivent en quelque sorte quitter le jeu, et les indépendants doivent également rester en vie jusqu'à la fin du jeu. Le jeu a de l'or, une sorte de monnaie de jeu que les joueurs ne gagnent qu'à l'intérieur du jeu. Les gagnants obtiennent de l'or. Plus il y a d'or, plus la cote du joueur est élevée.


Je m'attarderai un peu plus sur la description des personnages.



Bon bon



Red Maiden


Good Good et Red Maiden - le rôle le plus massif et le plus important du jeu. Ce sont des civils qui dorment la nuit et travaillent la journée. La nuit, ils sont attaqués par l'un des voleurs, le Serpent Gorynych et d'autres rôles, et Vasilisa le Sage les traite. Avec une faible probabilité, le Bonhomme ou la Vierge Rouge peut survivre à l'attaque sans dommage (peut-être perdre de l'or en même temps), mais en même temps, tout le monde reconnaîtra le surnom du joueur le lendemain de l'attaque / défense. La nuit, ces joueurs ne font aucun mouvement, mais analysent la situation du jeu en fonction des messages dans le chat du jeu. Dans l'après-midi, ces joueurs décident en votant lequel d'entre eux n'est pas un bon camarade ou une demoiselle rouge. Le joueur pour lequel la plupart des autres joueurs ont voté quitte le jeu, le gain restant ou la perte d'or. Si les joueurs n'ont choisi personne par un vote majoritaire, aucun des joueurs ne sera exécuté.



Ivan Tsarevich


Ivan Tsarevich - à l'origine un défenseur anonyme des civils. La nuit, vérifie les rôles des autres joueurs, car il ne connaît qu'un seul de ses alliés - le Loup Gris. Avec la participation directe du Loup Gris (qui peut également vérifier les rôles des autres joueurs), Ivan Tsarevich, au lieu de vérifier, peut tuer un autre personnage la nuit. Si, à la suite de la vérification, Ivan Tsarevich voit le rôle du Bon jeune homme ou de la Jeune fille rouge dans le joueur, alors il peut les inviter à lui-même et lui présenter le Loup gris et d'autres bons jeunes hommes et les jeunes filles rouges. Ivan peut être empêché par la grenouille princesse, qui peut le séduire la nuit, sans trahir son rôle envers les autres joueurs pendant la journée. Si Ivan lui-même découvre la grenouille princesse, alors elle peut lui proposer de rejoindre les civils, mais si la princesse refuse, elle meurt aux mains d'Ivan. Le Serpent-Gorynych peut également interférer avec les contrôles d'Ivan Tsarevich, mais, contrairement à la Tsarevna-Frog, dans l'après-midi, il dira au reste des joueurs qui est Ivan Tsarevich. Dans l'après-midi, Ivan Tsarevich n'est pas différent des autres bons amis.



Loup gris


Gray Wolf est un assistant d'Ivan Tsarevich, dont l'odeur forte aide Ivan à trouver d'autres bons camarades et jeunes filles rouges. Gray Wolf dit à ces joueurs qui est Ivan Tsarevich, et signale également à d'autres joueurs les rôles de bons camarades et de filles rouges. Si le Loup découvre un voleur ou un autre ennemi, il en informe immédiatement Ivan Tsarévitch afin qu'il agisse la nuit suivante. Si le loup la princesse grenouille attaque, il se transforme en un bon camarade ordinaire et ne peut vérifier personne, et la princesse ne saura pas qu'il s'agissait en fait du loup gris, car le loup ne dort pas la nuit. Cependant, le loup lui-même cet après-midi découvre lequel des joueurs est la princesse grenouille et peut essayer de persuader les bons camarades et les vierges rouges restants qu'il a amenés à Ivan Tsarevich pour voter pour l'exécution de la princesse grenouille. De plus, la nuit suivante, elle peut essayer de persuader de manière anonyme la princesse grenouille aux côtés des civils afin qu'elle ne touche aucun d'eux. Un loup peut se sacrifier la nuit pour sauver Ivan Tsarévitch ou Vasilisa le sage, s'il suggère qu'ils tombent soudainement sous le coup de voleurs, ou ont été zombifiés par Koshchei (le loup est l'immunité innée aux charmes de Koshchei), mais le loup quitte le jeu après le sacrifice de soi.



Vasilisa le sage


Vasilisa the Wise - joue pour les civils, mais ils ne la connaissent pas, car Vasilisa est très modeste. De plus, Vasilisa le Sage, quand il guérit, ne pose pas de questions et comment un bon médecin guérit tout le monde d'affilée. Mais si son médicament est bu par Koschei, Likho ou Leshiy, alors ils ne devraient pas vivre plus d'un jour, car Vasilisa ne traite que les gens. Les médicaments Vasilisa le Sage n'aideront ni le Serpent Gorynych ni Kota-Bajun, mais ils ne porteront pas préjudice. De plus, Cot-Bayun ne touche pas Vasilisa la nuit, car Vasilisa ne se rend pas dans la forêt sans vie pour des herbes médicinales. De plus, les charmes féminins de la princesse grenouille sur Vasilisa ne fonctionnent pas. S'ils essaient de tuer son patient deux fois, le médicament sera impuissant. Vasilisa ne sauvera pas d'attaques magiques, par exemple, de la malédiction de Likh. Dans l'après-midi, Vasilisa se comporte comme une jeune fille rouge, et seul un regard fugace et légèrement triste peut laisser entendre qu'elle est la meilleure médecin de Far Far Away.



Voleur


Les voleurs , contrairement à tous les rôles précédents, se connaissent, car ils vivent dans la même tanière, et connaissent également Leshy et Babu Yaga, ils peuvent donc agir de concert immédiatement dès le premier coup. Mais seul le chef de gang exécute des actions la nuit et ne vote pas pendant la journée, tandis que les autres voleurs prétendent avec diligence être de bons camarades et des filles rouges. Si le chef quitte le jeu pour une raison quelconque, l'un des voleurs restants prend immédiatement sa place. Tout d'abord, les voleurs tentent de neutraliser Ivan Tsarevich, jusqu'à ce qu'il ait rassemblé suffisamment de force des bons camarades et des jeunes filles rouges pour affronter activement les voleurs dans l'après-midi.



Gobelin


Le gobelin espionne les voleurs la nuit, les informant des rôles trouvés dans leur tanière, mais ne vote pas pendant la journée, car il ne vit pas dans le village. Cependant, d'autres joueurs peuvent voter pour Leshy et, ainsi, l'exécuter. Puisque Leshiy vient des marais, la princesse grenouille ne peut pas le séduire, et s'il essaie, Leshiy marquera sa maison et les villageois découvriront qui elle est vraiment. Il ne vaut pas la peine que Lesha ait peur du sort de Koshchei, mais Vasilisa peut le guérir à mort. Si Kot-Baiyun tente d'attaquer Lesha, il risque alors de perdre ses griffes de fer, puis Kot devra euthanasier les victimes avec un seul murmure.



Baba Yaga


Baba Yaga travaille également avec les voleurs, évoque la nuit: il peut soit envoyer une maladie à d'autres joueurs, soit protéger l'un des alliés contre les attaques. Sa sorcellerie est encore plus forte que la malédiction de Leah. Dans l'après-midi, Baba Yaga est également active: celle qui est sous sa protection ne peut être exécutée même à la majorité des voix. Cependant, l'approvisionnement en racines magiques pour la protection diurne est limité, de sorte que Baba Yaga ne peut protéger personne, y compris lui-même, plus de trois fois par partie. Dans cet après-midi, Baba Yaga prétend être la Red Maiden habituelle et vote avec tout le monde.



Serpent-Gorynych


La nuit, le Serpent-Gorynych survole des villages, des forêts et des marécages et se livre à des vols, révélant pendant la journée le rôle d'un voleur. Pendant la journée, le Serpent dort, il ne vote donc pas, mais il peut être exécuté à la majorité des voix. Le serpent est très dangereux pour tout le monde, en particulier pour les voleurs et Ivan Tsarevich. Peu importe à qui l'arracher, mais si le loup ou le gobelin l'ouvre, il peut devenir un allié précieux. Si vous tuez le serpent la nuit, vous pouvez, avec une certaine probabilité, obtenir un objet très précieux - la peau de serpent, qui protégera une fois son propriétaire contre une attaque physique.



Célèbre borgne


La célèbre nuit à un œil tue tous ceux qui le rencontrent en chemin et qui ne peuvent pas être tués (Leshiy, Kota-Bajun ou Zmety Gorynych) - des malédictions, de sorte que quiconque essaie de communiquer avec les damnés de cette nuit mourra pendant la journée. Le maudit lui-même périt en même temps, seul Kot-Baiun, qui se couche simplement pour gagner en force, saute le cap la nuit suivante. Seul Baba Yaga peut sauver Likh de la malédiction. La malédiction n'affecte pas celui qui a vaincu Kota-Baiyun: lui, comme le Chat, va juste se coucher avec une passe.



La grenouille princesse


La grenouille princesse ne peut pas gagner la partie, mais elle peut gagner beaucoup d'argent en séduisant les autres joueurs la nuit. Séduit en sautant le mouvement. La grenouille ne peut pas séduire Vasilisa la Sage, elle devrait également éviter Lesha, qui la remettra à tout le monde le lendemain. Si Ivan Tsarevich ou le chef des voleurs trouve une grenouille, ils peuvent inviter des civils ou des voleurs sur le côté, tandis qu'Ivan n'accepte pas le refus de la grenouille, mais le chef n'est pas si pointilleux. Mais la princesse est assez rusée, peut devenir un agent double, car malgré le fait qu'elle seule ne peut pas gagner, c'est une excellente chance de gagner de l'or, car les chances d'atteindre la fin du jeu sont considérablement augmentées! L'après-midi, la grenouille princesse fait semblant d'être une fille rouge et vote avec tout le monde.



Koschey l'Immortel


Koschey l'Immortel vit dans son château. La nuit, il se promène dans les villages environnants et les zombies, les bons et les jeunes filles rouges, qui se rendent à son service et exécutent sans aucun doute toutes les tâches. Refusant d'exécuter l'ordre, par exemple, de voter différemment pendant la journée que Koschey ne l'a dit, ou d'écrire des messages dans le chat pendant la journée, si Koshchei l'interdit, le serviteur de Koshchei périt. Ainsi, Koschey est en mesure d'influencer les résultats du vote au cours de la journée, bien qu'il ne vote pas lui-même. Si Koshchei est tué, toutes ses victimes meurent également. Vasilisa peut soigner le serviteur de Koshchei, qui reprend ensuite son rôle d'origine. Le Serpent-Gorynych et le Loup ont une immunité innée contre les zombies, donc Koschey, avec tout le désir, ne peut pas les mettre à son service. De plus, le loup peut aider Ivan ou Vasilisa à se sortir des ennuis en se sacrifiant. Sauvé par le loup acquiert une immunité de loup aux zombies.



Ivoire Bayun


Ivory Bayun vit dans la forêt, chasse la nuit. Dort dans son creux pendant la journée, il ne participe donc pas au vote. Cependant, pendant la journée, il peut être exécuté à la majorité des voix. Un chat peut attaquer de deux manières: ronronner - puis sa victime s'endort et ne peut pas marcher la nuit, et aussi voter le lendemain - ou tuer immédiatement avec des griffes de fer. L'attaque des griffes ne fonctionne pas sur le Serpent-Gorynycha, mais, attaquant le Leshy, le Chat peut même rester sans griffes! Célèbre ne peut pas maudire le chat, qui après la malédiction ne dormira qu'une nuit. Si quelqu'un domine Kota-Bajun pour conquérir, il sera guéri de toute maladie et maladie, y compris la malédiction de Liha. Cette capacité Kotova est conservée par le joueur jusqu'à la fin de la partie. Les serviteurs de Koshchei ne peuvent pas voter pour le chat pendant la journée, mais ils peuvent indirectement découvrir qui est le chat sans en informer Koshchei. Kot-Bayun ne conclut pas d'alliances avec Ivan ou les voleurs, donc pour Kot, ils sont l'objectif principal.


Technologies utilisées


Pour écrire le jeu, j'ai choisi la technologie sans serveur basée sur OpenFaaS, car elle est assez simple pour organiser le jeu, et en même temps suffisamment développée pour écrire des règles de jeu complexes sans complications indues. J'utiliserai également le cluster Kubernetes, car cette façon de déployer des applications permet d'obtenir facilement et de manière fiable un déploiement rapide, la possibilité d'évoluer facilement. Pour créer une logique de jeu, seul OpenFaaS peut être supprimé, mais j'essaierai également de faire le Storyteller comme un conteneur séparé pour comparer la complexité de l'implémentation. J'ai choisi Go comme langage de programmation principal pour les microservices et les fonctions, car je l'étudie depuis longtemps dans mon temps libre pour remplacer Perl, et js sera utilisé pour l'interaction des utilisateurs avec les microservices et les fonctions sur la base d'un certain cadre. Je parlerai de la décision finale dans l'article correspondant de la série. Pour la communication entre les fonctions, j'ai choisi NATS.io, car je l'avais déjà rencontré auparavant, et il a une intégration assez facile dans Kubernetes.


Annonce


Source: https://habr.com/ru/post/fr482010/


All Articles