"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.

De acordo com inúmeros pedidos dos leitores, inicia-se uma grande série de artigos sobre a aplicação da tecnologia de computação sem servidor para o desenvolvimento de uma aplicação real. Nesta série, será abordado o desenvolvimento da aplicação, testes e entrega aos usuários finais utilizando ferramentas modernas: arquitetura de microsserviços da aplicação (na variante serverless, baseada em OpenFaaS), o cluster kubernetes para a implantação da aplicação, o banco de dados MongoDB, voltado para a clusterização e aplicação em nuvem, além do barramento de nuvem NATS. A aplicação implementa o jogo “Byliny”, uma das variantes do popular jogo de salão “Mafia”.

O que é “Byliny”?

É uma variante do jogo “Mafia”, também conhecido como “Werewolf”. Baseia-se em um jogo em equipe, onde os participantes devem, passo a passo, descobrir quem é quem e tentar vencer. Infelizmente, ao jogar online, perde-se uma parte importante do jogo, que é a interação pessoal, e as regras da “Mafia” clássica são bastante simples, portanto, para um processo de jogo mais não linear e interessante, geralmente são adicionados outros personagens, mas, no geral, as principais características da “Mafia” original são mantidas, como a mudança entre dia e noite, turnos apenas à noite, e alianças entre os participantes. Outra diferença importante do jogo online é que o facilitador (também conhecido como Mestre do Jogo, Narrador) geralmente é um programa de computador.

Descrição do jogo

As regras do jogo que quero implementar foram retiradas de um antigo bot de irc, que eu guardei em meu arquivo pessoal há cerca de 10 anos. “Byliny” tem uma história de fundo, que inicia cada jogo:

Em um reino distante, em um estado remoto, além de sete mares, havia algumas vilas, e nelas Jovens valentes e Bela moças. Plantavam grãos e iam ao bosque vizinho colher cogumelos e frutas… E assim continuou por gerações, até que uma terrível catástrofe abalou a Terra e o mal começou a se espalhar pelo mundo! As noites tornaram-se longas e frias, e nas trevas espreitavam no bosque e invadiam a vila criaturas malignas e aterrorizantes. Chegou de algum lugar Zmey Gorynych e começou a roubar as Bela moças e a tomar tudo o que era valioso dos camponeses. A malvada e gananciosa Baba Yaga, que chegou em uma vassoura de florestas distantes, confundiu a mente dos moradores, e até alguns abandonaram suas ocupações e foram para o bosque se tornarem bandidos, formando uma quadrilha lá. Leshy, que podia se transformar em árvores e arbustos, começou a observar os pacíficos camponeses e a servir aos bandidos, investigando se os Nobres Jovens planejavam algo para livrar suas aldeias do mal. Nobres Jovens e Bonitas donzelas, cansados das investidas dos Bandidos e das mortes horríveis nas mãos do terrível Um Olho Maligno, reuniram ouro e convidaram de uma cidade vizinha um famoso lutador — Ivan, o Príncipe, que prometeu livrar a aldeia dos bandidos. Em uma clareira na floresta, Ivan salvou da morte iminente Lobo Cinzento, que havia caído em uma armadilha dos Bandidos. Em troca, o Lobo prometeu informar ao Príncipe sobre diversas criaturas malignas da floresta. Passava por lá uma famosa curandeira Vasilisa a Sábia, e ao ver o desespero, resolveu cuidar dos moradores, que havia sofrido com os ataques dos malfeitores. Além da floresta surgiu um castelo negro, onde, segundo rumores, havia se instalado Koshchei o Imortal, que toda noite visitava as aldeias e encantava os Nobres Jovens e Bonitas donzelas, para que não ousassem desobedecer suas ordens, todos faziam conforme ele dizia. No Bosque Estéril, estabeleceu-se Gato-Bayun, e cada um que o encontrava caía em um sono profundo após suas histórias ou morria por suas garras de ferro.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Reino das Três Nove

Como já é possível ver, os jogadores se dividem em vários grupos:

  • os habitantes pacíficos (Nobres Jovens, Bonitas donzelas, Ivan, o Príncipe, Lobo Cinzento e Vasilisa a Sábia)
  • bandidos (os próprios bandidos, bem como Baba-Yaga e Leshy)
  • independentes (Zmey Gorynych, Um Olho Maligno, Princesa-Rã, Koshchei o Imortal, Gato-Bayun)

O objetivo do jogo, como já foi mencionado, é permanecer vivo e vencer. Os adversários devem, de alguma forma, deixar o jogo, e os independentes também devem permanecer vivos até o final do jogo. No jogo, há ouro, uma espécie de moeda que os jogadores ganham apenas dentro do jogo. Os vencedores recebem ouro. Quanto mais ouro, maior é o ranking do jogador.

Vou detalhar um pouco mais a descrição dos personagens.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Nobre Jovem

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Bonita Donzela

Nobre Jovem e Bonita Donzela — o papel mais comum e principal no jogo. São habitantes pacíficos que dormem à noite e trabalham durante o dia. À noite, são atacados por algum dos bandidos, Zmey Gorynych e outros papéis, enquanto Vasilisa a Sábia os cura. Com uma pequena probabilidade, o Bom Jovem ou a Donzela Vermelha podem sobreviver ao ataque sem danos (possivelmente perdendo alguma ouro), mas todos descobrirão o pseudônimo do jogador no dia seguinte após o ataque. À noite, esses jogadores não fazem jogadas, mas analisam a situação do jogo com base nas mensagens no chat do jogo. Durante o dia, esses jogadores decidem, por votação, quem deles não é o Bom Jovem ou a Donzela Vermelha. O jogador que receber a maioria dos votos dos outros jogadores sai do jogo, os restantes ganham ou perdem ouro. Se os jogadores não escolherem ninguém pela maioria dos votos, nenhum jogador será executado.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Ivan Tsarevich

Ivan Tsarevich — inicialmente um defensor anônimo dos habitantes pacíficos. À noite, verifica os papéis dos outros jogadores, pois conhece apenas um aliado — o Lobo Cinza. Com a ajuda direta do Lobo Cinza (que também pode verificar os papéis de outros jogadores), Ivan Tsarevich, em vez de verificar, pode durante a noite matar outro personagem. Se, como resultado da verificação, Ivan Tsarevich vê o papel do Bom Jovem ou da Donzela Vermelha em um jogador, pode convidá-los para se juntarem a ele e apresentá-los ao Lobo Cinza e aos outros Bons Jovens e Donzelas Vermelhas. Ivan pode ser atrapalhado pela Princesa-Rã, que pode seduzi-lo à noite, sem revelar seu papel aos demais jogadores durante o dia. Se Ivan descobrir a Princesa-Rã, può oferecer-lhe juntar-se aos habitantes pacíficos, no entanto, se a Princesa recusar, ela morre às mãos de Ivan. Zmey Gorynych também pode atrapalhar as verificações de Ivan Tsarevich, mas, ao contrário da Princesa-Rã, durante o dia ele contará aos outros jogadores quem é Ivan Tsarevich. Durante o dia, Ivan Tsarevich não se distingue de outros Bons Jovens.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Lobo Cinza

Lobo Cinza — assistente de Ivan, o Tsarevich, cujo olfato aguçado ajuda Ivan a encontrar outros Bravos Jovens e Donzelas Vermelhas. O Lobo Cinza informa a esses jogadores quem é Ivan Tsarevich e também comunica sobre outros jogadores com os papéis de Bravos Jovens e Donzelas Vermelhas. Se o Lobo detectar um bandido ou outro inimigo, ele imediatamente avisa Ivan Tsarevich, para que este tome medidas na próxima noite. Se a Princesa Sapo atacar o Lobo, ele se transforma em um Bravo Jovem comum e não pode investigar ninguém, e a Princesa não saberá que na verdade era o Lobo Cinza, já que o Lobo não dorme à noite. No entanto, o próprio Lobo consegue descobrir durante o dia quem é a Princesa Sapo e pode tentar persuadir os outros Bravos Jovens e Donzelas Vermelhas que trouxe a Ivan Tsarevich a votar pela execução da Princesa Sapo. Além disso, na próxima noite, ele pode tentar anonimamente persuadir a Princesa Sapo a se aliar aos pacíficos, para que ela não prejudique ninguém deles. À noite, o Lobo pode se sacrificar para salvar Ivan Tsarevich ou Vasilisa a Sábia, se suspeitar que eles possam ser atacados por bandidos, ou tenham sido zumbificados por Koschei (o Lobo tem imunidade inata aos feitiços de Koschei), mas após o sacrifício o Lobo é eliminado do jogo.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Vasilisa a Sábia

Vasilisa a Sábia — joga como um pacífico, mas eles não sabem disso, pois Vasilisa é muito tímida. Além disso, Vasilisa a Sábia, ao curar, não faz perguntas e, como uma boa médica, cuida de todos. Mas se seu remédio for tomado por Koschei, Lihy ou Leshy — eles não viverão mais de um dia, pois Vasilisa apenas cura humanos. A Víbora Gorynych ou o Gato-Ba-Yun também não aproveitarão os medicamentos de Vasilisa a Sábia, mas também não sofrerão danos. Além disso, Vasilisa não é perturbada pelo Gato-Ba-Yun à noite, pois Vasilisa não vai à Floresta Sem Vida colher ervas medicinais. Além disso, os encantos femininos da Princesa Sapo não afetam Vasilisa. Se o paciente dela for atacado duas vezes, a medicina se mostrará impotente. Vasilisa também não salvará de ataques mágicos, como a maldição de Lihy. Durante o dia, Vasilisa se comporta como uma Donzela Vermelha, e apenas um olhar breve e levemente triste pode sugerir que ela é a melhor curandeira do Tríade Reino.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Bandido

Bandidos, ao contrário de todos os papéis anteriores, conhecem-se, pois vivem em uma mesma Toca, e também conhecem o Leshy e a Baba Yaga, portanto, podem agir de forma coordenada desde o primeiro movimento. Mas apenas o Líder da gangue age à noite e não vota durante o dia, enquanto os outros Ladrões se esforçam para se passar por Bons Rapazes e Belas Moças. Se o Líder for eliminado do jogo por qualquer motivo, seu lugar é imediatamente ocupado por um dos Ladrões restantes. Em primeiro lugar, os Ladrões tentam incapacitar Ivan-Tsarévich antes que ele consiga reunir forças suficientes dos Bons Rapazes e das Belas Moças para enfrentar os Ladrões durante o dia.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Leshy

Leshy espiando para os Ladrões à noite, informando-os sobre os papéis encontrados em sua Toca, mas durante o dia não vota, pois não reside na aldeia. No entanto, outros jogadores podem votar para condenar o Leshy. Como o Leshy é originário dos pântanos, ele não pode ser seduzido pela Princesa-Rã, e se tentar, o Leshy marcará sua casa, e os moradores da aldeia descobrirão quem ela realmente é. Não há motivo para o Leshy temer os encantos de Koschei, mas Vasilisa pode curá-lo até a morte. Se o Gato-Bayun tentar atacar o Leshy, ele arrisca perder suas garras de ferro, e depois terá que fazer o Gato adormecer suas vítimas apenas com seu ronronar.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Baba Yaga

Baba Yaga trabalha também com os Ladrões, praticando magia à noite: pode lançar doenças sobre outros jogadores ou proteger algum de seus aliados de ataques. Sua magia é até mais poderosa que a maldição do Lich. Durante o dia, Baba Yaga também está ativa: aquele que está sob sua proteção não pode ser executado mesmo pela maioria dos 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, incluindo a si mesma, mais de três vezes durante o jogo. Durante o dia, Baba Yaga finge ser uma comum Bela Moça e vota com todos.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Zmey Gorynych

Zmey Gorynych voa à noite sobre vilarejos, florestas e pântanos, praticando saques, revelando durante o dia o papel da vitima. Durante o dia, o Dragão dorme, por isso não vota, mas pode ser executado pela maioria dos votos. O Dragão é muito perigoso para todos, especialmente para os Ladrões e Ivan, o Príncipe. O Dragão não se importa com quem saquear, mas se for revelado pelo Lobo ou o Leshiy, pode se tornar um aliado valioso. Se o Dragão for morto à noite, existe uma chance de obter um item muito valioso — a Pele do Dragão, que protegerá seu portador uma vez de um ataque físico.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Zorro de Um Olho

Zorro de Um Olho à noite mata todos que cruzam seu caminho, e aqueles que não consegue matar (Leshiy, o Gato-Bayun, ou o Dragão Gorynych) — amaldiçoa, de modo que qualquer um que tente se comunicar com o amaldiçoado naquela mesma noite, morrerá durante o dia. O próprio amaldiçoado também morre, exceto o Gato-Bayun, que simplesmente se deita para dormir, acumulando forças, pulando a vez na próxima noite. Apenas Baba Yaga pode salvar da maldição. A maldição não afeta quem venceu o Gato-Bayun: ele, assim como o Gato, simplesmente se deita para dormir e pula a vez.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
A Princesa-Rã

A Princesa-Rã não consegue vencer no jogo, mas pode ganhar muito dinheiro, seduzindo outros jogadores durante a noite. Quem for seduzido perde a vez. A Rã não consegue seduzir Vasilisa a Sábia, e também deve evitar o Leshiy, que a entregará a todos no dia seguinte. Se Ivan, o Príncipe, ou o Líder dos Ladrões encontrarem a Rã, podem convidá-la a se juntar ao lado dos moradores pacíficos ou dos Ladrões, sendo que Ivan não aceita um não como resposta da Rã, enquanto o Líder é menos exigente. Mas a Princesa é astuta o suficiente para se tornar uma agente dupla, pois apesar de não conseguir vencer sozinha — é uma ótima oportunidade de acumular ouro, pois as chances de chegar ao final do jogo aumentam consideravelmente! Durante o dia, a Princesa-Rã finge ser uma Donzela Vermelha e vota junto com todos.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Koshchei o Imortal

Koshchei o Imortal vive em seu castelo. À noite, ele anda pelas vilas vizinhas e zombifica os Bons Jovens e as Bonitas Donzelas, que se tornam seus servos e cumprem todas as ordens sem questionar. Ao se recusar a seguir uma ordem, como, por exemplo, votar de maneira diferente durante o dia do que foi dito por Koshchei, ou enviar mensagens durante o dia no chat, se Koshchei proibir isso, o Servidor de Koshchei morre. Dessa forma, Koshchei é capaz de influenciar os resultados das votações durante o dia, mesmo sem votar pessoalmente. Se Koshchei for morto, todas as suas vítimas também morrem. Vasilisa pode curar o Servidor de Koshchei, que então retorna ao seu papel original. O Dragão de Três Cabeças e o Lobo têm imunidade inata à zombificação, então Koshchei, por mais que queira, não pode recrutar eles para seus serviços. Além disso, o Lobo pode resgatar Ivan ou Vasilisa de uma situação difícil, sacrificando-se. Os salvos pelo Lobo adquirem a Imunidade do Lobo contra zombificação.

"Novos Contos". Para desenvolvedores, operações e pessoas curiosas.
Gato-Bayun

Gato-Bayun vive na floresta, caça à noite. Durante o dia, dorme em seu buraco, portanto não participa da votação. No entanto, durante o dia, ele pode ser condenado pela maioria dos votos. O Gato pode atacar de duas maneiras: fazendo ronronar — e então sua vítima adormece e não consegue andar à noite, nem votar no dia seguinte — ou matando imediatamente com suas garras de ferro. O ataque com garras não funciona no Dragão de Três Cabeças, e ao atacar o Leshy, o Gato pode até ficar sem garras! O Lish não pode amaldiçoar o Gato, que após a maldição simplesmente dormirá uma noite. Se alguém conseguir derrotar o Gato-Baiun, será curado de qualquer doença e mal, incluindo a maldição do Lish. Essa habilidade do Gato permanece com o jogador até o final do jogo. Os Servidores de Koshchei não podem votar durante o dia pelo Gato, mas podem indiretamente descobrir quem é o Gato, sem informar Koshchei. O Gato-Baiun não se alia a Ivan ou aos Ladrões, então eles são seu alvo prioritário.

Tecnologias utilizadas

Para o desenvolvimento do jogo, escolhi a tecnologia de computação sem servidor (serverless) baseada no OpenFaaS, pois é bastante simples para organizar o jogo e, ao mesmo tempo, suficientemente avançada para escrever regras de jogo complexas sem complicações desnecessárias. Também vou utilizar um cluster Kubernetes, uma vez que esse método de implantação de aplicativos permite uma rápida e confiável implantação e fácil escalabilidade. Para a criação da lógica do jogo, pode-se utilizar apenas o OpenFaaS, no entanto, também tentarei construir um Narrador como um contêiner separado, para comparar a complexidade de implementação. Como a principal linguagem de programação para microserviços e funções, escolhi Go, pois já a estudo há bastante tempo em meu tempo livre, em substituição ao Perl, e para a interação dos usuários com os microserviços e funções será utilizado js baseado em algum framework. Contarei a decisão final no respectivo artigo da série. Para a comunicação entre as funções, escolhi o NATS.io, pois já tive experiências anteriores com ele, e sua integração no Kubernetes é bastante simples.

Anúncio

  • Introdução
  • Configuração do ambiente de desenvolvimento, divisão da tarefa em funções
  • Trabalhos no backend
  • Trabalhos no frontend
  • Configuração do CICD, organização de testes
  • Início de uma sessão de teste do jogo
  • Resultados

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster