"Novas épicas". Para desenvolvedores, operarios e curiosos

"Novas épicas". Para desenvolvedores, operarios e curiosos

Debido ás numerosas solicitudes dos lectores, comezan unha gran serie de artigos sobre o uso da tecnoloxía informática sen servidor para desenvolver unha aplicación real. Este ciclo abarcará o desenvolvemento, probas e entrega de aplicacións aos usuarios finais mediante ferramentas modernas: arquitectura de aplicacións de microservizos (nunha versión sen servidor, baseada en OpenFaaS), cluster kubernetes para implantación de aplicacións, base de datos MongoDB, centrada na agrupación e aplicación na nube, así como no bus na nube NATS. A aplicación implementa o xogo "Epics", unha das variantes do popular xogo de salón "Mafia".

Que son as "épicas"?

Esta é unha variante do xogo "Mafia", tamén coñecido como "Warewolf". Baséase nun xogo en equipo no que os participantes deben aprender paso a paso quen é quen e tentar gañar. Desafortunadamente, cando se xoga en liña, un compoñente tan importante do xogo como a interacción persoal desaparece e as regras da clásica "Mafia" son bastante sinxelas, polo tanto, para un xogo máis non lineal e interesante, adoitan engadirse outros personaxes, pero en xeral, as principais características da "Mafia" orixinal consérvanse, por exemplo, o cambio de día e de noite, os movementos só pola noite, así como as alianzas entre os participantes. Outra diferenza importante entre xogar en liña é que o host (tamén coñecido como Game Master, Storyteller) adoita ser un programa de ordenador.

Descrición do xogo

As regras do xogo que quero implementar están tomadas dun antigo bot irc que gardei no meu arquivo persoal hai uns 10 anos. "Epics" ten unha historia de fondo coa que comeza cada xogo:

No afastado reino, no trixésimo estado, máis aló dos sete mares, vivían e vivían varias aldeas, e nelas Bos compañeiros и Mozas guapas. Sementaron pan e foron ao bosque dos arredores a recoller cogomelos e froitos do bosque... E isto continuou de século en século, ata que unha terrible catástrofe sacudiu a Terra e o mal comezou a espallarse polo mundo! As noites fixéronse longas e frías, e na escuridade, criaturas desagradables e terribles merodeaban polo bosque e entraban na aldea. Chegou de algún lugar Dragón e colleu o costume de roubar doncelas Vermellas e quitarlles todo o valioso aos veciños. Nocivo e cobizoso Baba Yaga, que voaba nun morteiro de bosques afastados, confundiu a mente dos habitantes, e mesmo algúns abandonaron o seu oficio e entraron no bosque a roubar, formando alí unha banda. Coñecéronse os viláns Trasno, que sabía converterse en árbores e arbustos, comezou a vixiar aos pacíficos aldeáns e a servir aos ladróns, olfateando se os Bos Compañeiros estaban tramando algo para librar os seus asentamentos dos malos espíritos. Bos compañeiros e fermosas doncelas, cansos das incursións dos ladróns e das terribles mortes a mans dos terribles. Deslumbrante dun ollo, recolleu ouro e convidou a un famoso loitador dunha cidade veciña - Ivan Tsarevich, que prometeu librar a aldea dos ladróns. Nun claro do bosque, Iván salvou dunha morte segura Lobo Gris, que caeu na trampa do pozo dos Ladróns. A cambio, o Lobo prometeu informarlle ao Tsarevich sobre varios espíritos malignos do bosque. Por alí pasou un famoso curandeiro Vasilisa a Sabia, e cando viu problemas, quedouse para darlle coidado aos veciños que sufriran as agresións dos precursores. Detrás do bosque apareceu un palacio negro, no que, segundo os rumores, se instalou Koschei o sen morte, todas as noites visitaba as aldeas e enfeitizaba aos Bos Compañeiros e Doncelas Vermellas para que non se atrevesen a desobedecer as súas ordes, facían todo como el dicía. E instalouse no Bosque Sen Vida Gato Baiyun, e todos os que o coñeceron quedaron durmidos despois dos seus contos ou morreron polas súas garras de ferro.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Reino Lonxano Lonxano

Como xa podes ver, os xogadores divídense en varios grupos:

  • civís (Good Fellows, Red Maidens, Ivan Tsarevich, Grey Wolf e Vasilisa the Wise)
  • ladróns (os propios ladróns, así como Baba Yaga e Leshy)
  • independente (Snake-Gorynych, Dashing One Eyed, Frog Princess, Koschey the Inmortal, Cat-Bayun)

O obxectivo do xogo, como se mencionou anteriormente, é manterse vivo e gañar. Os opoñentes deben abandonar o xogo dun xeito ou outro, e os independentes tamén deben permanecer vivos ata o final do xogo. O xogo ten ouro, unha especie de moeda de xogo que os xogadores gañan só dentro do xogo. Os gañadores reciben ouro. Canto máis ouro, maior será a valoración do xogador.

Deterereime un pouco máis en detalle na descrición dos personaxes.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Bo compañeiro

"Novas épicas". Para desenvolvedores, operarios e curiosos
Doncela Vermella

Bo compañeiro и Doncela Vermella - o papel máis estendido e principal no xogo. Trátase de civís que dormen pola noite e traballan durante o día. Pola noite son atacados por un dos ladróns, a Serpe Gorynych e outros papeis, e Vasilisa a Sabia cúraos. Con algunha pequena probabilidade, o Good Fellow ou a Red Maiden poden sobrevivir ao ataque sen danos (posiblemente perdendo ouro no proceso), non obstante, todos recoñecerán o alcume do xogador ao día seguinte despois do ataque. Pola noite, estes xogadores non fan ningún movemento, pero analizan a situación do xogo en función das mensaxes do chat do xogo. Durante o día, estes xogadores deciden votando cal deles non é o Good Fellow ou a Red Maiden. O xogador votado pola maioría dos outros xogadores abandona o xogo, os xogadores restantes reciben ou perden ouro. Se os xogadores non elixen a ninguén por maioría de votos, ningún xogador será executado.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Iván Tsarevich

Iván Tsarevich - inicialmente un defensor anónimo dos civís. Pola noite verifica os papeis doutros xogadores, xa que só coñece a un dos seus aliados: o lobo gris. Coa participación directa do lobo gris (que tamén pode comprobar os papeis doutros xogadores), Ivan Tsarevich, en lugar de comprobar, pode matar a outro personaxe pola noite. Se, como resultado da verificación, Ivan Tsarevich ve o papel dun bo compañeiro ou dunha doncela vermella nun xogador, entón pode invitalos ao seu lugar e presentalos ao lobo gris e outros bos compañeiros e doncelas vermellas. Ivan pode ser interferido pola Princesa Sapo, que pode seducilo pola noite, sen revelar o seu papel a outros xogadores durante o día. Se o propio Iván descobre á Princesa Sapo, pode invitala a unirse aos civís, pero se a Princesa se nega, morre a mans de Iván. O Serpent-Gorynych tamén pode interferir coas probas de Ivan-Tsarevich, pero, a diferenza da Princesa Sapo, durante o día dirá aos demais xogadores cal deles é Ivan-Tsarevich. Durante o día, Ivan Tsarevich non é diferente dos outros Good Fellows.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Lobo gris

Lobo gris - asistente de Ivan Tsarevich, cuxo olfacto agudo axuda a Ivan a atopar outros Good Fellows e Red Maidens. Grey Wolf di a estes xogadores quen é Iván o Tsarevich e tamén informa sobre outros xogadores cos papeis de Good Fellows e Red Maidens. Se o Lobo descobre un ladrón ou outro inimigo, inmediatamente informa a Ivan Tsarevich para que poida tomar medidas á noite seguinte. Se o Lobo é atacado pola Princesa Sapo, convértese nun Bo Compañeiro común e non pode comprobar a ninguén, e a Princesa non saberá que en realidade era o Lobo Cins, xa que o Lobo non dorme pola noite. Non obstante, o propio Lobo descubrirá durante o día cal dos xogadores é a Princesa Sapo, e pode tentar persuadir ao resto dos Bos Compañeiros e Doncelas Vermellas, aos que trouxo a Ivan Tsarevich, para que voten a favor da execución da Ra. Princesa. Tamén á noite seguinte, pode tentar persuadir de forma anónima á Princesa Sapo do lado dos civís para que non toque a ningún deles. O Lobo pode sacrificarse pola noite para salvar a Iván Tsarevich ou a Vasilisa a Sabia, se asume que de súpeto caerán baixo o ataque dos ladróns, ou foron zombificados por Koshchei (o Lobo ten unha inmunidade innata aos encantos de Koshchei), pero despois de o abnegación que o Lobo abandona do xogo.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Vasilisa a Sabia

Vasilisa a Sabia - xoga para civís, pero non saben dela, xa que Vasilisa é moi modesta. Ademais, Vasilisa a Sabia, cando trata, non fai preguntas e, como un bo médico, trata a todos. Pero se Koschey, Likho ou Leshy beben a súa medicina, non vivirán máis dun día, xa que Vasilisa só trata ás persoas. A medicina de Vasilisa a Sabia tampouco axudará á serpe Gorynych nin ao Cat-Bayun, pero tampouco causarán dano. Ademais, Kot-Bayun non toca a Vasilisa pola noite, xa que Vasilisa non vai ao Bosque Sen Vida para comprar herbas medicinais. Ademais, os encantos femininos da Princesa Sapo non funcionan en Vasilisa. Se tentasen matar o seu paciente dúas veces, a medicina sería impotente. Vasilisa non te salvará de ataques máxicos, por exemplo da maldición Dashing. Durante o día, Vasilisa compórtase como unha Doncella Vermella, e só unha mirada fugaz e un pouco triste pode dar a entender un pouco que é a mellor cura do Reino Lonxano.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Canalla

Atracadores, a diferenza de todos os papeis anteriores, coñécense, xa que viven no mesmo Lair, e tamén coñecen a Leshy e Baba Yaga, polo que poden actuar en concerto dende o primeiro movemento. Pero só o líder da banda realiza accións pola noite e non vota durante o día, mentres que o resto dos ladróns fingen con dilixencia como Good Fellows e Red Maidens. Se o líder abandona o xogo por calquera motivo, un dos pícaros restantes toma inmediatamente o seu lugar. En primeiro lugar, os ladróns intentan desactivar a Ivan the Tsarevich ata que reúna forzas suficientes de Good Fellows e Red Maidens para enfrontarse activamente aos ladróns durante o día.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Trasno

Trasno pola noite espía aos Ladróns, informándolles dos papeis atopados no seu Covo, pero de día non vota, xa que non vive na aldea. Non obstante, outros xogadores poden votar por Leshy e así executalo. Dado que o Leshy vén dos pantanos, non pode ser seducido pola Princesa Sapo, e se o intenta, o Leshy marcará a súa casa e os veciños descubrirán quen é realmente. Leshem non debería ter medo do feitizo de Koshchei, pero Vasilisa pode curalo ata a morte. Se Kot-Bayun tenta atacar a Leshy, corre o risco de perder as súas garras de ferro, e entón Kot terá que adormecer ás vítimas só co seu ronroneo.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Baba Yaga

Baba Yaga Tamén traballa xunto cos ladróns e lanza feitizos pola noite: pode enviar enfermidades a outros xogadores ou protexer a un dos seus aliados dos ataques. A súa bruxería é aínda máis forte que a maldición de Likh. Durante o día, Baba Yaga tamén está activa: ninguén baixo a súa protección non pode ser executado nin sequera con voto maioritario. Non obstante, a oferta de raíces máxicas para a protección durante o día é limitada, polo que Baba Yaga non pode protexer a ninguén, incluída a si mesma, máis de tres veces por xogo. Durante o día, Baba Yaga finxe ser unha Doncella Vermella común e vota con todos os demais.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Dragón

Dragón pola noite sobrevoa aldeas, bosques e pantanos e dedícase a roubos, revelando o papel do roubado durante o día. Durante o día, a Serpe dorme, polo que non vota, pero pode ser executado por maioría de votos. A serpe é moi perigosa para todos, especialmente para os ladróns e Ivan Tsarevich. Á serpe non lle importa a quen rouba, pero se é descuberto polo Lobo ou o Leshy, pode converterse nun valioso aliado. Se matas á serpe pola noite, podes, con certa probabilidade, recibir un artigo moi valioso: a pel de serpe, que protexerá ao seu propietario dunha vez do ataque físico.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Deslumbrante dun ollo

Deslumbrante dun ollo pola noite mata a todos os que se interpoñen no seu camiño, e a quen non pode matar (Leshy, Kota-Bayun ou a Serpe Gorynych) maldice, de xeito que quen tente comunicarse co condenado esa mesma noite morrerá durante o día. . O propio condenado tamén morre neste caso, só non morre Kot-Bayun, que simplemente se vai para a cama para coller forzas, saltándose a súa quenda á noite seguinte. Só Baba Yaga pode salvar a Likh da maldición. A maldición non afecta a quen derrotou ao Gato-Bayun: el, como o Gato, simplemente vai para a cama e sáltase unha quenda.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Princesa Sapo

Princesa Sapo non pode gañar a partida, pero pode gañar moito diñeiro seducindo a outros xogadores pola noite. O tentado perde a súa quenda. A ra non pode seducir a Vasilisa a Sabia, e tamén debería evitar a Leshy, quen a traizoará a todos ao día seguinte. Se Iván o Tsarevich ou o Líder dos Ladróns atopan a Ra, poden invitar aos civís ou aos Ladróns ao seu lado, mentres que Iván non aceptará a negativa da Ra, pero o Líder non é tan esixente. Pero a princesa é bastante astuta, pode converterse nunha axente dobre, porque a pesar de que non pode gañar soa, esta é unha excelente oportunidade de gañar ouro, porque as posibilidades de sobrevivir ata o final do xogo aumentan moito. Durante o día, a Princesa Sapo finxe ser a Doncela Vermella e vota con todos xuntos.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Koschei o sen morte

Koschei o sen morte vive no seu castelo. Pola noite, percorre as aldeas dos arredores e zombiifica a Good Fellows e Red Maidens, que entran ao seu servizo e cumpren sen dúbida todas as ordes. Ao negarse a cumprir unha orde, por exemplo, a votar durante o día de forma diferente ao que dixo Koshchei ou a escribir mensaxes no chat durante o día se Koshchei o prohibía, o Servant de Koshchei morre. Así, Koschey é capaz de influír nos resultados das votacións durante o día, aínda que el mesmo non vota. Se Koshchei é asasinado, todas as súas vítimas tamén morren. Vasilisa pode curar ao Servant Koshchei, quen despois volve ao seu papel orixinal. A Serpe-Gorynych e o Lobo teñen unha inmunidade innata á zombificación, polo que Koschey, por moito que queira, non pode transformalos no seu servizo. O Lobo tamén pode axudar a Iván ou a Vasilisa a saír dos problemas sacrificándose. Salvado polo lobo adquire inmunidade do lobo á zombificación.

"Novas épicas". Para desenvolvedores, operarios e curiosos
Gato Baiyun

Gato Baiyun vive no bosque, caza pola noite. Durante o día dorme no seu oco, polo que non participa nas votacións. Non obstante, durante o día pode ser executado por maioría de votos. O gato pode atacar de dous xeitos: ronronear -e despois a súa vítima adormece e non pode camiñar pola noite, e non pode votar ao día seguinte- ou matar directamente con garras de ferro. Atacar con garras non funciona no Snake-Gorynych, e despois de atacar a Leshy, o gato pode quedar sen garras. Dashing non pode maldecir ao gato, que despois da maldición simplemente durmirá unha noite. Se alguén logra derrotar a Kota-Bayun, curarase de calquera enfermidade ou enfermidade, incluída a maldición de Likh. Esta habilidade Cat permanece co xogador ata o final do xogo. Os criados de Koshchei non poden votar polo Gato durante o día, pero poden descubrir indirectamente quen é o Gato sen informar a Koshchei sobre iso. Kot-Bayun non entra en alianzas con Ivan ou os Ladróns, polo que son o obxectivo principal de Kot.

Tecnoloxías empregadas

Para escribir o xogo, escollín a tecnoloxía informática sen servidor baseada en OpenFaaS, xa que é o suficientemente sinxela para organizar o xogo e, ao mesmo tempo, o suficientemente avanzada como para escribir regras de xogo complexas sen complicacións innecesarias. Tamén usarei un clúster de Kubernetes, xa que este método de implantación de aplicacións fai que sexa bastante sinxelo e fiable conseguir unha implementación rápida e a posibilidade de escalar facilmente. Para crear a lóxica do xogo, só podes saír adiante con OpenFaaS, pero tamén intentarei facer que o Storyteller sexa un contedor separado para comparar a complexidade da implementación. Como linguaxe de programación principal para microservizos e funcións, escollín Go, xa que levo moito tempo estudando no meu tempo libre para substituír Perl, e utilizarase js en función dun marco determinado para a interacción do usuario con microservizos e funcións. Falareino da decisión final no artigo correspondente da serie. Para comunicar as funcións entre si, escollín NATS.io, porque xa o atopara antes e ten unha integración bastante sinxela en Kubernetes.

Anuncio

  • Introdución
  • Configurar o ambiente de desenvolvemento, dividindo a tarefa en funcións
  • Traballo de backend
  • Traballo frontend
  • Creación do CICD, organización de probas
  • Inicia unha sesión de xogo de proba
  • Resultados de

Fonte: www.habr.com

Engadir un comentario