"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa

Debido a numerosas solicitudes de los lectores, se está iniciando una gran serie de artículos sobre el uso de tecnología informática sin servidor para desarrollar una aplicación real. Este ciclo cubrirá el desarrollo, prueba y entrega de aplicaciones a usuarios finales utilizando herramientas modernas: arquitectura de aplicaciones de microservicio (en una versión sin servidor, basada en AbiertoFaaS), grupo kubernetes para implementación de aplicaciones, base de datos MongoDB, enfocado en aplicaciones y clustering en la nube, así como en bus en la nube NATS. La aplicación implementa el juego "Epics", una de las variantes del popular juego de salón "Mafia".

¿Qué son las "épicas"?

Esta es una variante del juego "Mafia", también conocido como "Hombre Lobo". Se basa en un juego de equipo en el que los participantes deben aprender paso a paso quién es quién e intentar ganar. Desafortunadamente, cuando se juega en línea, un componente tan importante del juego como la interacción personal desaparece, y las reglas del clásico "Mafia" son bastante simples, por lo que para una jugabilidad más no lineal e interesante, generalmente se agregan otros personajes, pero En general, se conservan las características principales de la "Mafia" original, por ejemplo, el cambio de día y noche, movimientos solo de noche, así como las alianzas entre los participantes. Otra diferencia importante entre jugar en línea es que el anfitrión (también conocido como Game Master, Storyteller) suele ser un programa de computadora.

Descripción del juego

Las reglas del juego que quiero implementar están tomadas de un antiguo bot de irc que guardé en mi archivo personal hace unos 10 años. Las "épicas" tienen una historia de fondo con la que comienza cada juego:

En el lejano reino, en el trigésimo estado, más allá de los siete mares, vivían y vivían varias aldeas, y en ellas Buenos compañeros и Chicas hermosas. Sembraron pan y fueron al bosque circundante a recoger setas y bayas... ¡Y esto continuó de siglo en siglo, hasta que una terrible catástrofe sacudió la Tierra y el mal comenzó a extenderse por todo el mundo! Las noches se volvieron largas y frías, y en la oscuridad, criaturas crueles y terribles merodeaban por el bosque y entraban en el pueblo. Llegó de alguna parte Serpiente gorynych y adquirió la costumbre de robar doncellas rojas y quitarles todo lo valioso a los aldeanos. Dañino y codicioso Baba Yaga, que voló en un mortero desde bosques lejanos, confundió las mentes de los habitantes, e incluso algunos abandonaron su oficio y se adentraron en el bosque a robar, formando allí una banda. Los villanos se encontraron Duende, que sabía transformarse en árboles y arbustos, comenzó a vigilar a los pacíficos aldeanos y a servir a los ladrones, olfateando si los Good Fellows estaban tramando algo para librar a sus asentamientos de los espíritus malignos. Buenos muchachos y hermosas doncellas, cansados ​​​​de las incursiones de los ladrones y de las terribles muertes a manos de los terribles. Apuesto tuerto, recogió oro e invitó a un famoso luchador de una ciudad vecina - Iván zarevich, quien prometió librar al pueblo de ladrones. En un claro del bosque, Iván se salva de una muerte segura. Lobo gris, que cayó en la trampa de los ladrones. A cambio, el Lobo prometió informar al zarevich sobre varios espíritus malignos del bosque. Pasó un famoso curandero. Vasilisa la Sabia, y cuando vio problemas, se quedó para cuidar a los residentes que habían sufrido los ataques de los apuestos. Detrás del bosque apareció un palacio negro, en el que, según los rumores, se instaló. Koschey el inmortal, todas las noches visitaba los pueblos y embrujaba a los Buenos Compañeros y a las Doncellas Rojas para que no se atrevieran a desobedecer sus órdenes, hacían todo como él decía. Y se instaló en el bosque sin vida. gato baiyun, y todos los que lo conocieron se quedaron dormidos después de sus cuentos o murieron a causa de sus garras de hierro.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Reino muy lejano

Como ya puedes ver, los jugadores se dividen en varios grupos:

  • civiles (Buenos compañeros, Doncellas Rojas, Ivan Tsarevich, Lobo Gris y Vasilisa la Sabia)
  • ladrones (los propios ladrones, así como Baba Yaga y Leshy)
  • independiente (Serpiente-Gorynych, Dashing Tuerto, Princesa Rana, Koschey el Inmortal, Cat-Bayun)

El objetivo del juego, como se mencionó anteriormente, es mantenerse con vida y ganar. Los oponentes deben abandonar el juego de una forma u otra, y los independientes también deben permanecer con vida hasta el final del juego. El juego tiene oro, una especie de moneda del juego que los jugadores ganan sólo dentro del juego. Los ganadores reciben oro. Cuanto más oro, mayor será la calificación del jugador.

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

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Buen compañero

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
doncella roja

Buen compañero и doncella roja - el papel más extendido y principal del juego. Se trata de civiles que duermen de noche y trabajan durante el día. Por la noche son atacados por uno de los ladrones, la Serpiente Gorynych y otros roles, y Vasilisa la Sabia los cura. Con una pequeña probabilidad, el Buen Compañero o la Doncella Roja pueden sobrevivir al ataque sin sufrir daños (posiblemente perdiendo oro en el proceso), sin embargo, todos reconocerán el apodo del jugador al día siguiente del ataque. Por la noche, estos jugadores no realizan ningún movimiento, sino que analizan la situación del juego basándose en los mensajes del chat del juego. Durante el día, estos jugadores deciden votando cuál de ellos no es el Buen Compañero o la Doncella Roja. El jugador votado por la mayoría de los demás jugadores abandona el juego, los jugadores restantes reciben o pierden oro. Si los jugadores no eligen a nadie por mayoría de votos, ningún jugador será ejecutado.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
ivan zarevich

ivan zarevich - inicialmente un defensor anónimo de los civiles. Por la noche comprueba los roles de los demás jugadores, ya que sólo conoce a uno de sus aliados: el Lobo Gris. Con la participación directa del Lobo Gris (que también puede comprobar los roles de otros jugadores), Ivan Tsarevich, en lugar de comprobarlo, puede matar a otro personaje por la noche. Si, como resultado de la verificación, Ivan Tsarevich ve el papel de un Buen Compañero o una Doncella Roja en un jugador, entonces puede invitarlo a su casa y presentarle al Lobo Gris y otros Buenos Compañeros y Doncellas Rojas. La Princesa Rana puede interferir con Ivan, quien puede seducirlo por la noche, sin revelar su papel a otros jugadores durante el día. Si el propio Iván descubre a la Princesa Rana, puede invitarla a unirse a los civiles, pero si la Princesa se niega, muere a manos de Iván. Serpent-Gorynych también puede interferir con los controles de Ivan-Tsarevich, pero, a diferencia de la Princesa Rana, durante el día les dirá a los demás jugadores cuál de ellos es Ivan-Tsarevich. Durante el día, Ivan Tsarevich no se diferencia de otros Good Fellows.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Lobo gris

Lobo gris - asistente de Ivan Tsarevich, cuyo agudo sentido del olfato ayuda a Ivan a encontrar otros Good Fellows y Red Maidens. Grey Wolf les dice a estos jugadores quién es Iván el Zarevich y también les informa sobre otros jugadores con los roles de Good Fellows y Red Maidens. Si el Lobo descubre a un ladrón u otro enemigo, informa inmediatamente a Ivan Tsarevich para que pueda actuar la noche siguiente. Si el Lobo es atacado por la Princesa Rana, se convierte en un Buen Compañero común y corriente y no puede controlar a nadie, y la Princesa no sabrá que en realidad era el Lobo Gris, ya que el Lobo no duerme por la noche. Sin embargo, el propio Lobo descubrirá durante el día cuál de los jugadores es la Princesa Rana y podrá intentar persuadir al resto de los Buenos Amigos y las Doncellas Rojas, a quienes llevó ante Ivan Tsarevich, para que voten a favor de la ejecución de la Rana. Princesa. También la noche siguiente puede intentar persuadir de forma anónima a la Princesa Rana para que se ponga del lado de los civiles para que no toque a ninguno de ellos. El Lobo puede sacrificarse por la noche para salvar a Ivan Tsarevich o Vasilisa la Sabia, si supone que de repente caerán bajo el ataque de los ladrones, o que Koshchei los zombificará (el Lobo tiene una inmunidad innata a los encantos de Koshchei), pero después Con el autosacrificio el Lobo queda fuera del juego.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Vasilisa la Sabia

Vasilisa la Sabia - juega para los civiles, pero no la conocen, ya que Vasilisa es muy modesta. Además, Vasilisa la Sabia, cuando trata, no hace preguntas y, como buen médico, trata a todos. Pero si Koschey, Likho o Leshy beben su medicina, no vivirán más de un día, ya que Vasilisa solo trata a personas. La medicina de Vasilisa la Sabia tampoco ayudará a la serpiente Gorynych ni al Cat-Bayun, pero tampoco causarán daño. Además, Kot-Bayun no toca a Vasilisa por la noche, ya que Vasilisa no va al Bosque Sin Vida a comprar hierbas medicinales. Además, los encantos femeninos de la Princesa Rana no funcionan en Vasilisa. Si intentaran matar a su paciente dos veces, la medicina sería impotente. Vasilisa no te salvará de ataques mágicos, por ejemplo de la maldición Dashing. Durante el día, Vasilisa se comporta como una Doncella Roja, y sólo una mirada fugaz y ligeramente triste puede insinuar un poco que ella es la mejor sanadora del Reino Lejano.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Pícaro

Ladrones, a diferencia de todos los roles anteriores, se conocen, ya que viven en la misma Guarida, y también conocen a Leshy y Baba Yaga, por lo que pueden actuar en concierto desde el primer movimiento. Pero solo el líder de la pandilla actúa por la noche y no vota durante el día, mientras que el resto de los ladrones se hacen pasar por buenos compañeros y doncellas rojas. Si el Líder abandona el juego por cualquier motivo, uno de los Pícaros restantes ocupa inmediatamente su lugar. En primer lugar, los ladrones están tratando de desactivar a Iván el Zarevich hasta que haya reunido suficientes fuerzas de Good Fellows y Red Maidens para enfrentarse activamente a los ladrones durante el día.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Leshy

Leshy por la noche espía para los Ladrones, informándoles de los roles que se encuentran en su Guarida, pero durante el día no vota, ya que no vive en el pueblo. Sin embargo, otros jugadores pueden votar por Leshy y así ejecutarlo. Dado que Leshy proviene de los pantanos, la Princesa Rana no puede seducirlo y, si lo intenta, Leshy marcará su casa y los aldeanos descubrirán quién es ella realmente. Leshem no debería tener miedo del hechizo de Koshchei, pero Vasilisa puede curarlo hasta la muerte. Si Kot-Bayun intenta atacar a Leshy, corre el riesgo de perder sus garras de hierro, y entonces Kot tendrá que adormecer a las víctimas solo con su ronroneo.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Baba Yaga

Baba Yaga También trabaja con los ladrones y lanza hechizos por la noche: puede enviar enfermedades a otros jugadores o proteger a uno de sus aliados de un ataque. Su brujería es incluso más fuerte que la maldición de Likh. Durante el día, Baba Yaga también está activa: nadie bajo su protección no puede ser ejecutado ni siquiera por mayoría de votos. Sin embargo, el suministro de raíces mágicas para la protección diurna es limitado, por lo que Baba Yaga no puede proteger a nadie, incluida ella misma, más de tres veces por juego. Durante el día, Baba Yaga se hace pasar por una Doncella Roja corriente y vota con todos los demás.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Snake-Gorynych

Snake-Gorynych de noche sobrevuela pueblos, bosques y pantanos y se dedica a robar, revelando el papel de los robados durante el día. Durante el día, la Serpiente duerme, por lo que no vota, pero puede ser ejecutada por mayoría de votos. La serpiente es muy peligrosa para todos, especialmente para los ladrones e Ivan Tsarevich. A la serpiente no le importa a quién le roba, pero si es descubierta por el Lobo o el Leshy, puede convertirse en un valioso aliado. Si matas a la Serpiente por la noche, con cierta probabilidad podrás recibir un objeto muy valioso: la Piel de Serpiente, que protegerá a su dueño una vez del ataque físico.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Famoso tuerto

Famoso tuerto por la noche mata a todo el que se interpone en su camino, y a quien no puede matar (Leshy, Kota-Bayun o la Serpiente Gorynych) maldice, de modo que cualquiera que intente comunicarse con el condenado esa misma noche morirá durante el día. . El propio maldito también muere en este caso, solo que no muere Kot-Bayun, quien simplemente se acuesta en la cama para recuperar fuerzas, saltándose su turno la noche siguiente. Sólo Baba Yaga puede salvar a Likh de la maldición. La maldición no afecta al que derrotó al Cat-Bayun: él, como el Gato, simplemente se va a la cama y se salta un turno.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
princesa rana

princesa rana No puede ganar el juego, pero puede ganar mucho dinero seduciendo a otros jugadores por la noche. El tentado pierde su turno. La rana no puede seducir a Vasilisa la Sabia, y también debe evitar a Leshy, quien la traicionará ante todos al día siguiente. Si Iván el Zarevich o el líder de los ladrones encuentran a la rana, pueden invitar a civiles o a los ladrones a su lado, mientras que Iván no aceptará la negativa de la rana, pero el líder no es tan exigente. Pero la Princesa es bastante astuta, puede convertirse en un agente doble, porque a pesar de que no puede ganar sola, esta es una excelente oportunidad de ganar oro, ¡porque las posibilidades de sobrevivir hasta el final del juego aumentan enormemente! Durante el día, la Princesa Rana se hace pasar por la Doncella Roja y vota con todos juntos.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
Koschey el inmortal

Koschey el inmortal vive en su castillo. Por la noche, camina por las aldeas circundantes y zombifica a Good Fellows y Red Maidens, quienes se ponen a su servicio y cumplen todas las órdenes sin cuestionar. Al negarse a cumplir una orden, por ejemplo, votar durante el día de manera diferente a lo que le dijo Koshchei, o escribir mensajes en el chat durante el día si Koshchei lo prohibió, el Sirviente de Koshchei muere. Así, Koschey puede influir en los resultados de la votación durante el día, aunque él mismo no vote. Si matan a Koshchei, todas sus víctimas también morirán. Vasilisa puede curar al Servant Koshchei, quien luego vuelve a su papel original. Serpiente-Gorynych y Lobo tienen una inmunidad innata a la zombificación, por lo que Koschey, por mucho que quiera, no puede ponerlos a su servicio. El Lobo también puede ayudar a Iván o Vasilisa a salir de problemas sacrificándose. Salvado por el Lobo adquiere inmunidad de Lobo a la zombificación.

"Nuevas epopeyas". Para desarrolladores, operadores y gente curiosa
gato baiyun

gato baiyun Vive en el bosque, caza de noche. Durante el día duerme en su hueco, por lo que no participa en las votaciones. Sin embargo, durante el día puede ser ejecutado por mayoría de votos. El gato puede atacar de dos maneras: ronronear -y luego su víctima se queda dormida y no puede caminar por la noche, ni tampoco votar al día siguiente- o matar directamente con garras de hierro. Atacar con garras no funciona con Snake-Gorynych, y después de atacar a Leshy, ¡el Gato puede quedarse sin garras! Dashing no puede maldecir al Gato, quien después de la maldición simplemente dormirá una noche. Si alguien logra derrotar a Kota-Bayun, se curará de cualquier enfermedad o dolencia, incluida la maldición de Likh. Esta habilidad del gato permanece con el jugador hasta el final del juego. Los sirvientes de Koshchei no pueden votar por el Gato durante el día, pero pueden descubrir indirectamente quién es el Gato sin informar a Koshchei. Kot-Bayun no establece alianzas con Ivan o los Ladrones, por lo que son el objetivo principal de Kot.

Tecnologías utilizadas

Para escribir el juego, elegí la tecnología informática sin servidor basada en OpenFaaS, ya que es lo suficientemente simple para organizar el juego y, al mismo tiempo, lo suficientemente avanzado como para escribir reglas de juego complejas sin complicaciones innecesarias. También usaré un clúster de Kubernetes, ya que este método de implementación de aplicaciones hace que sea bastante simple y confiable lograr una implementación rápida y la capacidad de escalar fácilmente. Para crear la lógica del juego, solo puedes arreglártelas con OpenFaaS, pero también intentaré hacer Storyteller como un contenedor separado para comparar la complejidad de la implementación. Como lenguaje de programación principal para microservicios y funciones, elegí Go, ya que lo he estado estudiando durante mucho tiempo en mi tiempo libre para reemplazar a Perl, y js se usará en base a un marco determinado para la interacción del usuario con microservicios y funciones. Te contaré la decisión final en el artículo correspondiente de la serie. Para comunicar funciones entre sí, elegí NATS.io porque ya lo había encontrado antes y se integra bastante fácilmente en Kubernetes.

anuncio

  • introducción
  • Configurar el entorno de desarrollo, dividir la tarea en funciones.
  • trabajo de fondo
  • trabajo frontal
  • Configurar CICD, organizar pruebas
  • Iniciar una sesión de juego de prueba
  • resultados

Fuente: habr.com

Añadir un comentario