«Nuevas Leyendas». Para dev, ops y personas curiosas

«Nuevas Leyendas». Para dev, ops y personas curiosas

A petición de numerosos lectores, comienza un gran ciclo de artículos sobre la aplicación de la tecnología de computación sin servidor para el desarrollo de una aplicación real. En este ciclo se abordará el desarrollo de la aplicación, las pruebas y la entrega a los usuarios finales utilizando herramientas modernas: la arquitectura de microservicios de la aplicación (en su variante sin servidor, basada en OpenFaaS), un clúster kubernetes para implementar la aplicación, una base de datos MongoDB, orientada a la agrupación y aplicación en la nube, así como un bus de nube NATS. La aplicación implementa el juego 'Byliny', una de las variantes del popular juego de salón 'Mafia'.

¿Qué es 'Byliny'?

Es una variante del juego 'Mafia', también conocido como 'Werewolf'. Se basa en un juego de equipo, donde los participantes deben descubrir quién es quién paso a paso y tratar de ganar. Desafortunadamente, al jugar en línea, se pierde un componente tan importante como la interacción personal, y las reglas del 'Mafia' clásico son bastante simples. Por eso, para un proceso de juego más no lineal e interesante, generalmente se añaden otros personajes, aunque se conservan las características principales del 'Mafia' original, como el cambio entre día y noche, los turnos solo de noche, así como las alianzas entre los participantes. Otra diferencia importante en el juego en línea es que el maestro del juego es, por lo general, un programa informático.

Descripción del juego

Las reglas del juego que quiero implementar se tomaron de un antiguo bot de IRC que guardé en mi archivo personal hace unos 10 años. 'Byliny' tiene una historia de fondo, que comienza cada juego:

En el reino de las tres novenas, en el estado de las tres décimas, tras siete mares, había varias aldeas, y en ellas Valientes jóvenes y Hermosas muchachas. Sembraban trigo, y se adentraban en el bosque cercano a recoger setas y bayas... Y así continuó de siglo en siglo, hasta que una terrible catástrofe sacudió la Tierra y el mal comenzó a propagarse por el mundo. Las noches se hicieron largas y frías, y en la oscuridad merodeaban por el bosque y se aventuraban en la aldea criaturas maléficas y aterradoras. Apareció de repente Serpiente Gorynych y comenzó a robar a las jóvenes hermosas y a quitarles todo lo valioso a los campesinos. Una mala y codiciosa Baba Yaga, que llegó en su mortero de bosques lejanos, perturbó la mente de los habitantes, y hasta algunos abandonaron su oficio y se fueron al bosque a convertirse en bandidos, formando allí una banda. Los villanos se encontraron Leshy, que podía convertirse en árboles y arbustos, comenzó a observar a los pacíficos campesinos y servir a los bandidos, olfateando si los Héroes estaban tramando algo para liberar sus asentamientos de la vileza. Los Héroes y las Bellas Doncellas, cansados de los asaltos de los Bandidos y de las horribles muertes a manos del temido Malévolo de Un Ojo, reunieron oro e invitaron de una ciudad vecina a un famoso guerrero — Iván el Príncipe, quien prometió liberar la aldea de los bandidos. En un claro del bosque, Iván salvó de una muerte inminente Lobo Gris, que había caído en una trampa de los Bandidos. A cambio, el Lobo prometió informar al Príncipe sobre diversas criaturas del bosque. Pasaba por allí una famosa sanadora Vasilisa la Sabia, y cuando vio el desastre, se quedó para cuidar a los habitantes que habían sufrido por los ataques de los malvados. Al otro lado del bosque apareció un palacio negro, donde, según rumores, se había instalado Koschei el Inmortal, quien cada noche visitaba las aldeas y encantaba a los Héroes y a las Bellas Doncellas, para que no se atrevieran a desobedecer sus órdenes; todos hacían lo que él decía. Y en el Bosque Sin Vida había un Gato-Baun, y cada uno que lo encontraba caía en un profundo sueño tras sus cuentos o moría a manos de sus garras de hierro.

«Nuevas Leyendas». Para dev, ops y personas curiosas
El reino de tres veces nueve

Como ya se ha visto, los jugadores se dividen en varios grupos:

  • habitantes pacíficos (los Héroes, las Bellas Doncellas, Iván el Príncipe, el Lobo Gris y Vasilisa la Sabia)
  • bandidos (los propios bandidos, así como Baba Yaga y Leshy)
  • independientes (Zmey Gorynych, Malévolo de Un Ojo, la Princesa Rana, Koschei el Inmortal, Gato-Baun)

El objetivo del juego, como se mencionó anteriormente, es sobrevivir y ganar. Los oponentes deben, de alguna manera, abandonar el juego, y los independientes también deben permanecer vivos hasta el final. En el juego hay oro, una especie de moneda de juego que los jugadores ganan solo dentro del juego. Los ganadores reciben oro. Cuanto más oro, mayor es la clasificación del jugador.

Me detendré un poco más en la descripción de los personajes.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Héroe

«Nuevas Leyendas». Para dev, ops y personas curiosas
Bella Doncella

Héroe y Bella Doncella — el papel más común y fundamental en el juego. Son ciudadanos pacíficos que duermen por la noche y trabajan durante el día. Por la noche, son atacados por uno de los bandidos, Zmey Gorynych y otros roles, mientras que Vasíliya Premudráya los cura. Con una probabilidad algo baja, el Buen Joven o la Chica Roja pueden sobrevivir al ataque sin daño (posiblemente perdiendo algo de oro); sin embargo, todos conocerán el seudónimo del jugador al día siguiente después del ataque. Durante la noche, estos jugadores no realizan movimientos, sino que analizan la situación del juego basándose en los mensajes del chat del juego. Durante el día, estos jugadores deciden por votación quién de ellos no es el Buen Joven o la Chica Roja. El jugador que recibe más votos de otros jugadores es eliminado del juego, mientras que los restantes ganan o pierden oro. Si los jugadores no eligen a nadie por mayoría de votos, nadie será ejecutado.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Iván Tsarévich

Iván Tsarévich — un defensor anónimo de los ciudadanos pacíficos. Durante la noche, verifica los roles de otros jugadores, ya que solo conoce a un aliado: el Lobo Gris. Con la participación directa del Lobo Gris (que también puede verificar los roles de otros jugadores), Iván Tsarévich, en lugar de verificar, puede matar a otro personaje. Si tras la verificación Iván Tsarévich ve el rol del Buen Joven o la Chica Roja en un jugador, puede invitarlos a su lado y presentarlos al Lobo Gris y otros Buenos Jóvenes y Chicas Rojas. La Princesa Rana puede interferir con Iván, ya que puede seducirlo por la noche, sin revelar su rol a otros jugadores durante el día. Si Iván descubre a la Princesa Rana, puede proponerle unirse a los ciudadanos pacíficos, sin embargo, si ella se niega, muere a manos de Iván. Zmey Gorynych también puede obstaculizar las verificaciones de Iván Tsarévich, pero, a diferencia de la Princesa Rana, él revelará durante el día a los demás jugadores quién es Iván Tsarévich. Durante el día, Iván Tsarévich no se diferencia de otros Buenos Jóvenes.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Lobo Gris

Lobo Gris — asistente de Iván Tsaréyevich, cuyo agudo instinto ayuda a Iván a encontrar a otros Buenas Muchachas y Chicas Rojas. El Lobo Gris le dice a estos jugadores quién es Iván Tsaréyevich y también informa sobre otros jugadores con los roles de Buenas Muchachas y Chicas Rojas. Si el Lobo descubre a un ladrón o a otro enemigo, inmediatamente se lo comunica a Iván Tsaréyevich para que tome medidas la siguiente noche. Si la Princesa Rana ataca al Lobo, él se convierte en un Buen Muchacho común y no puede investigar a nadie, y la Princesa no se dará cuenta de que en realidad era el Lobo Gris, ya que el Lobo no duerme por la noche. Sin embargo, el propio Lobo sí sabe durante el día quién es la Princesa Rana y puede intentar convencer a los demás Buenas Muchachas y Chicas Rojas que trajo a Iván Tsaréyevich a votar por la ejecución de la Princesa Rana. También por la noche puede intentar convencer anónimamente a la Princesa Rana de unirse a los habitantes pacíficos, para que no ataque a ninguno de ellos. Durante la noche, el Lobo puede sacrificarse para salvar a Iván Tsaréyevich o a Vasilisa la Sabia, si sospecha que pueden estar en peligro por los ladrones, o si han sido zombificados por Koschei (el Lobo tiene inmunidad innata a los hechizos de Koschei), pero después de cualquier sacrificio el Lobo queda fuera del juego.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Vasilisa la Sabia

Vasilisa la Sabia — juega como un habitante pacífico, aunque ellos no lo saben, ya que Vasilisa es muy modesta. Además, Vasilisa la Sabia, cuando cura, no hace preguntas y como un buen doctor atiende a todos por igual. Pero si su medicina la toma Koschei, Likhó o Leshiy, no vivirán más de un día, ya que Vasilisa solo cura a personas. La medicina de Vasilisa la Sabia tampoco ayudará a Zmey Gorynych o a Kot-Bayun, aunque no les hará daño. Además, Kot-Bayun no molesta a Vasilisa de noche, ya que ella no va al Bosque Sin Vida a buscar hierbas medicinales. Asimismo, los encantos femeninos de la Princesa Rana no tienen efecto sobre Vasilisa. Si se intenta matar a su paciente dos veces, la medicina será inútil. Vasilisa tampoco salvará de ataques mágicos, como la maldición de Likhó. Durante el día, Vasilisa se comporta como una Chica Roja, y solo una mirada fugaz, ligeramente melancólica, puede insinuar que ella es la mejor curadora en el Reino de los Tres Números.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Ladrón

Ladrones, a diferencia de todos los roles anteriores, se conocen entre sí, ya que viven en la misma Guarida, y también conocen a Leshy y a Baba Yaga, por lo que pueden actuar de manera coordinada desde el primer movimiento. Sin embargo, solo el Jefe de la pandilla realiza acciones por la noche y no vota durante el día, mientras que los demás Bandidos fingen ser Buenos Jóvenes y Bellas Doncellas. Si el Jefe es eliminado del juego por alguna razón, uno de los Bandidos restantes toma su lugar inmediatamente. En primer lugar, los Bandidos intentan incapacitar a Iván Tsarevich, antes de que este reúna suficientes fuerzas de Buenos Jóvenes y Bellas Doncellas para enfrentarlos activamente durante el día.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Leshy

Leshy espía para los Bandidos por la noche, informándoles sobre los roles encontrados en su Guarida, pero no vota durante el día, ya que no vive en la aldea. Sin embargo, otros jugadores pueden votar por Leshy y, de este modo, ejecutarlo. Como Leshy proviene de los pantanos, no puede ser seducido por la Princesa Rana, y si lo intenta, Leshy marcará su casa, y los habitantes de la aldea descubrirán quién es ella realmente. Leshy no debe temer a los encantos de Koschei, pero Vasilisa puede curarlo hasta causarle la muerte. Si el Gato Bayun intenta atacar a Leshy, arriesga perder sus garras de hierro, y después el Gato tendrá que dormir a las víctimas solo con su ronroneo.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Baba Yaga

Baba Yaga también trabaja junto a los Bandidos, y por la noche hechiza: puede o bien enviar enfermedades a otros jugadores, o proteger a alguno de sus aliados de un ataque. Su magia es incluso más poderosa que la maldición del Lich. Durante el día, Baba Yaga también está activa: el que esté bajo su protección no puede ser ejecutado, ni siquiera por mayoría de votos. Sin embargo, su reserva de raíces mágicas para la protección diurna es limitada, por lo que Baba Yaga no puede proteger a nadie, incluida ella misma, más de tres veces durante el juego. Durante el día, Baba Yaga finge ser una Bella Doncella y vota junto a todos.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Zmey Gorynych

Zmey Gorynych vuela por las noches sobre las aldeas, bosques y pantanos, cometiendo robos y revelando su papel como ladrón durante el día. Durante el día, el Dragón duerme, por lo que no vote, pero puede ser ejecutado por mayoría. El Dragón es muy peligroso para todos, especialmente para los Bandidos y el Príncipe Iván. Al Dragón no le importa a quién robar, pero si es descubierto por el Lobo o el Leñador, puede convertirse en un valioso aliado. Si se mata al Dragón por la noche, se puede obtener, con cierta probabilidad, un objeto muy valioso: la Escama de Dragón, que protegerá a su poseedor una vez de un ataque físico.

«Nuevas Leyendas». Para dev, ops y personas curiosas
El Loco de un Ojo

El Loco de un Ojo mata por la noche a todos los que se cruzan en su camino, y a aquellos que no puede matar (el Leñador, el Gato-Baión, o el Dragón de Gorynych) los maldice, de modo que cualquiera que intente comunicarse con el maldito esa misma noche morirá dentro del día. El maldito también muere, excepto el Gato-Baión, que simplemente se acurruca a dormir para recuperar fuerzas, omitiendo su turno la siguiente noche. Solo Baba Yaga puede salvar a alguien de la maldición. La maldición no afecta a quien ha vencido al Gato-Baión: él, al igual que el Gato, simplemente se acurruca a dormir y omite su turno.

«Nuevas Leyendas». Para dev, ops y personas curiosas
La Princesa Rana

La Princesa Rana no puede ganar en el juego, pero puede ganar mucho dinero seduciendo a otros jugadores por las noches. El seducido omite su turno. La Rana no puede seducir a Vasilisa la Sabia, y también debe evitar al Leñador, quien la delatará al día siguiente. Si Iván Tsarevich o el Jefe de los Bandidos encuentran a la Rana, podrían invitarla al lado de los aldeanos o de los Bandidos, siendo Iván intolerante al rechazo de la Rana, mientras que el Jefe no es tan exigente. Pero la Princesa es lo suficientemente astuta y puede convertirse en una agente doble, ya que, a pesar de que no puede ganar sola, ¡es una gran oportunidad para acumular oro, ya que las posibilidades de llegar al final del juego aumentan significativamente! Durante el día, la Princesa Rana finge ser una Chica Roja y vota con todos.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Koschei el Inmortal

Koschei el Inmortal vive en su castillo. Por las noches, recorre las aldeas cercanas y zombifica a los Buenas Jóvenes y a las Bellas Doncellas, quienes se unen a él y obedecen todas sus órdenes sin dudar. Al negarse a cumplir una orden, por ejemplo, a votar de manera diferente durante el día de lo que dijo Koschei, o a escribir mensajes en el chat durante el día si Koschei lo prohibió, el Sirviente de Koschei perece. De este modo, Koschei tiene la capacidad de influir en los resultados de las votaciones diurnas, aunque él mismo no vote. Si matan a Koschei, todas sus víctimas también mueren. Vasilisa puede curar al Sirviente de Koschei, quien luego regresa a su rol original. Zmey Gorynych y el Lobo tienen inmunidad innata al zombificado, por lo que Koschei, pese a su deseo, no puede convertirlos en sus sirvientes. Además, el Lobo puede rescatar a Ivan o a Vasilisa arriesgando su propia vida. Los salvados por el Lobo adquieren Inmunidad Lobo al zombificado.

«Nuevas Leyendas». Para dev, ops y personas curiosas
Gato-Baun

Gato-Baun vive en el bosque y caza por las noches. Durante el día duerme en su tronco, por lo que no participa en las votaciones. Sin embargo, durante el día puede ser juzgado por la mayoría de votos. El Gato puede atacar de dos maneras: ronroneando, lo que hace que su víctima se duerma y no pueda moverse por la noche, ni votar al día siguiente, o matando de inmediato con garras de hierro. El ataque con garras no funciona en Zmey Gorynych, y al atacar al Leshy, el Gato puede quedarse sin garras. Likh no puede maldecir al Gato, quien después de la maldición simplemente dormirá una noche. Si alguien logra vencer al Gato-Baiun, se curará de cualquier enfermedad y mal, incluida la maldición de Likh. Esta habilidad del Gato se mantiene para el jugador hasta el final del juego. Los Sirvientes de Koschei no pueden votar por el Gato durante el día, pero pueden descubrir indirectamente quién es el Gato, sin informarlo a Koschei. El Gato-Baiun no forma alianzas con Ivan o los Forajidos, así que para el Gato, ellos son la prioridad número uno.

Tecnologías utilizadas

Para el desarrollo del juego, elegí la tecnología de computación sin servidor (serverless) basada en OpenFaaS, ya que es lo suficientemente simple para organizar el juego y, al mismo tiempo, lo suficientemente avanzada para escribir reglas de juego complejas sin complicaciones innecesarias. También utilizaré un clúster de Kubernetes, ya que este método de despliegue de aplicaciones permite una implementación rápida y confiable, así como la posibilidad de escalar con facilidad. Para crear la lógica del juego, se puede utilizar solamente OpenFaaS, aunque también intentaré hacer un Narrador como un contenedor separado para comparar la complejidad de la implementación. Como lenguaje de programación principal para microservicios y funciones, he elegido Go, ya que lo he estado estudiando durante mucho tiempo en mi tiempo libre como sustituto de Perl, y para la interacción de los usuarios con los microservicios y funciones se utilizará js basado en un marco. Informaré sobre la decisión final en el artículo correspondiente de la serie. Para la comunicación entre funciones, elegí NATS.io, ya que ya había trabajado con ella anteriormente y tiene una integración bastante sencilla en Kubernetes.

Anuncio

  • Introducción
  • Configuración del entorno de desarrollo, división de la tarea en funciones
  • Trabajo en el backend
  • Trabajo en el frontend
  • Configuración de CICD, organización de pruebas
  • Lanzamiento de una sesión de prueba del juego
  • Resultados

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster