"Nuevas epopeyas". Para desarrolladores, operaciones y personas curiosas


A pedido de los lectores, comienza un gran ciclo de artículos sobre la aplicación de la tecnología informática sin servidor para desarrollar una aplicación real. En este ciclo, consideraremos el desarrollo, las pruebas y la entrega de aplicaciones a los usuarios finales utilizando herramientas modernas: arquitectura de aplicaciones de microservicios (en versión sin servidor, basada en OpenFaaS ), clúster de kubernetes para el despliegue de aplicaciones, base de datos MongoDB centrada en la agrupación y aplicación en la nube, y autobús en la nube NATS . La aplicación implementa el juego "Epics", una de las variantes del popular juego de salón "Mafia".


¿Qué es "épicas"?


Esta es una variante del juego "Mafia", también es "Hombre lobo". Se basa en un juego de equipo en el que los participantes deben aprender paso a paso quién es quién y tratar de ganar. Desafortunadamente, cuando se juega en la red, un componente tan importante del juego como la interacción personal desaparece, y las reglas de la clásica "Mafia" son bastante simples, por lo tanto, generalmente se agregan otros personajes para una jugabilidad más no lineal e interesante, pero en general, se preservan las características principales de la "Mafia" original, Por ejemplo, un cambio de día y de noche, se mueve solo de noche, así como las alianzas entre los participantes. Otra diferencia importante del juego a través de la red es que el host (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 del viejo irc-bot, que guardé en un archivo personal hace unos 10 años. "Bylin" tiene una historia de fondo con la que comienza cada juego:


En el lejano reino, en el trigésimo estado, más de siete mares, varias aldeas vivían para sí mismas, y en ellas, los buenos y las doncellas rojas . Sembraron pan y se fueron al bosque cercano en busca de hongos y bayas ... ¡Y siguió así 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 la oscuridad vagó por el bosque y se adentró en el pueblo de criaturas crueles y terribles. Una Serpiente Gorynych voló desde algún lugar y adquirió el hábito de robar las Doncellas Rojas y quitarle todo lo valioso a los aldeanos. El dañino y codicioso Baba Yaga , volando en una estupa desde bosques lejanos, confundió las mentes de los habitantes, e incluso algunos abandonaron la nave y entraron al bosque para robar, formaron una pandilla allí. Likhedey conoció a Leshii, que sabía cómo convertirse en árboles y arbustos, comenzó a observar a los aldeanos pacíficos y a servir a los ladrones, olisqueando si los buenos compañeros estaban haciendo algo para salvar sus asentamientos de los espíritus malignos. Los buenos tipos y las chicas rojas, cansados ​​de las incursiones de los ladrones, y las terribles muertes a manos del terrible Likh tuerto , recogieron oro e invitaron a un famoso luchador, Ivan Tsarevich , de la ciudad vecina, que prometió librar a la aldea de ladrones. En un claro en el bosque, Ivan se salvó de la muerte inminente del lobo gris , que cayó en la trampa de los ladrones. A cambio, el Lobo prometió informar a Tsarevich sobre varios espíritus malignos. Una conocida sanadora, Vasilisa la Sabia, pasó y, cuando vio problemas, se quedó para cuidar a los residentes afectados por los ataques apresurados. Detrás del bosque, apareció un palacio negro en el que, según los rumores, Koshchei el Inmortal se instaló, todas las noches visitaba las aldeas y hechizaba a los buenos y a las Doncellas Rojas para que no se atrevieran a desobedecer su orden, hicieron todo lo que él decía. Y en el Bosque Sin Vida , Cot-Bayun se instaló, y todos los que lo conocieron se quedaron dormidos después de sus cuentos de hadas o murieron por sus garras de hierro.


Reino lejano


Como ya se vio, los jugadores se dividen en varios grupos:


  • civiles (buenos amigos, doncellas rojas, Ivan Tsarevich, lobo gris y Vasilisa la sabia)
  • ladrones (los mismos ladrones, así como Baba Yaga y Leshy)
  • independiente (Serpiente-Gorynych, Likho Tuerto, Princesa Rana, Koschey el Inmortal, Cot-Bayun)

El objetivo del juego, como se mencionó anteriormente, es mantenerse con vida y ganar. Los oponentes deben abandonar el juego de alguna manera, y los independientes también deben mantenerse con vida hasta el final del juego. El juego tiene oro, una especie de moneda de juego que los jugadores ganan solo dentro del juego. Los ganadores obtienen 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.



Bueno bueno



Doncella Roja


Good Good y Red Maiden : el papel más masivo y principal del juego. Son 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 el Sabio los trata. Con cierta probabilidad, el compañero bueno o la doncella roja pueden sobrevivir al ataque sin daños (posiblemente habiendo perdido oro al mismo tiempo), sin embargo, al mismo tiempo, todos reconocerán el seudónimo del jugador al día siguiente después del ataque / defensa. Por la noche, estos jugadores no hacen ningún movimiento, pero analizan la situación del juego en función de los mensajes en el chat del juego. Por la tarde, estos jugadores deciden votando cuál de ellos no es un buen compañero o una damisela roja. El jugador por el que votaron la mayoría de los otros jugadores abandona el juego, el resto gana o pierde oro. Si los jugadores no eligieron a nadie por mayoría de votos, ninguno de los jugadores será ejecutado.



Ivan Tsarevich


Ivan Tsarevich - originalmente un defensor anónimo de civiles. Por la noche, verifica los roles de otros jugadores, ya que solo conoce a uno de sus aliados: el lobo gris. Con la participación directa del lobo gris (que también puede verificar los roles de otros jugadores), Ivan Tsarevich, en lugar de verificar, puede matar a otro personaje por la noche. Si, como resultado de la verificación, Ivan Tsarevich ve el papel del buen joven o la doncella roja en el jugador, puede invitarlos a sí mismo y presentarle al lobo gris y a otras doncellas jóvenes y rojas. La Princesa Rana puede evitar que Ivan pueda seducirlo por la noche, sin traicionar su papel a otros jugadores durante el día. Si el propio Ivan descubre a la Princesa Rana, entonces ella puede ofrecerle que se una a los civiles, pero si la Princesa se niega, ella muere a manos de Ivan. El Serpent-Gorynych también puede interferir con los controles de Ivan Tsarevich, pero, a diferencia de la Rana Tsarevna, por la tarde les dirá al resto de los jugadores cuál de ellos es Ivan Tsarevich. Por la tarde, Ivan Tsarevich no es diferente de otros tipos buenos buenos.



Lobo gris


Gray Wolf es un asistente de Ivan Tsarevich, cuyo aroma fuerte ayuda a Ivan a encontrar a otros Good Fellows y Red Maidens. Gray Wolf les dice a estos jugadores quién es Ivan Tsarevich, y también informa a otros jugadores con los roles de buenos compañeros y doncellas rojas. Si el Lobo descubre a un ladrón u otro enemigo, inmediatamente informa a Ivan Tsarevich de esto para que tome medidas la noche siguiente. Si el Lobo, la Princesa Rana ataca, se convierte en un buen tipo ordinario 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 en esta tarde descubre cuál de los jugadores es la Princesa Rana, y puede tratar de persuadir a los Good Fellows y Red Maidens restantes que trajo a Ivan Tsarevich para votar por la ejecución de la Princesa Rana. Además, la noche siguiente, puede intentar persuadir anónimamente a la Princesa Rana al lado de los civiles para que no toque a ninguno de ellos. Un lobo puede sacrificarse por la noche para salvar a Ivan Tsarevich o Vasilisa el Sabio, si sugiere que de repente caen bajo el golpe de los ladrones, o fueron zombificados por Koshchei (el Lobo es inmunidad innata a los encantos de Koshchei), pero el Lobo abandona el juego después del sacrificio personal.



Vasilisa la sabia


Vasilisa the Wise - juega para civiles, pero no saben de ella, ya que Vasilisa es muy modesta. Además, Vasilisa la Sabia, cuando sana, no hace preguntas y cómo un buen médico cura a todos seguidos. Pero si Koschei, Likho o Leshiy beben su medicamento, entonces no deberían vivir más de un día, ya que Vasilisa trata solo a las personas. Los medicamentos de Vasilisa la Sabia no ayudarán ni a la Serpiente Gorynych ni a Kota-Bajun, pero no causarán daño. Además, Cot-Bayun no toca a Vasilisa por la noche, ya que Vasilisa no va al bosque sin vida por hierbas medicinales. Además, los encantos femeninos de la princesa rana en Vasilisa no funcionan. Si intentan matar a su paciente dos veces, la medicina será impotente. Vasilisa no se salvará de los ataques mágicos, por ejemplo, de la maldición de Likh. Por la tarde, Vasilisa se comporta como una Doncella Roja, y solo una mirada fugaz y ligeramente triste puede insinuar un poco que ella es la mejor doctora en el Lejano Lejano.



Ladrón


Los ladrones , a diferencia de todos los roles anteriores, se conocen porque viven en el mismo Den y también conocen a Leshy y Babu Yaga, por lo que pueden actuar en concierto inmediatamente desde el primer movimiento. Pero solo el líder de pandillas realiza acciones por la noche y no vota durante el día, mientras que el resto de los ladrones fingen diligentemente ser buenos compañeros y doncellas rojas. Si el Líder abandona el juego por algún motivo, uno de los ladrones restantes inmediatamente toma su lugar. En primer lugar, los ladrones están tratando de incapacitar a Ivan Tsarevich, hasta que reunió suficiente fuerza de los buenos y las doncellas rojas para enfrentarse activamente a los ladrones por la tarde.



Duende


Goblin espía a los ladrones por la noche, informándoles sobre los roles que se encuentran en su guarida, pero no vota durante el día, porque no vive en la aldea. Sin embargo, otros jugadores pueden votar por Leshy y, por lo tanto, ejecutarlo. Dado que Leshiy proviene de los pantanos, la Princesa Rana no puede seducirlo, y si lo intenta, Leshiy marcará su casa y los aldeanos descubrirán quién es ella realmente. No vale la pena que Lesha tenga miedo del hechizo de Koshchei, pero Vasilisa puede curarlo hasta la muerte. Si Kot-Baiyun intenta atacar a Lesha, entonces corre el riesgo de perder sus garras de hierro, y luego Kot tendrá que sacrificar a las víctimas con un solo murmullo.



Baba Yaga


Baba Yaga también trabaja junto con los ladrones, evoca de noche: puede enviar una enfermedad a otros jugadores o proteger a uno de los aliados del ataque. Su brujería es aún más fuerte que la maldición de Leah. Por la tarde, Baba Yaga también está activo: alguien que está bajo su protección no puede ser ejecutado ni por mayoría de votos. Sin embargo, el suministro de raíces mágicas para la protección durante el día es limitado, por lo que Baba Yaga no puede proteger a nadie, incluido a sí mismo, más de tres veces por juego. En esta tarde, Baba Yaga se hace pasar por la Doncella Roja habitual y vota con todos.



Serpiente-Gorynych


Por la noche, la Serpiente-Gorynych vuela sobre pueblos, bosques y pantanos y se dedica al robo, revelando durante el día el papel de un ladrón. Durante el día, la Serpiente duerme, por lo que no vota, pero puede ejecutarse por mayoría de votos. La serpiente es muy peligrosa para todos, especialmente para los ladrones y Ivan Tsarevich. No importa a quién arrebatar, pero si el Lobo o el Duende lo abren, puede convertirse en un aliado valioso. Si matas a la serpiente por la noche, puedes, con cierta probabilidad, obtener un objeto muy valioso: Piel de serpiente, que protegerá a su dueño una vez de un ataque físico.



Famoso tuerto


La famosa noche de un solo ojo mata a todos los que se cruzan con él en el camino y que no pueden ser asesinados (Leshiy, Kota-Bajun o Zmety Gorynych) - maldiciones, por lo que cualquiera que intente comunicarse con los condenados esa noche morirá durante el día. El maldito mismo también perece al mismo tiempo, solo Kot-Baiun, que simplemente se acuesta para ganar fuerza, se salta el curso la noche siguiente. Solo Baba Yaga puede salvar a Likh de la maldición. La maldición no afecta al que derrotó a Kota-Baiyun: él, como el Gato, simplemente se acuesta con un pase.



La princesa rana


La Princesa Rana no puede ganar el juego, pero puede ganar mucho dinero seduciendo a otros jugadores por la noche. Seducido al mismo tiempo se salta el movimiento. La rana no puede seducir a Vasilisa la Sabia, también debe evitar a Lesha, quien se la entregará a todos al día siguiente. Si Ivan Tsarevich o el Líder de los ladrones encuentra una rana, pueden invitar a civiles o ladrones a un lado, mientras que Ivan no acepta 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 ella sola no puede ganar, esta es una gran oportunidad para ganar oro, ¡porque las posibilidades de llegar al final del juego aumentan considerablemente! Por la tarde, la princesa rana pretende ser una doncella roja y vota con todos.



Koschey el inmortal


Koschey el Inmortal vive en su castillo. Por la noche, camina por los pueblos y zombis de los alrededores, los tipos buenos y las doncellas rojas, que van a su servicio y llevan a cabo todas las tareas sin dudarlo. Negarse a cumplir la orden, por ejemplo, de votar de manera diferente durante el día de lo que dijo Koschey, o de escribir mensajes en el chat durante el día, si Koshchei lo prohibió, el Siervo de Koshchei perece. Por lo tanto, Koschey puede influir en los resultados de la votación durante el día, aunque él mismo no vota. Si Koshchei es asesinado, todas sus víctimas también mueren. Vasilisa puede curar al Siervo de Koshchei, quien luego vuelve a su papel original. La Serpiente-Gorynych y el Lobo tienen una inmunidad innata a los zombis, por lo que Koschey, con todo el deseo, no puede ponerlos a su servicio. Además, el Lobo puede ayudar a Iván o Vasilisa a salir del problema sacrificándose. Rescatado por el Lobo adquiere una inmunidad de lobo a los zombis.



Ivory Bayun


Ivory Bayun vive en el bosque, caza de noche. Duerme en su hueco durante el día, por lo que no participa en la votación. Sin embargo, durante el día puede ser ejecutado por mayoría de votos. Un gato puede atacar de dos maneras: ronronear, y luego su víctima se queda dormida y no puede caminar por la noche, y también votar al día siguiente, o matar inmediatamente con garras de hierro. El ataque de garras no funciona en Serpent-Gorynycha, pero, atacando a Leshy, ¡el Gato incluso puede permanecer sin garras! Famoso no puede maldecir al gato, que después de la maldición solo dormirá una noche. Si alguien domina a Kota-Bajun para conquistarlo, será sanado de cualquier enfermedad y dolencia, incluida la maldición de Liha. Esta habilidad de Kotova es retenida por el jugador hasta el final del juego. Los sirvientes de Koshchei no pueden votar por el Gato durante el día, pero indirectamente pueden descubrir quién es el Gato sin informar a Koshchei al respecto. Kot-Bayun no establece alianzas con Ivan o los ladrones, por lo que para Kot son el objetivo principal.


Tecnologías utilizadas


Para escribir el juego, elegí la tecnología sin servidor basada en OpenFaaS, porque es lo suficientemente simple como para organizar el juego, y al mismo tiempo lo suficientemente desarrollado como para escribir reglas complejas del juego sin complicaciones innecesarias. También usaré el clúster de Kubernetes, ya que esta forma de implementar aplicaciones hace que sea fácil y confiable obtener una implementación rápida, la capacidad de escalar fácilmente. Para crear la lógica del juego, solo se puede prescindir de OpenFaaS, sin embargo, también trataré de hacer Storyteller como un contenedor separado para comparar la complejidad de la implementación. Elegí Go como el lenguaje de programación principal para microservicios y funciones, ya que lo he estado estudiando durante mucho tiempo en mi tiempo libre para reemplazar Perl, y js se usará para la interacción del usuario con microservicios y funciones basadas en algún marco. Hablaré sobre la decisión final en el artículo correspondiente de la serie. Para la comunicación entre las funciones, elegí NATS.io, ya que ya lo había encontrado antes, y tiene una integración bastante fácil en Kubernetes.


Anuncio


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


All Articles