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

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

En raison de nombreuses demandes de lecteurs, une large série d'articles démarre sur l'utilisation de la technologie informatique sans serveur pour développer une application réelle. Ce cycle couvrira le développement d'applications, les tests et la livraison aux utilisateurs finaux à l'aide d'outils modernes : architecture d'application microservice (dans une version sans serveur, basée sur OpenFaaS), grappe kubernetes pour le déploiement d'applications, de base de données MongoDB, axé sur le clustering et les applications cloud, ainsi que sur le bus cloud NATS. L'application implémente le jeu "Epics", une des variantes du jeu de société populaire "Mafia".

Que sont les « épopées » ?

Il s'agit d'une variante du jeu "Mafia", également connu sous le nom de "Werewolf". Il est basé sur un jeu d'équipe dans lequel les participants doivent apprendre étape par étape qui est qui et tenter de gagner. Malheureusement, lorsque vous jouez en ligne, un élément aussi important du jeu que l'interaction personnelle disparaît et les règles de la "Mafia" classique sont donc assez simples. Par conséquent, pour un gameplay plus non linéaire et intéressant, d'autres personnages sont généralement ajoutés, mais en général, les principales caractéristiques de la « Mafia » originale sont préservées, par exemple le changement de jour et de nuit, les mouvements uniquement la nuit, ainsi que les alliances entre les participants. Une autre différence importante entre jouer en ligne 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 souhaite implémenter sont tirées d'un ancien bot irc que j'ai sauvegardé dans mes archives personnelles il y a environ 10 ans. Les "Epics" ont une histoire avec laquelle chaque jeu commence :

Dans le royaume lointain, dans le trentième état, au-delà des sept mers, plusieurs villages vivaient et vivaient, et en eux Bons camarades и Belles filles. Ils semaient du pain et allaient dans la forêt environnante pour cueillir des champignons et des baies... Et cela a continué de siècle en siècle, jusqu'à ce qu'une terrible catastrophe secoue la Terre et que le mal commence à se propager dans le monde entier ! Les nuits devenaient longues et froides, et dans l'obscurité, des créatures méchantes et terribles rôdaient dans la forêt et erraient dans le village. Arrivé de quelque part Serpent Gorynych et a pris l'habitude de voler les jeunes filles rouges et d'enlever tout ce qui avait de la valeur aux villageois. Nocif et gourmand Baba Yaga, qui volait avec un mortier depuis des forêts lointaines, a secoué l'esprit des habitants, et même certains ont abandonné leur métier et sont allés dans la forêt pour voler, y formant un gang. Les méchants se sont rencontrés Leshego, qui savait se transformer en arbres et en buissons, il commença à surveiller les paisibles villageois et à servir les voleurs, détectant si les Bons Amis préparaient quelque chose pour débarrasser leurs colonies des mauvais esprits. Bons gars et belles jeunes filles, fatigués des raids des voleurs et des morts terribles aux mains des terribles Fringant borgne, a collecté de l'or et a invité un lutteur célèbre d'une ville voisine - Ivan Tsarévitch, qui a promis de débarrasser le village des voleurs. Dans une clairière de la forêt, Ivan a sauvé d'une mort certaine Loup gris, qui est tombé dans le piège des Voleurs. En retour, le loup a promis d'informer le tsarévitch des divers mauvais esprits de la forêt. Un célèbre guérisseur est passé par là Vasilisa la Sage, et quand elle a vu des problèmes, elle est restée pour soigner les résidents qui avaient souffert des attaques des fringants. Derrière la forêt est apparu un palais noir dans lequel, selon les rumeurs, il s'est installé Koschey l'immortel, chaque nuit, il visitait les villages et envoûtait les bons camarades et les jeunes filles rouges pour qu'ils n'osent pas désobéir à ses ordres, ils feraient tout comme il le disait. Et je me suis installé dans la forêt sans vie Chat Baiyun, et tous ceux qui le rencontraient s'endormirent après ses récits ou moururent sous ses griffes de fer.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Royaume très lointain

Comme vous pouvez déjà le constater, les joueurs sont répartis en plusieurs groupes :

  • civils (Good Fellows, Red Maidens, Ivan Tsarevich, Grey Wolf et Vasilisa la Sage)
  • voleurs (les voleurs eux-mêmes, ainsi que Baba Yaga et Leshy)
  • indépendant (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey l'Immortel, Cat-Bayun)

Le but du jeu, comme mentionné ci-dessus, est de rester en vie et de gagner. Les adversaires doivent quitter la partie d'une manière ou d'une autre, et les indépendants doivent également rester en vie jusqu'à la fin de la partie. Le jeu contient de l'or, une sorte de monnaie de jeu que les joueurs gagnent uniquement dans le jeu. Les gagnants reçoivent de l'or. Plus il y a d'or, plus la note du joueur est élevée.

Je m'attarderai un peu plus en détail sur la description des personnages.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Bon garçon

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Jeune fille rouge

Bon garçon и Jeune fille rouge - le rôle le plus répandu et le plus important du jeu. Ce sont des civils qui dorment la nuit et travaillent le jour. La nuit, ils sont attaqués par l'un des voleurs, le Serpent Gorynych et d'autres rôles, et Vasilisa la Sage les guérit. Avec une faible probabilité, le Good Fellow ou la Red Maiden peuvent survivre à l'attaque sans dommage (éventuellement en perdant de l'or dans le processus), cependant, tout le monde reconnaîtra le surnom du joueur le lendemain de l'attaque. La nuit, ces joueurs ne font aucun mouvement, mais analysent la situation du jeu en fonction des messages du chat du jeu. Pendant la journée, ces joueurs décident en votant lequel d'entre eux n'est pas le Bon Bonhomme ou la Jeune Fille Rouge. Le joueur élu par la majorité des autres joueurs quitte la partie, les joueurs restants reçoivent ou perdent de l'or. Si les joueurs ne choisissent personne à la majorité, aucun joueur ne sera exécuté.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Ivan Tsarévitch

Ivan Tsarévitch - initialement un défenseur anonyme des civils. La nuit, il vérifie les rôles des autres joueurs, puisqu'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 Tsarévitch, au lieu de vérifier, peut tuer un autre personnage la nuit. Si, à la suite du contrôle, Ivan Tsarévitch voit le rôle d'un bon garçon ou d'une jeune fille rouge chez un joueur, il peut alors l'inviter chez lui et lui présenter le loup gris et d'autres bons camarades et jeunes filles rouges. Ivan peut être gêné par la Princesse Grenouille, qui peut le séduire la nuit, sans révéler son rôle aux autres joueurs pendant la journée. Si Ivan lui-même découvre la princesse grenouille, il peut l'inviter à 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-Tsarévitch, mais, contrairement à la Princesse Grenouille, pendant la journée, il dira aux autres joueurs lequel d'entre eux est Ivan-Tsarévitch. Pendant la journée, Ivan Tsarévitch n'est pas différent des autres bons camarades.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Loup gris

Loup gris - assistant d'Ivan Tsarévitch, dont l'odorat aiguisé aide Ivan à trouver d'autres bons camarades et jeunes filles rouges. Grey Wolf dit à ces joueurs qui est Ivan le Tsarévitch et informe également sur d'autres joueurs avec les rôles de Good Fellows et Red Maidens. Si le Loup découvre un voleur ou un autre ennemi, il en informe immédiatement Ivan Tsarévitch afin qu'il puisse agir la nuit suivante. Si le loup est attaqué par la princesse grenouille, il se transforme en un bon garçon ordinaire et ne peut surveiller personne, et la princesse ne saura pas qu'il s'agissait en réalité du loup gris, puisque le loup ne dort pas la nuit. Cependant, le loup lui-même découvrira dans la journée lequel des joueurs est la princesse grenouille et pourra essayer de persuader le reste des bons camarades et des jeunes filles rouges, qu'il a amenés à Ivan Tsarévitch, de voter pour l'exécution de la grenouille. Princesse. La nuit suivante également, il peut essayer de persuader anonymement la princesse grenouille de se ranger du côté des civils afin qu'elle ne touche aucun d'entre eux. Le loup peut se sacrifier la nuit pour sauver Ivan Tsarévitch ou Vasilisa la Sage, s'il suppose qu'ils tomberont soudainement sous l'attaque de voleurs ou s'ils ont été zombifiés par Koshchei (le loup a une immunité innée contre les charmes de Koshchei), mais le Wolf, après s'être sacrifié, abandonne le jeu.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Vasilisa la Sage

Vasilisa la Sage - joue pour les civils, mais ils ne la connaissent pas, car Vasilisa est très modeste. De plus, Vasilisa la Sage, lorsqu'elle soigne, ne pose pas de questions et, comme un bon médecin, soigne tout le monde. Mais si Koschey, Likho ou Leshy boivent ses médicaments, ils ne vivront pas plus d'un jour, puisque Vasilisa ne soigne que les gens. Les médicaments de Vasilisa la Sage n'aideront pas non plus le serpent Gorynych ou le Chat-Bayun, mais ils ne feront pas de mal non plus. De plus, Kot-Bayun ne touche pas Vasilisa la nuit, puisque Vasilisa ne va pas dans la forêt sans vie pour acheter des herbes médicinales. De plus, les charmes féminins de la Princesse Grenouille ne fonctionnent pas sur Vasilisa. S’ils essayaient de tuer sa patiente à deux reprises, la médecine serait impuissante. Vasilisa ne vous sauvera pas des attaques magiques, par exemple de la malédiction Dashing. Pendant la journée, 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 guérisseuse du Royaume Lointain.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Voyou

Voleurs, contrairement à tous les rôles précédents, ils se connaissent, puisqu'ils vivent dans le même repaire, et connaissent également Leshy et Baba Yaga, ils peuvent donc agir de concert dès le premier mouvement. Mais seul le chef du gang effectue des actions la nuit et ne vote pas le jour, tandis que le reste des voleurs se fait passer pour de bons camarades et des filles rouges. Si le leader 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 le Tsarévitch jusqu'à ce qu'il ait rassemblé suffisamment de forces parmi les bons camarades et les jeunes filles rouges pour affronter activement les voleurs pendant la journée.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Leshy

Leshy la nuit, il espionne les voleurs, les informant des rôles trouvés dans leur repaire, mais le jour il ne vote pas, car il n'habite pas dans le village. Cependant, d'autres joueurs peuvent voter pour Leshy et ainsi l'exécuter. Comme le Leshy vient des marais, il ne peut pas se laisser séduire par la Princesse Grenouille, et s'il essaie, le Leshy marquera sa maison et les villageois découvriront qui elle est vraiment. Leshem ne devrait pas avoir peur du sortilège de Koshchei, mais Vasilisa peut le guérir jusqu'à la mort. Si Kot-Bayun tente d'attaquer Leshy, il risque de perdre ses griffes de fer, et Kot devra alors endormir les victimes avec juste son ronronnement.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Baba Yaga

Baba Yaga Il travaille également avec les voleurs et lance des sorts la nuit : il peut soit envoyer des maladies aux autres joueurs, soit protéger l'un de ses alliés des attaques. Sa sorcellerie est encore plus forte que la malédiction de Likh. Pendant la journée, Baba Yaga est également active : toute personne sous sa protection ne peut être exécutée même à la majorité des voix. Cependant, l'offre de racines magiques pour la protection diurne est limitée, donc Baba Yaga ne peut protéger personne, y compris elle-même, plus de trois fois par partie. Pendant la journée, Baba Yaga se fait passer pour une jeune fille rouge ordinaire et vote avec tout le monde.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Serpent-gorynych

Serpent-gorynych la nuit, il survole les villages, les forêts et les marécages et se livre à des vols, révélant le rôle des volés pendant la journée. Pendant la journée, le Serpent dort, il ne vote donc pas, mais il peut être exécuté à la majorité. Le serpent est très dangereux pour tout le monde, en particulier pour les voleurs et Ivan Tsarévitch. Le serpent ne se soucie pas de qui il vole, mais s'il est découvert par le Loup ou les Leshy, il peut devenir un allié précieux. Si vous tuez le serpent la nuit, vous pouvez, avec une certaine probabilité, recevoir un objet très précieux - la peau de serpent, qui protégera une fois son propriétaire des attaques physiques.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Célèbre borgne

Célèbre borgne la nuit, il tue tous ceux qui se mettent en travers de son chemin, et tous ceux qu'il ne peut pas tuer (Leshy, Kota-Bayun ou le Serpent Gorynych), il maudit, de sorte que quiconque essaie de communiquer avec le damné cette même nuit mourra pendant le jour. . Le damné lui-même meurt également dans ce cas, seul Kot-Bayun ne meurt pas, qui se couche simplement pour reprendre des forces, sautant son tour la nuit suivante. Seul Baba Yaga peut sauver Likh de la malédiction. La malédiction n'affecte pas celui qui a vaincu le Chat-Bayun : lui, comme le Chat, se couche simplement et saute un tour.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Princesse Grenouille

Princesse Grenouille ne peut pas gagner la partie, mais il peut gagner beaucoup d'argent en séduisant les autres joueurs la nuit. Celui qui est tenté rate son tour. La grenouille ne peut pas séduire Vasilisa la Sage, et elle doit également éviter Leshy, qui la trahira à tout le monde le lendemain. Si Ivan le Tsarévitch ou le chef des voleurs trouvent la grenouille, ils peuvent inviter des civils ou des voleurs à leurs côtés, tandis qu'Ivan n'acceptera pas le refus de la grenouille, mais le chef n'est pas si pointilleux. Mais la Princesse est assez rusée, elle peut devenir un agent double, car malgré le fait qu'elle ne peut pas gagner seule, c'est une excellente chance de gagner de l'or, car les chances de survivre jusqu'à la fin du jeu augmentent considérablement ! Pendant la journée, la princesse grenouille se fait passer pour la jeune fille rouge et vote avec tout le monde.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Koschey l'immortel

Koschey l'immortel vit dans son château. La nuit, il se promène dans les villages environnants et zombifie les Good Fellows et les Red Maidens, qui entrent à son service et exécutent sans aucun doute tous les ordres. En refusant d'exécuter un ordre, par exemple de voter pendant la journée différemment de ce qui a été dit par Koshchei, ou d'écrire des messages dans le chat pendant la journée si Koshchei l'a interdit, le serviteur de Koshchei meurt. Ainsi, Koschey est capable d'influencer les résultats du vote pendant la journée, même s'il ne vote pas lui-même. Si Koshchei est tué, toutes ses victimes meurent également. Vasilisa peut guérir le serviteur Koshchei, qui reprend alors son rôle d'origine. Le Serpent-Gorynych et le Loup ont une immunité innée contre la zombification, donc Koschey, peu importe ce qu'il veut, ne peut pas les mettre à son service. Le Loup peut également aider Ivan ou Vasilisa à se sortir du pétrin en se sacrifiant. Sauvé par le loup acquiert l'immunité du loup contre la zombification.

"Nouvelles épopées". Pour les développeurs, les opérateurs et les curieux
Chat Baiyun

Chat Baiyun vit dans la forêt, chasse la nuit. Le jour, il dort dans son creux, il ne participe donc pas au vote. Cependant, pendant la journée, il peut être exécuté à la majorité des voix. Le chat peut attaquer de deux manières : ronronner - puis sa victime s'endort et ne peut pas marcher la nuit, et ne peut pas voter le lendemain - ou tuer sur le coup avec des griffes de fer. Attaquer avec des griffes ne fonctionne pas sur le Serpent-Gorynych, et après avoir attaqué Leshy, le Chat peut se retrouver sans griffes du tout ! Dashing ne peut pas maudire le chat, qui, après la malédiction, dormira simplement une nuit. Si quelqu’un parvient à vaincre Kota-Bayun, il sera guéri de toute maladie ou affection, y compris de la malédiction de Likh. Cette capacité Chat reste avec 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'alliance avec Ivan ou les voleurs, ils sont donc la cible principale de Kot.

Technologies utilisées

Pour écrire le jeu, j'ai choisi la technologie informatique sans serveur basée sur OpenFaaS, car elle est assez simple pour organiser le jeu, et en même temps suffisamment avancée pour écrire des règles de jeu complexes sans complications inutiles. J'utiliserai également un cluster Kubernetes, car cette méthode de déploiement d'applications permet d'obtenir un déploiement rapide et une capacité d'évolution facile assez simple et fiable. Pour créer la logique du jeu, vous ne pouvez vous débrouiller qu'avec OpenFaaS, mais j'essaierai également de faire du Storyteller un conteneur séparé pour comparer la complexité de la mise en œuvre. Comme langage de programmation principal pour les microservices et les fonctions, j'ai choisi Go, puisque je l'étudie depuis longtemps pendant mon temps libre pour remplacer Perl, et js sera utilisé sur la base d'un certain cadre pour l'interaction des utilisateurs avec les microservices et les fonctions. Je vous parlerai de la décision finale dans l'article correspondant de la série. Pour communiquer les fonctions entre elles, j'ai choisi NATS.io, car je l'avais déjà rencontré auparavant, et son intégration dans Kubernetes est assez simple.

annonce

  • introduction
  • Mise en place de l'environnement de développement, découpage de la tâche en fonctions
  • Travail back-end
  • Travail frontal
  • Mise en place de CICD, organisation des tests
  • Démarrer une session de jeu d'essai
  • Les résultats de

Source: habr.com

Ajouter un commentaire