"Novas épicas". Para dev, ops e pessoas curiosas


A pedido dos leitores, começa um grande ciclo de artigos sobre a aplicação da tecnologia de computação sem servidor para desenvolver uma aplicação real. Neste ciclo, consideraremos o desenvolvimento, teste e entrega de aplicativos para os usuários finais usando ferramentas modernas: arquitetura de aplicativos de microsserviço (na versão sem servidor, com base no OpenFaaS ), cluster kubernetes para implantação de aplicativos, banco de dados MongoDB focado em aplicativos e clustering em nuvem e barramento em nuvem NATS . O aplicativo implementa o jogo "Epics", uma das variantes do popular jogo de salão "Mafia".


O que é "Epopeias"?


Esta é uma variante do jogo "Mafia", também é "Lobisomem". É baseado em um jogo de equipe em que os participantes devem aprender passo a passo quem é quem e tentar vencer. Infelizmente, ao jogar na rede, um componente tão importante do jogo como a interação pessoal desaparece, e as regras do clássico "Mafia" são bastante simples, portanto, outros personagens geralmente são adicionados para uma jogabilidade mais não linear e interessante, mas, em geral, as principais características do "Mafia" original são preservadas, por exemplo, uma mudança de dia e noite, muda apenas à noite, bem como alianças entre os participantes. Outra diferença importante do jogo na rede é que o host (também conhecido como Game Master, Storyteller) geralmente é um programa de computador.


Descrição do jogo


As regras do jogo que eu quero implementar foram retiradas do antigo irc-bot, que salvei em um arquivo pessoal cerca de 10 anos atrás. "Bylin" tem uma história de fundo com a qual cada jogo começa:


No reino distante, no trigésimo estado, ao longo de sete mares, várias aldeias viviam para si mesmas, e nelas os bons companheiros e as donzelas vermelhas . Eles semearam pão e foram à floresta próxima buscar cogumelos e frutas ... E continuou assim de século a século, até que uma terrível catástrofe sacudiu a Terra e o mal começou a se espalhar pelo mundo! As noites ficaram longas e frias, e a escuridão percorreu a floresta e vagou pela vila de criaturas cruéis e terríveis. Um Gorynych serpente chegou de algum lugar e adquiriu o hábito de roubar as Donzelas Vermelhas e tirar tudo de valor dos aldeões. O perigoso e ganancioso Baba Yaga , voando em uma estupa de florestas distantes, confundiu as mentes dos habitantes, e até alguns abandonaram a nave e entraram na floresta para roubar, formaram uma gangue lá. Likhedey conheceu Leshii, que sabia como se transformar em árvores e arbustos, ele começou a observar os aldeões pacíficos e servir os ladrões, farejando se os bons companheiros estavam tramando algo para salvar seus assentamentos de espíritos malignos. Bons companheiros e garotas vermelhas, cansadas das invasões dos ladrões e terríveis mortes nas mãos do terrível Likh de um olho , coletaram ouro e convidaram um famoso lutador, Ivan Tsarevich , da cidade vizinha, que prometeu livrar a aldeia dos ladrões. Em uma clareira na floresta, Ivan salvou a morte iminente do Lobo Cinzento , que caiu na armadilha dos ladrões. Em troca, o Lobo prometeu informar Tsarevich sobre vários espíritos malignos. Um conhecido curandeiro Vasilisa, o Sábio, passou e, quando viu problemas, permaneceu cuidando dos moradores afetados por ataques violentos. Atrás da floresta, apareceu um palácio negro, no qual, segundo os rumores, Koshchei , o Imortal , se estabelecia, todas as noites ele visitava as aldeias e lançava um feitiço sobre os Bons Companheiros e as Donzelas Vermelhas, para que não ousassem desobedecer a sua ordem, faziam tudo como ele dizia. E na Floresta Sem Vida , Cot-Bayun se estabeleceu, e todos que o conheceram adormeceram após seus contos de fadas ou morreram de suas garras de ferro.


Reino Distante


Como já visto, os jogadores são divididos em vários grupos:


  • civis (Bons companheiros, Donzelas Vermelhas, Ivan Tsarevich, Lobo Cinzento e Vasilisa, o Sábio)
  • ladrões (ladrões em si, assim como Baba Yaga e Leshy)
  • independente (Serpent-Gorynych, Likho Caolho, Princesa Rã, Koschey, o Imortal, Cot-Bayun)

O objetivo do jogo, como mencionado acima, é permanecer vivo e vencer. De alguma forma, os oponentes devem deixar o jogo, e os independentes também devem permanecer vivos até o final do jogo. O jogo tem ouro, um tipo de moeda que os jogadores ganham apenas dentro do jogo. Os vencedores ganham ouro. Quanto mais ouro, maior a classificação do jogador.


Vou me aprofundar um pouco mais na descrição dos personagens.



Bom bom



Donzela vermelha


Good Good e Red Maiden - o papel mais maciço e principal do jogo. São civis que dormem à noite e trabalham durante o dia. À noite, eles são atacados por um dos ladrões, a Serpent Gorynych e outros papéis, e Vasilisa, o Sábio, os trata. Com alguma probabilidade pequena, o Bom Jovem ou a Donzela Vermelha podem sobreviver ao ataque sem danos (possivelmente perdendo ouro ao mesmo tempo); no entanto, ao mesmo tempo, todos reconhecerão o pseudônimo do jogador no dia seguinte ao ataque / defesa. À noite, esses jogadores não fazem nenhum movimento, mas analisam a situação do jogo com base nas mensagens no chat do jogo. À tarde, esses jogadores decidem votando qual deles não é um bom companheiro ou uma donzela vermelha. O jogador em quem a maioria dos outros jogadores votou deixa o jogo, o ganho restante ou perde ouro. Se os jogadores não escolherem ninguém por maioria de votos, nenhum deles será executado.



Ivan Tsarevich


Ivan Tsarevich - originalmente um defensor anônimo de civis. À noite, verifica os papéis de outros jogadores, pois ele conhece apenas um de seus aliados - o Lobo Cinzento. Com a participação direta do Lobo Cinzento (que também pode verificar os papéis de outros jogadores), Ivan Tsarevich, em vez de verificar, pode matar outro personagem à noite. Se, como resultado do teste, Ivan Tsarevich vê o papel do Bom Jovem ou da Donzela Vermelha no jogador, ele pode convidá-los para si mesmo e apresentá-lo ao Lobo Cinzento e outras Boas e Jovens Donzelas Vermelhas. Ivan pode ser impedido pela Princesa Sapo, que pode seduzi-lo à noite, sem trair seu papel para outros jogadores durante o dia. Se o próprio Ivan descobrir a Princesa Sapo, ela poderá oferecer a ela que se junte aos civis, mas se a Princesa recusar, ela morre nas mãos de Ivan. O Serpent-Gorynych também pode interferir nas verificações de Ivan Tsarevich, mas, diferentemente do Tsarevna Frog, à tarde ele dirá aos demais jogadores qual deles é Ivan Tsarevich. À tarde, Ivan Tsarevich não é diferente de outros colegas do Good Good.



Lobo cinzento


Gray Wolf é um assistente de Ivan Tsarevich, cujo aroma acentuado ajuda Ivan a encontrar outros Bons Companheiros e Donzelas Vermelhas. Gray Wolf diz a esses jogadores quem é Ivan Tsarevich e também relata outros jogadores com os papéis de Bons companheiros e Donzelas Vermelhas. Se o lobo descobre um ladrão ou outro inimigo, ele imediatamente informa Ivan Tsarevich disso para que ele tome uma atitude na noite seguinte. Se a Princesa Lobo, o Sapo, atacar, ele se tornará um Bom companheiro comum e não poderá checar ninguém, e a Princesa não saberá que na verdade era o Lobo Cinzento, pois o Lobo não dorme à noite. No entanto, o próprio Lobo nesta tarde descobre qual dos jogadores é a Princesa Sapo e pode tentar persuadir os Bons Companheiros e Donzelas Vermelhas que ele trouxe a Ivan Tsarevich para votar na execução da Princesa Sapo. Além disso, na noite seguinte, ela pode tentar convencer anonimamente a Princesa Sapo ao lado de civis para que ela não toque em nenhum deles. Um lobo pode se sacrificar à noite para salvar Ivan Tsarevich ou Vasilisa, o Sábio, se ele sugerir que eles repentinamente caiam sob o golpe de ladrões ou sejam zumbificados por Koshchei (o Lobo é uma imunidade inata aos encantos de Koshchei), mas o Lobo deixa o jogo após se sacrificar.



Vasilisa, o Sábio


Vasilisa, a Sábia - toca para civis, mas eles não a conhecem, já que Vasilisa é muito modesta. Além disso, Vasilisa, o Sábio, quando cura, não faz perguntas, e como um bom médico cura todos em uma fila. Mas se o remédio é tomado por Koschei, Likho ou Leshiy, eles não devem viver mais de um dia, já que Vasilisa trata apenas pessoas. Os medicamentos Vasilisa, os Sábios, não ajudarão nem o Snake Gorynych nem o Kota-Bajun, mas não trarão danos. Além disso, Cat-Bayun não toca em Vasilisa à noite, uma vez que Vasilisa não vai à Floresta Sem Vida em busca de ervas medicinais. Além disso, os encantos femininos da princesa Sapo em Vasilisa não funcionam. Se eles tentarem matar o paciente duas vezes, o remédio ficará impotente. Vasilisa não salvará ataques mágicos, por exemplo, da maldição de Likh. À tarde, Vasilisa se comporta como uma Donzela Vermelha, e apenas um olhar fugaz e um pouco triste pode sugerir um pouco que ela é a melhor médica do Far Far Away.



Ladrão


Os ladrões , ao contrário de todos os papéis anteriores, se conhecem, porque vivem no mesmo Den, e também conhecem Leshy e Babu Yaga, portanto, podem agir em conjunto imediatamente desde o primeiro movimento. Mas apenas o Líder de Gangue realiza ações à noite e não vota durante o dia, enquanto o resto dos ladrões fingem ser bons companheiros e donzelas vermelhas. Se o Líder deixar o jogo por qualquer motivo, um dos Ladrões restantes imediatamente substituirá o seu lugar. Primeiro de tudo, os ladrões estão tentando incapacitar Ivan Tsarevich, até que ele reuniu forças suficientes dos companheiros bons e das donzelas vermelhas para enfrentar ativamente os ladrões à tarde.



Goblin


Goblin espia para os ladrões à noite, informando-os dos papéis encontrados em seu covil, mas não vota durante o dia, porque ele não mora na vila. No entanto, outros jogadores podem votar em Leshy e, assim, executá-lo. Como Leshiy vem dos pântanos, a princesa Sapo não pode seduzi-lo e, se ele tentar, Leshiy marcará sua casa e os aldeões descobrirão quem ela realmente é. Não vale a pena Lesha ter medo do feitiço de Koshchei, mas Vasilisa pode curá-lo até a morte. Se Kot-Baiyun tenta atacar Lesha, ele corre o risco de perder suas garras de ferro, e então Kot terá que sacrificar as vítimas com apenas um murmúrio.



Baba Yaga


Baba Yaga também trabalha em conjunto com os ladrões, conjura à noite: pode enviar uma doença a outros jogadores ou proteger um dos aliados do ataque. Sua bruxaria é ainda mais forte que a maldição de Leah. À tarde, Baba Yaga também é ativa: quem está sob sua proteção não pode ser executado nem por maioria de votos. No entanto, o suprimento de raízes mágicas para proteção diurna é limitado, então Baba Yaga não pode proteger ninguém, nem a si mesmo, mais de três vezes por jogo. Nesta tarde, Baba Yaga finge ser a donzela vermelha de sempre e vota com todos.



Serpent-Gorynych


À noite, o Serpent-Gorynych sobrevoa aldeias, florestas e pântanos e se envolve em assaltos, revelando durante o dia o papel de ladrão. À tarde, a Serpente dorme, portanto não vota, mas pode ser executada por maioria de votos. A serpente é muito perigosa para todos, especialmente para os ladrões e Ivan Tsarevich. Não importa para quem roubar, mas se o Lobo ou o Goblin o abrir, ele poderá se tornar um aliado valioso. Se você matar a cobra à noite, poderá obter, com alguma probabilidade, um item muito valioso - a pele de cobra, que protegerá seu dono uma vez de um ataque físico.



Famosamente com um só olho


A famosa noite de um olho mata todos que se deparam com ele no caminho e que não podem ser mortos (Leshiy, Kota-Bajun ou Zmety Gorynych) - xingam, para quem tentar se comunicar com os condenados naquela noite morrerá durante o dia. O amaldiçoado também perece ao mesmo tempo, apenas Kot-Baiun, que simplesmente vai para a cama para ganhar força, pula o curso na noite seguinte. Somente Baba Yaga pode salvar Likh da maldição. A maldição não afeta quem derrotou Kota-Baiyun: ele, como o Gato, apenas vai para a cama com um passe.



The Frog Princess


A Princesa Sapo não pode vencer o jogo, mas pode ganhar muito dinheiro seduzindo outros jogadores à noite. Seduzido ao mesmo tempo pula a jogada. O sapo não pode seduzir Vasilisa, a Sábia, ela também deve evitar Lesha, que o entregará a todos no dia seguinte. Se Ivan Tsarevich ou o Líder dos Ladrões encontrar um Sapo, eles podem convidar civis ou Ladrões para o lado, enquanto Ivan não aceita a recusa do Sapo, mas o Líder não é tão exigente. Mas a princesa é bastante esperta, pode se tornar um agente duplo, porque apesar de ela sozinha não poder vencer, esta é uma grande chance de ganhar ouro, porque as chances de chegar ao final do jogo aumentam bastante! À tarde, a Princesa Sapo finge ser uma Donzela Vermelha e vota com todos.



Koschey, o Imortal


Koschey, o Imortal, vive em seu castelo. À noite, ele caminha pelas aldeias e zumbis vizinhos, os Bons Companheiros e as Donzelas Vermelhas, que vão a seu serviço e, inquestionavelmente, realizam todas as tarefas. Recusando-se a cumprir a ordem, por exemplo, de votar de maneira diferente durante o dia do que Koschey disse, ou de escrever mensagens no bate-papo durante o dia, se Koshchei o proibir, o Servo Koshchei perece. Assim, Koschey é capaz de influenciar os resultados da votação durante o dia, embora ele próprio não vote. Se Koshchei é morto, todas as suas vítimas também morrem. Vasilisa pode curar o Servo de Koshchei, que então retorna ao seu papel original. A Serpente-Gorynych e o Lobo têm uma imunidade inata aos zumbis, então Koschey, com todo o desejo, não pode transformá-los a seu serviço. Além disso, o Lobo pode ajudar Ivan ou Vasilisa a sair do problema, sacrificando-se. Resgatado pelo Lobo adquire uma imunidade a lobo para zumbis.



Ivory Bayun


Ivory Bayun vive na floresta, caça à noite. Dorme no vazio durante o dia, para que ele não participe da votação. No entanto, durante o dia, ele pode ser executado por maioria de votos. Um gato pode atacar de duas maneiras: ronronar - e então sua vítima adormece e não pode andar à noite, e também votar no dia seguinte - ou matar imediatamente com garras de ferro. O ataque de garras não funciona na Serpent-Gorynycha, mas, atacando os Leshy, o gato pode até ficar sem garras! Famosamente não pode amaldiçoar o gato, que depois da maldição dormirá apenas uma noite. Se alguém dominar Kota-Bajun para conquistar, ele será curado de qualquer doença e enfermidade, incluindo a maldição de Liha. Essa habilidade Kotova é mantida pelo jogador até o final do jogo. Os servos de Koshchei não podem votar no gato durante o dia, mas podem descobrir indiretamente quem é o gato sem informar Koshchei sobre isso. Kot-Bayun não faz alianças com Ivan ou os ladrões, então, para Kot, eles são o objetivo principal.


Tecnologias usadas


Para escrever o jogo, escolhi a tecnologia sem servidor baseada no OpenFaaS, porque é simples o suficiente para organizar o jogo e, ao mesmo tempo, desenvolvida o suficiente para escrever regras complexas do jogo sem complicações indevidas. Também usarei o cluster Kubernetes, pois essa maneira de implantar aplicativos torna fácil e confiável obter uma implantação rápida, a capacidade de escalar facilmente. Para criar lógica de jogo, apenas o OpenFaaS pode ser dispensado; no entanto, também tentarei fazer do Narrador um contêiner separado para comparar a complexidade da implementação. Eu escolhi Go como a principal linguagem de programação para microsserviços e funções, já que eu o estudava há muito tempo para substituir o Perl, e js será usado para interação do usuário com microsserviços e funções com base em alguma estrutura. Vou falar sobre a decisão final no artigo correspondente da série. Para a comunicação entre as funções, escolhi o NATS.io, pois já o encontrara antes e possui uma integração muito fácil no Kubernetes.


Anúncio


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


All Articles