«Nouvelles Épopées». Pour les devs, ops et les curieux.

«Nouvelles Épopées». Pour les devs, ops et les curieux.

Suite à de nombreuses demandes de lecteurs, nous entamons un grand cycle d'articles sur l'application de la technologie de calcul sans serveur pour le développement d'une application réelle. Ce cycle portera sur le développement de l'application, les tests et la livraison aux utilisateurs finaux en utilisant des outils modernes : une architecture d'application microservices (dans une variante serverless, basée sur OpenFaaS), un cluster kubernetes pour le déploiement de l'application, une base de données MongoDB, axée sur le clustering et l'application cloud, ainsi qu'un bus cloud NATS. L'application met en œuvre le jeu « Byliny », une des variantes du jeu populaire en salon « Mafia ».

Qu'est-ce que « Byliny » ?

C'est une variante du jeu « Mafia », également connue sous le nom de « Werewolf ». Elle repose sur un jeu d'équipe, où les participants doivent progressivement découvrir qui est qui et tenter de gagner. Malheureusement, dans le cadre d'un jeu en ligne, un élément essentiel du jeu, à savoir l'interaction personnelle, disparaît, et les règles de la « Mafia » classique sont assez simples. Par conséquent, pour un processus de jeu plus non linéaire et intéressant, d'autres personnages sont généralement ajoutés, tout en préservant les caractéristiques principales de l'original, comme le passage du jour à la nuit, les tours uniquement la nuit, ainsi que des alliances entre les participants. Un autre aspect important est que dans le jeu en ligne, le maître de jeu (qui est aussi le Maître de jeu, Conte) est généralement un programme informatique.

Description du jeu

Les règles du jeu que je souhaite réaliser sont issues d'un ancien bot IRC que j'ai conservé dans mes archives personnelles il y a environ 10 ans. « Byliny » a une histoire qui débute chaque partie :

Dans le royaume lointain, au trente-troisième État, derrière sept mers, vivaient des villages, et dans ceux-ci Des jeunes hommes valeureux et Des jeunes femmes charismatiques. Ils semaient du blé et allaient dans les bois environnants pour cueillir des champignons et des baies… Et cela se poursuivait de siècle en siècle, jusqu'à ce qu'une terrible catastrophe ne secoue la Terre et que le mal ne commence à se répandre dans le monde ! Les nuits devenaient longues et froides, et dans l'obscurité rôdaient des créatures malfaisantes et terrifiantes. Un jour, de quelque part Le Serpent de Gorynych est arrivé et s'est mis à enlever les jeunes femmes charismatiques et à voler toutes les choses précieuses aux villageois. Une vieille femme méchante et avare, Baba-Yaga, arrivée sur un balai des forêts lointaines, troubla l'esprit des habitants, et même certains abandonnèrent leur artisanat et s'en allèrent dans les bois devenir des voleurs, formant une bande. Les scélérats rencontrèrent Leshy, capable de se transformer en arbres et en buissons, il commença à surveiller les paisibles villageois et à servir les bandits, reniflant si les Gentils jeunes gens avaient l'intention de libérer leurs villages de l'abomination. Les Gentils jeunes gens et les Belles jeunes filles, fatigués des incursions des Bandits, et des morts horribles aux mains du terrible Malheur à l'Œil Unique, rassemblèrent de l'or et invitèrent de la ville voisine un célèbre combattant — Ivan le Tsarévitch, qui promit de délivrer le village des bandits. Dans une clairière de la forêt, Ivan sauva d'une mort inévitable le Loup Gris, tombé dans un piège des Bandits. En retour, le Loup promit d'informer le Tsarévitch de diverses créatures malfaisantes de la forêt. Passait par là une célèbre guérisseuse Vasilisa la Sage, qui, voyant la détresse, resta pour soigner les habitants blessés par les attaques des scélérats. Au-delà de la forêt apparut un palais noir, où, selon les rumeurs, s'était installé Koschey l'Immortel, qui chaque nuit visitait les villages et ensorcelait les Gentils jeunes gens et les Belles jeunes filles, afin qu'ils n'osent pas désobéir à ses ordres, tous faisaient comme il disait. Et dans la Forêt Stérile s'installait le Chat-Baïoun, et quiconque le rencontrait s'endormait d'un sommeil mortel après ses contes ou périssait sous ses griffes de fer.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Le Royaume des Trente-neuf

Comme vous pouvez le voir, les joueurs se divisent en plusieurs groupes :

  • les villageois pacifiques (Gentils jeunes gens, Belles jeunes filles, Ivan le Tsarévitch, le Loup Gris et Vasilisa la Sage)
  • les bandits (les véritables bandits, ainsi que Baba-Yaga et Leshy)
  • les indépendants (Zmey-Gorynych, Malheur à l'Œil Unique, la Princesse Grenouille, Koschey l'Immortel, le Chat-Baïoun)

Le but du jeu, comme indiqué précédemment, est de survivre et de gagner. Les adversaires doivent quitter le jeu d'une manière ou d'une autre, et les indépendants doivent également rester en vie jusqu'à la fin du jeu. Il y a de l'or dans le jeu, une sorte de monnaie de jeu, que les joueurs ne gagnent que dans le jeu. Les gagnants reçoivent de l'or. Plus il y a d'or, plus le classement du joueur est élevé.

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

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Gentil jeune homme

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Belle jeune fille

Gentil jeune homme et Belle jeune fille — le rôle le plus commun et principal du jeu. Ce sont des villageois qui dorment la nuit et travaillent le jour. La nuit, ils sont attaqués par des bandits, le Serpent de Gorynych et d'autres rôles, tandis que Vasilisa la Sage les guérit. Avec une certaine probabilité, le Brave Jeune Homme ou la Belle Fille Rouge peuvent survivre à l'attaque sans dommage (pouvant perdre de l'or dans le processus), mais tous apprendront le pseudonyme du joueur dès le lendemain après l'attaque de protection. La nuit, ces joueurs ne font aucun mouvement, mais analysent la situation de jeu en se basant sur les messages dans le chat de jeu. Le jour, ces joueurs décident par vote qui d'entre eux n'est pas le Brave Jeune Homme ou la Belle Fille Rouge. Le joueur qui reçoit la majorité des votes des autres joueurs quitte le jeu, les restants gagnent ou perdent de l'or. Si les joueurs n'ont pas choisi quelqu'un à la majorité des voix, aucun joueur ne sera exécuté.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Ivan Tsarevich

Ivan Tsarevich — un protecteur anonyme des villageois au départ. La nuit, il 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 d'une vérification, Ivan Tsarevich voit le rôle du Brave Jeune Homme ou de la Belle Fille Rouge chez un joueur, il peut les inviter chez lui et les présenter au Loup Gris ainsi qu'aux autres Braves Jeunes Hommes et Belles Filles Rouges. Ivan peut être dérangé par la Tsarévna Grenouille, qui peut le séduire la nuit, sans révéler son rôle aux autres joueurs le jour. Si Ivan découvre la Tsarévna Grenouille lui-même, il peut lui proposer de rejoindre les villageois, mais si la Tsarévna refuse, elle meurt de la main d'Ivan. Le Serpent de Gorynych peut également entraver les vérifications d'Ivan Tsarevich, mais, contrairement à la Tsarévna Grenouille, il révélera le jour aux autres joueurs qui est Ivan Tsarevich. Le jour, Ivan Tsarevich ne se distingue en rien des autres Braves Jeunes Hommes.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Loup Gris

Loup Gris — l'assistant d'Ivan Tsarevich, dont l'odorat aigu aide Ivan à trouver d'autres Gentils Jeunes et Filles Rouges. Le Loup Gris indique aux joueurs qui est Ivan Tsarevich et informe également sur d'autres joueurs ayant des rôles de Gentils Jeunes et de Filles Rouges. Si le Loup découvre un voleur ou un autre ennemi, il informe immédiatement Ivan Tsarevich afin qu'il prenne des mesures la nuit suivante. Si la Princesse Grenouille attaque le Loup, il se transforme en un Gentil Jeune ordinaire et ne peut plus vérifier qui que ce soit, et la Princesse ne saura pas que c'était en réalité le Loup Gris, car le Loup ne dort pas la nuit. Cependant, le Loup sait de jour qui parmi les joueurs est la Princesse Grenouille et peut essayer d'inciter les autres Gentils Jeunes et Filles Rouges qu'il a amenés à Ivan Tsarevich à voter pour la mise à mort de la Princesse Grenouille. De plus, la nuit suivante, il peut essayer anonymement d'inciter la Princesse Grenouille à rejoindre le côté des villageois, afin qu'elle n'attaque aucun d'eux. Le Loup peut de nuit se sacrifier pour sauver Ivan Tsarevich ou Vasilisa la Sage, s'il suppose qu'ils pourraient soudainement être attaqués par des voleurs, ou s'ils ont été zombifiés par Koshchey (le Loup a une immunité innée aux charmes de Koshchey), mais le Loup, après son sacrifice, est éliminé du jeu.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Vasilisa la Sage

Vasilisa la Sage — joue pour les villageois, cependant ils ne le savent pas, car Vasilisa est très modeste. De plus, Vasilisa la Sage, lorsqu'elle soigne, ne pose pas de questions et traite tout le monde comme un bon docteur. Mais si son médicament est ingéré par Koshchey, Likhо ou Leshiy, ils ne vivront pas plus d'un jour, car Vasilisa ne soigne que les humains. Le Serpent Gorynych ou le Chat Bayun ne bénéficieront également pas des soins de Vasilisa la Sage, mais ne subiront pas de dommages non plus. De plus, le Chat Bayun n'attaque pas Vasilisa la nuit, car elle ne va pas chercher des plantes médicinales dans la Forêt Sans Vie. En outre, les charmes féminins de la Princesse Grenouille n'affectent pas Vasilisa. Si son patient est attaqué deux fois, la médecine sera impuissante. Vasilisa ne sauvera pas non plus des attaques magiques, comme de la malédiction de Likhо. Pendant la journée, Vasilisa agit comme une Fille Rouge, et seul un regard furtif et légèrement triste peut légèrement suggérer qu'elle est la meilleure guérisseuse du Royaume des Trois Neuf.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Voleur

Voleurs, contrairement à tous les rôles précédents, se connaissent, car ils vivent dans le même repaire, et connaissent également le Loup-Garou et la Sorcière, ce qui leur permet d'agir de manière coordonnée dès le premier tour. Cependant, seul le Chef de la bande agit la nuit et ne vote pas pendant la journée, tandis que les autres Bandits feignent d'être des Jeunes Gentils et des Filles en Rouge. Si le Chef est éliminé pour une raison quelconque, l'un des Bandits restants prend immédiatement sa place. En priorité, les Bandits essaient de neutraliser Ivan-Tsarévitch, avant qu'il n'ait rassemblé suffisamment de forces parmi les Jeunes Gentils et les Filles en Rouge pour s'opposer activement aux Bandits pendant la journée.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Loup-Garou

Loup-Garou espionne pour les Bandits la nuit, leur rapportant les rôles trouvés dans leur repaire, mais ne vote pas pendant la journée, car il ne vit pas dans le village. Cependant, d'autres joueurs peuvent voter pour le Loup-Garou et ainsi le condamner à mort. Comme le Loup-Garou vient des marais, il ne peut pas être séduit par la Princesse Grenouille, et s'il essaie, il marquera sa maison, et les villageois sauront qui elle est vraiment. Le Loup-Garou n'a pas à craindre les enchantements de Koshchei, mais Vasilisa peut le soigner jusqu'à la mort. Si le Chat-Bayoun tente d'attaquer le Loup-Garou, il risque de perdre ses griffes en fer, et ensuite le Chat devra endormir ses victimes uniquement avec son ronronnement.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Baba-Yaga

Baba-Yaga travaille également avec les Bandits, castagne la nuit : elle peut soit envoyer une maladie aux autres joueurs, soit protéger un de ses alliés d'une attaque. Sa magie est même plus puissante que la malédiction du Mort-vivant. Pendant la journée, la Sorcière est aussi active : celui qu'elle protège ne peut pas être exécuté même par une majorité de voix. Cependant, le stock de racines magiques pour la protection diurne est limité, donc la Sorcière ne peut protéger quelqu'un, y compris elle-même, plus de trois fois par partie. Pendant ce temps, la Sorcière se fait passer pour une simple Fille en Rouge et vote avec tout le monde.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Serpent à Trois Têtes

Serpent à Trois Têtes la nuit, il vole au-dessus des villages, des forêts et des marais, commettant des vols et révélant son rôle de voleur durant la journée. Pendant la journée, le Serpent dort, donc il ne vote pas, mais il peut être exécuté par une majorité de voix. Le Serpent est très dangereux pour tous, en particulier pour les Bandits et Ivan le Tsarévitch. Le Serpent n'a pas d'importance sur qui voler, mais s'il est démasqué par le Loup ou le Lésin, il peut devenir un précieux allié. Si on tue le Serpent la nuit, il y a une certaine probabilité d'obtenir un objet très précieux : la Peau de Serpent, qui protège son possesseur une fois contre une attaque physique.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
La Malice à Un Œil

La Malice à Un Œil la nuit, elle tue tous ceux qui se trouvent sur son chemin, et ceux qu'elle ne peut pas tuer (le Lésin, le Chat-Baïoun, ou le Serpent de Gorynych) — elle les maudit, si bien que quiconque essaie de communiquer avec le maudit cette même nuit mourra dans la journée. Le maudit meurt également, seul le Chat-Baïoun ne meurt pas, il se contente de s'endormir pour regagner ses forces, passant son tour la nuit suivante. La seule à pouvoir sauver de la malédiction est Baba-Yaga. La malédiction n’agit pas non plus sur celui qui a vaincu le Chat-Baïoun : lui, comme le Chat, se contente de s'endormir tout en passant son tour.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
La Princesse-Frog

La Princesse-Frog ne peut pas gagner au jeu, mais peut gagner beaucoup d'argent en séduisant d'autres joueurs la nuit. Celui qui est séduit passe alors son tour. La Grenouille ne peut pas séduire Vassilissa la Sage, et elle doit également éviter le Lésin, qui la trahira le lendemain. Si Ivan le Tsarévitch ou le Chef des Bandits trouvent la Grenouille, ils peuvent l'inviter du côté des villageois ou des Bandits, sachant qu'Ivan refuse d'accepter le refus de la Grenouille, tandis que le Chef est moins exigeant. Mais la Princesse est assez rusée, elle peut devenir une double agente, car même si elle ne peut pas gagner seule, — c'est une excellente occasion de accumuler de l'or, car les chances d'aller jusqu'à la fin du jeu augmentent considérablement ! Pendant la journée, la Princesse-Frog fait semblant d'être une Belle Jeune Fille et vote avec tout le monde.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
Koschey l'Immortel

Koschey l'Immortel il vit dans son château. La nuit, il se balade dans les villages environnants et zombifie les Gentils Jeunes Hommes et les Belles Dames qui rejoignent son service et exécutent sans réserve toutes ses ordres. En refusant d'exécuter un ordre, par exemple voter différemment pendant la journée de ce qu'a dit Koshchey, ou écrire des messages dans le chat pendant la journée si Koshchey l'a interdit, le Serviteur de Koshchey périt. Ainsi, Koshchey est capable d'influencer les résultats du vote de jour, bien qu'il ne vote pas lui-même. Si Koshchey est tué, toutes ses victimes périssent également. Vasilisa peut guérir le Serviteur de Koshchey, qui revient alors à son rôle initial. Le Serpent-Gorynych et le Loup ont une immunité congénitale au zombification, donc Koshchey ne peut pas les attirer à son service. De plus, le Loup peut sauver Ivan ou Vasilisa en se sacrifiant. Les sauvés par le Loup acquièrent une immunité de Loup contre la zombification.

«Nouvelles Épopées». Pour les devs, ops et les curieux.
le Chat-Baïoun

le Chat-Baïoun il vit dans la forêt et chasse la nuit. Pendant la journée, il dort dans sa cavité, donc il ne participe pas au vote. Cependant, il peut être exécuté pendant la journée par la majorité des voix. Le Chat peut attaquer de deux manières : en ronronnant, ce qui endort sa victime et l'empêche de se déplacer la nuit, ainsi que de voter le lendemain, ou en tuant immédiatement avec ses griffes en fer. L'attaque avec les griffes ne fonctionne pas sur le Serpent-Gorynych et, en attaquant le Leshy, le Chat peut même finir sans griffes ! Le Malin ne peut pas maudire le Chat, qui, après la malédiction, dormira juste une nuit. Si quelqu'un parvient à vaincre le Chat-Baioun, il guérira de toute maladie et mal, y compris la malédiction du Malin. Cette capacité du Chat reste à la disposition du joueur jusqu'à la fin du jeu. Les Serviteurs de Koshchey ne peuvent pas voter durant la journée pour le Chat, mais peuvent indirectement savoir qui est le Chat, sans en informer Koshchey. Le Chat-Baioun ne forge pas d'alliances avec Ivan ou les Bandits, donc ils sont pour le Chat un objectif primordial.

Technologies utilisées

Pour le développement du jeu, j'ai choisi la technologie de calcul sans serveur (serverless) basée sur OpenFaaS, car elle est suffisamment simple pour organiser le jeu, tout en étant assez avancée pour écrire des règles de jeu complexes sans complications inutiles. Je vais également utiliser un cluster Kubernetes, car cette méthode de déploiement d'applications permet une mise en œuvre rapide et fiable, ainsi qu'une mise à l'échelle facile. Pour créer la logique du jeu, OpenFaaS peut suffire, mais j'essaierai également de créer un conteur sous forme de conteneur séparé pour comparer la complexité de la mise en œuvre. J'ai choisi Go, car je l'étudie depuis longtemps dans mon temps libre pour remplacer Perl, et j'utiliserai js basé sur un certain framework pour l'interaction des utilisateurs avec les microservices et les fonctions. Je ferai part de ma décision définitive dans l'article correspondant de la série. Pour la communication entre les fonctions, j'ai choisi NATS.io, car j'ai déjà eu à l'utiliser précédemment, et son intégration dans Kubernetes est relativement simple.

Annonce

  • Introduction
  • Configuration de l'environnement de développement, décomposition de la tâche en fonctions
  • Travaux sur le backend
  • Travaux sur le frontend
  • Configuration du CICD, organisation des tests
  • Lancement d'une session d'essai du jeu
  • Résultats

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster