"Novos épicos". Para desenvolvedores, operações e curiosos

"Novos épicos". Para desenvolvedores, operações e curiosos

Devido a inúmeras solicitações de leitores, uma grande série de artigos está sendo iniciada sobre o uso da tecnologia de computação sem servidor para desenvolver um aplicativo real. Este ciclo cobrirá o desenvolvimento, teste e entrega de aplicações aos usuários finais usando ferramentas modernas: arquitetura de aplicações de microsserviços (em uma versão serverless, baseada em OpenFaaS), conjunto kubernetes para implantação de aplicativos, banco de dados MongoDB, com foco em clustering e aplicativos em nuvem, bem como em barramento de nuvem NATS. O aplicativo implementa o jogo "Epics", uma das variantes do popular jogo de salão "Mafia".

O que são “Épicos”?

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

Descrição do Jogo

As regras do jogo que desejo implementar foram retiradas de um antigo bot de irc que salvei em meu arquivo pessoal há cerca de 10 anos. "Épicos" têm uma história de fundo com a qual cada jogo começa:

No reino distante, no trigésimo estado, além dos sete mares, várias aldeias viviam e viviam, e nelas bons companheiros и Lindas garotas. Eles semearam pão e foram para a floresta circundante colher cogumelos e frutas vermelhas... E isso continuou de século em século, 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, no escuro, criaturas cruéis e terríveis rondavam a floresta e vagavam pela aldeia. Chegou de algum lugar Cobra Gorynych e adquiriu o hábito de roubar donzelas vermelhas e tirar tudo de valor dos aldeões. Prejudicial e ganancioso Baba Yaga, que voou em um morteiro de florestas distantes, confundiu a mente dos habitantes, e até alguns desistiram de seu ofício e foram para a floresta roubar, formando ali uma gangue. Os vilões se conheceram Duende, que sabia se transformar em árvores e arbustos, começou a monitorar os pacíficos aldeões e a servir os ladrões, farejando se os Bons Companheiros estavam tramando algo para livrar seus assentamentos dos espíritos malignos. Bons companheiros e lindas donzelas, cansados ​​​​dos ataques dos Ladrões e das mortes terríveis nas mãos dos terríveis Arrojado com um olho só, coletou ouro e convidou um lutador famoso de uma cidade vizinha - Ivan Tsarevich, que prometeu livrar a aldeia dos ladrões. Em uma clareira na floresta, Ivan salvou da morte certa Lobo cinza, que caiu na armadilha dos Ladrões. Em troca, o Lobo prometeu informar o Czarevich sobre vários espíritos malignos da floresta. Um famoso curandeiro passou Vasilisa, a Sábia, e quando viu problemas, ficou para cuidar dos moradores que sofreram com os ataques dos arrojados. Atrás da floresta apareceu um palácio negro, no qual, segundo rumores, ele se instalou Koschey, o Imortal, todas as noites ele visitava as aldeias e enfeitiçava os Bons Companheiros e as Donzelas Vermelhas para que não ousassem desobedecer às suas ordens, fizessem tudo como ele mandava. E se estabeleceu na Floresta Sem Vida Gato Baiyun, e todos que o conheceram adormeceram depois de suas histórias ou morreram por causa de suas garras de ferro.

"Novos épicos". Para desenvolvedores, operações e curiosos
Reino tão distante

Como você já pode ver, os jogadores estão divididos em vários grupos:

  • civis (Bons companheiros, Donzelas Vermelhas, Ivan Tsarevich, Lobo Cinzento e Vasilisa, a Sábia)
  • ladrões (os próprios ladrões, bem como Baba Yaga e Leshy)
  • independente (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey, o Imortal, Cat-Bayun)

O objetivo do jogo, conforme mencionado acima, é permanecer vivo e vencer. Os adversários devem deixar o jogo de uma forma ou de outra, e os independentes também devem permanecer vivos até o final do jogo. O jogo conta com ouro, uma espécie de moeda do jogo que os jogadores ganham apenas dentro do jogo. Os vencedores recebem ouro. Quanto mais ouro, maior será a classificação do jogador.

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

"Novos épicos". Para desenvolvedores, operações e curiosos
Bom amigo

"Novos épicos". Para desenvolvedores, operações e curiosos
Donzela Vermelha

Bom amigo и Donzela Vermelha - o papel mais difundido e principal no jogo. São civis que dormem à noite e trabalham durante o dia. À noite eles são atacados por um dos ladrões, a Serpente Gorynych e outros papéis, e Vasilisa, a Sábia, os cura. Com alguma pequena probabilidade, o Good Fellow ou a Red Maiden podem sobreviver ao ataque sem danos (possivelmente perdendo ouro no processo), no entanto, todos reconhecerão o apelido do jogador no dia seguinte ao ataque. À noite, esses jogadores não fazem nenhum movimento, mas analisam a situação do jogo com base nas mensagens do chat do jogo. Durante o dia, esses jogadores decidem votando em qual deles não é o Bom Companheiro ou a Donzela Vermelha. O jogador votado pela maioria dos outros jogadores sai do jogo, os jogadores restantes recebem ou perdem ouro. Se os jogadores não escolherem ninguém por maioria de votos, nenhum jogador será executado.

"Novos épicos". Para desenvolvedores, operações e curiosos
Ivan Tsarevich

Ivan Tsarevich - inicialmente um defensor anônimo de civis. À noite ele verifica os papéis dos outros jogadores, pois 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, ao invés de verificar, pode matar outro personagem à noite. Se, como resultado da verificação, Ivan Tsarevich vir o papel de um Bom Companheiro ou de uma Donzela Vermelha em um jogador, ele poderá convidá-los para seu lugar e apresentá-los ao Lobo Cinzento e outros Bons Companheiros e Donzelas Vermelhas. Ivan pode sofrer a interferência da Princesa Sapo, que pode seduzi-lo à noite, sem revelar seu papel aos outros jogadores durante o dia. Se o próprio Ivan descobrir a Princesa Sapo, ele pode convidá-la para se juntar aos civis, mas se a Princesa recusar, ela morre nas mãos de Ivan. A Serpente-Gorynych também pode interferir nas verificações de Ivan-Tsarevich, mas, ao contrário da Princesa Sapo, durante o dia ele dirá aos outros jogadores qual deles é Ivan-Tsarevich. Durante o dia, Ivan Tsarevich não é diferente dos outros Bons Companheiros.

"Novos épicos". Para desenvolvedores, operações e curiosos
Lobo cinzento

Lobo cinzento - assistente de Ivan Tsarevich, cujo olfato apurado ajuda Ivan a encontrar outros Bons Companheiros e Donzelas Vermelhas. Gray Wolf conta a esses jogadores quem é Ivan, o Czarevich, e também informa sobre outros jogadores com os papéis de Bons Companheiros e Donzelas Vermelhas. Se o Lobo descobrir um ladrão ou outro inimigo, ele imediatamente informa Ivan Tsarevich para que ele possa agir na noite seguinte. Se o Lobo for atacado pela Princesa Sapo, ele se transformará em um Bom Companheiro comum e não poderá verificar ninguém, e a Princesa não saberá que na verdade era o Lobo Cinzento, já que o Lobo não dorme à noite. Porém, o próprio Lobo descobrirá durante o dia qual dos jogadores é a Princesa Sapo, e poderá tentar persuadir o resto dos Bons Companheiros e Donzelas Vermelhas, que ele trouxe para Ivan Tsarevich, a votar pela execução do Sapo Princesa. Também na noite seguinte, ele pode tentar persuadir anonimamente a Princesa Sapo a ficar do lado dos civis para que ela não toque em nenhum deles. O Lobo pode se sacrificar à noite para salvar Ivan Tsarevich ou Vasilisa, o Sábio, se ele presumir que eles cairão repentinamente sob o ataque de ladrões ou foram zumbificados por Koshchei (o Lobo tem uma imunidade inata aos encantos de Koshchei), mas o Wolf, após auto-sacrifício, sai do jogo.

"Novos épicos". Para desenvolvedores, operações e curiosos
Vasilisa, a Sábia

Vasilisa, a Sábia - toca para civis, mas eles não sabem dela, pois Vasilisa é muito modesta. Além disso, Vasilisa, a Sábia, quando trata, não faz perguntas e, como uma boa médica, trata a todos. Mas se Koschey, Likho ou Leshy beberem seu remédio, não viverão mais do que um dia, já que Vasilisa só trata pessoas. O remédio de Vasilisa, a Sábia, também não ajudará a cobra Gorynych ou o Cat-Bayun, mas também não fará mal. Além disso, Kot-Bayun não toca em Vasilisa à noite, já que Vasilisa não vai à Floresta Sem Vida para comprar ervas medicinais. Além disso, os encantos femininos da Princesa Sapo não funcionam em Vasilisa. Se tentassem matar seu paciente duas vezes, a medicina seria impotente. Vasilisa não irá salvá-lo de ataques mágicos, por exemplo, da maldição Dashing. Durante o dia, Vasilisa se comporta como uma Donzela Vermelha, e apenas um olhar fugaz e um pouco triste pode sugerir que ela é a melhor curandeira do Reino Distante.

"Novos épicos". Para desenvolvedores, operações e curiosos
Vampiro

Rogues, ao contrário de todos os papéis anteriores, eles se conhecem, pois moram no mesmo Lair, e também conhecem Leshy e Baba Yaga, para que possam atuar em conjunto desde o primeiro movimento. Mas apenas o Líder da gangue realiza ações à noite e não vota durante o dia, enquanto o resto dos Ladrões fingem diligentemente ser Bons Companheiros e Donzelas Vermelhas. Se o Líder sair do jogo por qualquer motivo, um dos Ladinos restantes imediatamente tomará seu lugar. Em primeiro lugar, os Ladrões estão tentando incapacitar Ivan, o Czarevich, até que ele reúna forças suficientes de Bons Companheiros e Donzelas Vermelhas para enfrentar ativamente os Ladrões durante o dia.

"Novos épicos". Para desenvolvedores, operações e curiosos
Leshy

Leshy à noite ele espia os Ladrões, informando-os sobre os papéis encontrados em sua Toca, mas durante o dia não vota, pois não mora na aldeia. Porém, outros jogadores podem votar em Leshy e assim executá-lo. Como o Leshy vem dos pântanos, ele não pode ser seduzido pela Princesa Sapo e, se tentar, o Leshy marcará a casa dela e os aldeões descobrirão quem ela realmente é. Leshem não deveria ter medo do feitiço de Koshchei, mas Vasilisa pode curá-lo até a morte. Se Kot-Bayun tentar atacar Leshy, ele corre o risco de perder suas garras de ferro, e então Kot terá que fazer as vítimas dormirem apenas com seu ronronar.

"Novos épicos". Para desenvolvedores, operações e curiosos
Baba Yaga

Baba Yaga Ele também trabalha junto com os Ladrões e lança feitiços à noite: ele pode enviar doenças a outros jogadores ou proteger um de seus aliados de ataques. Sua bruxaria é ainda mais forte que a maldição de Likh. Durante o dia, Baba Yaga também está ativa: ninguém sob sua proteção não pode ser executado nem mesmo por maioria de votos. No entanto, o fornecimento de raízes mágicas para proteção diurna é limitado, então Baba Yaga não pode proteger ninguém, inclusive ela mesma, mais de três vezes por jogo. Durante o dia, Baba Yaga finge ser uma Donzela Vermelha comum e vota com todos os outros.

"Novos épicos". Para desenvolvedores, operações e curiosos
Cobra-Gorynych

Cobra-Gorynych à noite ele sobrevoa aldeias, florestas e pântanos e pratica roubos, revelando o papel do assaltado durante o dia. Durante o dia, a Serpente dorme, por isso não vota, mas pode ser executada por maioria de votos. A cobra é muito perigosa para todos, especialmente para os Ladrões e Ivan Tsarevich. A cobra não se importa com quem ela rouba, mas se for descoberta pelo Lobo ou pelo Leshy, pode se tornar um aliado valioso. Se você matar a Cobra à noite, poderá, com alguma probabilidade, receber um item muito valioso - a Pele de Cobra, que protegerá seu dono de ataques físicos uma vez.

"Novos épicos". Para desenvolvedores, operações e curiosos
Famosamente com um só olho

Famosamente com um só olho à noite ele mata todos que atrapalham, e quem ele não consegue matar (Leshy, Kota-Bayun ou a Serpente Gorynych) ele amaldiçoa, para que quem tentar se comunicar com o maldito naquela mesma noite morrerá durante o dia . O próprio maldito também morre neste caso, só que não morre Kot-Bayun, que simplesmente vai para a cama para ganhar forças, pulando sua vez na noite seguinte. Apenas Baba Yaga pode salvar Likh da maldição. A maldição não afeta quem derrotou Cat-Bayun: ele, assim como o Gato, simplesmente vai para a cama e pula uma vez.

"Novos épicos". Para desenvolvedores, operações e curiosos
Princesa Sapo

Princesa Sapo não pode vencer o jogo, mas pode ganhar muito dinheiro seduzindo outros jogadores à noite. O tentado perde a sua vez. O sapo não pode seduzir Vasilisa, a Sábia, e também deve evitar Leshy, que a trairá para todos no dia seguinte. Se Ivan, o Czarevich, ou o Líder dos Ladrões encontrarem o Sapo, eles poderão convidar civis ou os Ladrões para o seu lado, enquanto Ivan não aceitará a recusa do Sapo, mas o Líder não é tão exigente. Mas a Princesa é bastante astuta, ela pode se tornar uma agente dupla, pois apesar de não conseguir vencer sozinha, esta é uma excelente chance de ganhar ouro, pois as chances de sobreviver até o final do jogo aumentam muito! Durante o dia, a Princesa Sapo finge ser a Donzela Vermelha e vota com todos juntos.

"Novos épicos". Para desenvolvedores, operações e curiosos
Koschey, o Imortal

Koschey, o Imortal mora em seu castelo. À noite, ele caminha pelas aldeias vizinhas e zumbifica os Bons Companheiros e as Donzelas Vermelhas, que entram em seu serviço e cumprem todas as ordens sem questionar. Ao se recusar a cumprir uma ordem, por exemplo, de votar durante o dia de forma diferente do que foi dito por Koshchei, ou de escrever mensagens no chat durante o dia se Koshchei o proibisse, o Servo de Koshchei morre. Assim, Koschey consegue influenciar o resultado da votação durante o dia, mesmo que ele próprio não vote. Se Koshchei for morto, todas as suas vítimas também morrerão. Vasilisa pode curar o Servo Koshchei, que então retorna ao seu papel original. A Cobra-Gorynych e o Lobo têm uma imunidade inata à zumbificação, então Koschey, por mais que queira, não pode colocá-los a seu serviço. O Lobo também pode ajudar Ivan ou Vasilisa a sair de problemas sacrificando-se. Salvo pelo Lobo adquire imunidade do Lobo à zumbificação.

"Novos épicos". Para desenvolvedores, operações e curiosos
Gato Baiyun

Gato Baiyun mora na floresta, caça à noite. Durante o dia ele dorme em seu buraco, por isso não participa da votação. No entanto, durante o dia ele pode ser executado por maioria de votos. O gato pode atacar de duas maneiras: ronronar - e então sua vítima adormece e não consegue andar à noite, e não consegue votar no dia seguinte - ou mata imediatamente com garras de ferro. Atacar com garras não funciona no Snake-Gorynych, e depois de atacar Leshy, o Gato pode ficar sem garras! Dashing não pode amaldiçoar o Gato, que após a maldição simplesmente dormirá por uma noite. Se alguém conseguir derrotar Kota-Bayun, será curado de qualquer doença ou enfermidade, incluindo a maldição de Likh. Esta habilidade do Gato permanece com o 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 com os Ladrões, então eles são o alvo principal de Kot.

Tecnologias utilizadas

Para escrever o jogo, escolhi a tecnologia de computação sem servidor baseada em OpenFaaS, pois é simples o suficiente para organizar o jogo e, ao mesmo tempo, avançada o suficiente para escrever regras de jogo complexas sem complicações desnecessárias. Também usarei um cluster Kubernetes, uma vez que esse método de implantação de aplicativos torna bastante simples e confiável a obtenção de implantação rápida e a capacidade de escalar facilmente. Para criar a lógica do jogo, você só pode usar OpenFaaS, mas também tentarei fazer do Storyteller um contêiner separado para comparar a complexidade da implementação. Como principal linguagem de programação para microsserviços e funções, escolhi Go, já que venho estudando há muito tempo no meu tempo livre para substituir o Perl, e js será usado com base em um determinado framework para interação do usuário com microsserviços e funções. Contarei a vocês sobre a decisão final no artigo correspondente da série. Para comunicar funções entre si, escolhi o NATS.io, porque já o tinha encontrado antes e tem uma integração bastante fácil com o Kubernetes.

Anúncio

  • Introdução
  • Configurando o ambiente de desenvolvimento, dividindo a tarefa em funções
  • Trabalho de back-end
  • Trabalho de front-end
  • Configurando CICD, organizando testes
  • Inicie uma sessão de teste do jogo
  • Resultados de

Fonte: habr.com

Adicionar um comentário