«Nuove Byliny». Per dev, ops e persone curiose

«Nuove Byliny». Per dev, ops e persone curiose

Su richiesta di numerosi lettori, inizia un grande ciclo di articoli sull'applicazione della tecnologia di calcolo serverless per lo sviluppo di un'applicazione reale. In questo ciclo verrà trattato lo sviluppo dell'applicazione, il testing e la fornitura agli utenti finali utilizzando strumenti moderni: architettura a microservizi dell'applicazione (nella variante serverless, basata su OpenFaaS), cluster kubernetes per il deployment dell'applicazione, database MongoDB, orientato alla clusterizzazione e all'applicazione cloud, nonché a un bus cloud NATS. L'applicazione realizza il gioco "Byliny", una delle varianti del popolare gioco da salotto "Mafia".

Cos'è "Byliny"?

È una variante del gioco "Mafia", noto anche come "Werewolf". Alla base c'è un gioco di squadra in cui i partecipanti devono scoprire passo dopo passo chi è chi e cercare di vincere. Purtroppo, quando si gioca online, manca un elemento così importante del gioco, come l'interazione personale, e le regole classiche della "Mafia" sono piuttosto semplici, quindi di solito vengono aggiunti altri personaggi per un'esperienza di gioco più non lineare e interessante, ma nel complesso si mantengono le caratteristiche principali della "Mafia" originale, come il cambio di giorno e notte, i turni solo di notte e alleanze tra i partecipanti. Un'altra importante differenza del gioco online è che il conduttore (anche chiamato Maestro del gioco, Narratore) solitamente è un programma informatico.

Descrizione del gioco

Le regole del gioco che voglio realizzare provengono da un vecchio bot IRC, che ho conservato nel mio archivio personale circa 10 anni fa. "Byliny" ha una premessa, che segna l'inizio di ogni partita:

Nel trentatreesimo regno, nel trentaduesimo stato, oltre sette mari, vivevano e prosperavano diversi villaggi, in cui Giovani valorosi e Belle fanciulle. Sembravano un raccolto e si recavano nel bosco circostante a cercare funghi e frutti… E così andò per secoli, finché una terribile catastrofe non colpì la Terra e il male cominciò a diffondersi nel mondo! Le notti divennero lunghe e fredde, e nell'oscurità si aggiravano nel bosco e arrivavano nel villaggio creature maligne e spaventose. Arrivò da qualche parte Zmey Gorynych e cominciò a rapire le Belle fanciulle e a rubare tutto ciò che era prezioso per i contadini. Malefica e avida Baba Yaga, atterrata sulla scopa dai lontani boschi, turbò la mente degli abitanti, e alcuni abbandonarono il mestiere e andarono nel bosco a fare i briganti, formando un gruppo. I malviventi incontrarono Lo Spirito del Bosco, capace di trasformarsi in alberi e cespugli, cominciò a sorvegliare i pacifici contadini e a servire i briganti, spiando se i Bravi Giovani stessero progettando di liberare i loro insediamenti dal male. I Bravi Giovani e le Belle Donne, stufi delle razzie dei briganti e delle terribili morti per mano del Malvagio Unocchio, raccolsero oro e invitarono dalla città vicina un famoso guerriero — Ivan Tsarevich, che promise di liberare il villaggio dai briganti. In una radura nel bosco, Ivan salvò da una morte imminente Il Lupo Grigio, caduto in una trappola dei briganti. In cambio, il Lupo promise di informare il Tsarevich sulle varie creature maligne del bosco. Passò di lì una famosa guaritrice Vasilisa la Saggia, e quando vide la sventura — decise di prendersi cura degli abitanti colpiti dagli attacchi dei malvagi. Oltre il bosco apparve un palazzo nero, in cui, secondo le voci, si era sistemato Koschei l'Immortale, che ogni notte visitava i villaggi incantando i Bravi Giovani e le Belle Donne, affinché non osassero disobbedire ai suoi ordini, tutti facevano come diceva. E nella Foresta Inanimata si era stabilito Il Gatto-Bayun, e chiunque lo incontrava si addormentava in un sonno profondo dopo le sue favole o moriva per le sue unghie d'acciaio.

«Nuove Byliny». Per dev, ops e persone curiose
Il Regno dei Tre Cattivi

Come già visibile, i giocatori si dividono in diversi gruppi:

  • i pacifici abitanti (Bravi Giovani, Belle Donne, Ivan Tsarevich, Lupo Grigio e Vasilisa la Saggia)
  • i briganti (i veri briganti, oltre a Baba Yaga e Lo Spirito del Bosco)
  • indipendenti (Zmej Gorynych, Malvagio Unocchio, La Principessa Rana, Koschei l'Immortale, Il Gatto-Bayun)

L'obiettivo del gioco, come già detto, è rimanere in vita e vincere. I nemici devono in un modo o nell'altro uscire dal gioco, mentre gli indipendenti devono anch'essi rimanere in vita fino alla fine. Nel gioco c'è dell'oro, una sorta di valuta di gioco, che i giocatori guadagnano solo all'interno del gioco. I vincitori ricevono oro. Più oro si ha, più alto è il punteggio del giocatore.

Fermiamoci un momento per descrivere i personaggi in dettaglio.

«Nuove Byliny». Per dev, ops e persone curiose
Bravo Giovane

«Nuove Byliny». Per dev, ops e persone curiose
Bella Donna

Bravo Giovane e Bella Donna — il ruolo più comune e principale nel gioco. Sono i cittadini comuni che di notte dormono e di giorno lavorano. Di notte, vengono attaccati da alcuni dei ladri, Zmei Gorynych e altri ruoli, mentre Vasilisa la Saggia li cura. Con una piccola probabilità, il Buon Giovane o la Bella Rossa possono sopravvivere all'attacco senza subire danni (forse perdendo del oro), ma tutti scoprono il soprannome del giocatore il giorno successivo all'attacco. Di notte, questi giocatori non fanno alcuna mossa, ma analizzano la situazione di gioco basandosi sui messaggi nella chat di gioco. Durante il giorno, questi giocatori decidono tramite votazione chi di loro non è un Buon Giovane o una Bella Rossa. Il giocatore che riceve il maggior numero di voti dagli altri giocatori esce dal gioco; i rimanenti guadagnano o perdono oro. Se i giocatori non scelgono nessuno con la maggioranza dei voti, nessuno dei giocatori verrà giustiziato.

«Nuove Byliny». Per dev, ops e persone curiose
Ivan Tsarevich

Ivan Tsarevich — inizialmente un difensore anonimo dei cittadini. Di notte controlla i ruoli degli altri giocatori, poiché conosce solo un alleato — il Lupo Grigio. Con il diretto intervento del Lupo Grigio (che può anche controllare i ruoli degli altri giocatori) Ivan Tsarevich, invece di controllare, può uccidere un altro personaggio durante la notte. Se a seguito del controllo Ivan Tsarevich vede il ruolo del Buon Giovane o della Bella Rossa in un giocatore, può invitarli a unirsi a lui e presentarli al Lupo Grigio e agli altri Buoni Giovani e Belle Rosse. Ivan può essere ostacolato dalla Principessa Ranocchio, che può sedurlo di notte senza rivelare il suo ruolo agli altri giocatori durante il giorno. Se Ivan scopre da solo la Principessa Ranocchio, può offrirle di unirsi ai cittadini, ma se la Principessa rifiuta, muore per mano di Ivan. Zmei Gorynych può anche ostacolare i controlli di Ivan Tsarevich, ma, a differenza della Principessa Ranocchio, di giorno rivelerà agli altri giocatori chi di loro è Ivan Tsarevich. Durante il giorno, Ivan Tsarevich non si distingue dagli altri Buoni Giovani.

«Nuove Byliny». Per dev, ops e persone curiose
Lupo Grigio

Lupo Grigio — assistente di Ivan Tsarevich, il cui fiuto acuto aiuta Ivan a trovare altri Buoni Giovani e Belle Rosse. Il Lupo Grigio informa questi giocatori su chi sia Ivan Tsarevich e comunica anche riguardo agli altri giocatori con ruoli di Buoni Giovani e Belle Rosse. Se il Lupo scopre un brigante o un'altra minaccia, informa immediatamente Ivan Tsarevich affinché prenda provvedimenti la notte successiva. Se la Principessa Rana attacca il Lupo, egli si trasforma in un normale Buon Giovane e non può verificare nessuno, e la Principessa non saprà che in realtà era il Lupo Grigio, poiché il Lupo non dorme di notte. Tuttavia, il Lupo stesso di giorno scopre chi tra i giocatori è la Principessa Rana e può cercare di convincere gli altri Buoni Giovani e Belle Rosse, che ha portato a Ivan Tsarevich, a votare per l'esecuzione della Principessa Rana. Inoltre, la notte successiva può tentare di persuadere in modo anonimo la Principessa Rana a schierarsi dalla parte dei cittadini pacifici, affinché non faccia del male a nessuno di loro. Di notte, il Lupo può anche sacrificarsi per salvare Ivan Tsarevich o Vasilisa la Saggia, se teme che possano essere attaccati dai briganti o che siano stati zombificati da Koschei (il Lupo ha un'immunità innata agli incantesimi di Koschei), ma dopo il sacrificio il Lupo esce dal gioco.

«Nuove Byliny». Per dev, ops e persone curiose
Vasilisa la Saggia

Vasilisa la Saggia — gioca per i cittadini pacifici, ma non sanno di lei, poiché Vasilisa è molto riservata. Inoltre, Vasilisa la Saggia, quando cura, non fa domande e come un buon dottore cura tutti indiscriminatamente. Ma se il suo farmaco viene assunto da Koschei, Licho o Leshiy — non vivranno più di un giorno, poiché Vasilisa cura solo le persone. L'idra Gorynych o il Gatto Bayun non trarranno beneficio dai rimedi di Vasilisa la Saggia, ma non subiranno nemmeno danni. Inoltre, di notte il Gatto Bayun non disturba Vasilisa, poiché non va nel Bosco Senza Vita per raccogliere erbe medicinali. Inoltre, gli incantesimi femminili della Principessa Rana non hanno effetto su Vasilisa. Se il suo paziente viene attaccato due volte, la medicina risulterà impotente. Vasilisa non salverà nemmeno da attacchi magici, come la maledizione di Licho. Durante il giorno, Vasilisa si comporta come una Bella Rossa, e solo uno sguardo fugace e leggermente triste può suggerire che è la migliore guaritrice del Tredicesimo Regno.

«Nuove Byliny». Per dev, ops e persone curiose
Brigante

Briganti, a differenza di tutti i ruoli precedenti, si conoscono, poiché vivono nello stesso Covi, e conoscono anche il Leslie e la Baba Jaga, quindi possono agire in modo coordinato sin dal primo turno. Ma solo il Capobanda compie azioni di notte e non vota di giorno, mentre gli altri Banditi si fingono implacabilmente Bravi Giovani e Belle Donne Rosse. Se il Capobanda viene eliminato per qualche motivo, il suo posto viene subito occupato da uno dei Banditi rimasti. In primo luogo, i Banditi cercano di neutralizzare Ivan Tsarevic, prima che riesca a raccogliere abbastanza forze dai Bravi Giovani e dalle Belle Donne Rosse per contrastare attivamente i Banditi di giorno.

«Nuove Byliny». Per dev, ops e persone curiose
Leslie

Leslie spia di notte per i Banditi, comunicando loro i ruoli trovati nel loro Covi, ma di giorno non vota, poiché non vive nel villaggio. Tuttavia, altri giocatori possono votare per il Leslie e, in questo modo, farlo giustiziare. Poiché il Leslie proviene dalle paludi, non può essere sedotto dalla Principessa Rana e, se ci prova, il Leslie marcherà la sua casa, e gli abitanti del villaggio scopriranno chi è realmente. Non dovrebbe preoccuparsi dei sortilegi di Koschey, ma Vasilisa potrebbe guarirlo fino alla morte. Se il Gatto-Baun cerca di attaccare il Leslie, rischia di perdere i suoi artigli di ferro, e poi il Gatto dovrà addormentare le vittime solo con il suo purrr.

«Nuove Byliny». Per dev, ops e persone curiose
Baba Yaga

Baba Yaga lavora anche insieme ai Banditi, di notte usa la magia: può inviare una malattia ad altri giocatori o proteggere qualcuno dei suoi alleati da un attacco. La sua magia è addirittura più potente della maledizione di un Lich. Di giorno, Baba Jaga è anche attiva: chi è sotto la sua protezione non può essere giustiziato, neppure con la maggioranza dei voti. Tuttavia, le scorte di radici magiche per la protezione diurna sono limitate, quindi Baba Jaga non può proteggere qualcuno, neppure se stessa, più di tre volte durante il gioco. Durante il giorno, Baba Jaga si finge una normale Bella Donna Rossa e vota insieme a tutti.

«Nuove Byliny». Per dev, ops e persone curiose
Zmej Gorynych

Zmej Gorynych di notte vola sopra villaggi, foreste e paludi, impegnandosi in rapine e rivelando durante il giorno il ruolo della vittima. Di giorno il Serpente dorme, quindi non vota, ma può essere condannato dalla maggioranza. Il Serpente è molto pericoloso per tutti, specialmente per i Ladri e Ivan Tsarevich. Al Serpente non importa chi derubare, ma se il Lupo o il Leshy lo rivelano, può diventare un prezioso alleato. Se si uccide il Serpente di notte, si può avere una probabilità di ottenere un oggetto molto prezioso: la Pelle del Serpente, che proteggerà il suo possessore una volta da un attacco fisico.

«Nuove Byliny». Per dev, ops e persone curiose
Il Furioso Occhio Unico

Il Furioso Occhio Unico di notte uccide tutti coloro che si trovano sulla sua strada, e quelli che non può uccidere (il Leshy, il Gatto-Bajun o il Serpente Gorynych) li maledice, così chiunque tenti di comunicare con il maledetto quella notte morirà entro il giorno. Il maledetto stesso muore, fatta eccezione per il Gatto-Bajun, che semplicemente si mette a dormire per riacquistare energie, saltando il turno della notte successiva. Solo Baba-Yaga può salvare dalla maledizione del Furioso. La maledizione non colpisce chi ha sconfitto il Gatto-Bajun: egli, come il Gatto, si sdraia semplicemente a dormire saltando il turno.

«Nuove Byliny». Per dev, ops e persone curiose
La Principessa-Rana

La Principessa-Rana non può vincere nel gioco, ma può guadagnare molti soldi seducendo gli altri giocatori di notte. Chi viene sedotto salta il turno. La Rana non può sedurre Vasilisa la Saggia e dovrebbe anche evitare il Leshy, che la tradirà a tutti il giorno successivo. Se Ivan Tsarevich o il Capo dei Ladri trovano la Rana, possono invitarla dalla parte dei pacifici o dei Ladri; Ivan non accetta il rifiuto della Rana, mentre il Capo non è così esigente. Ma la Principessa è abbastanza astuta da poter diventare un doppio agente, poiché, nonostante non possa vincere da sola, ha una grande opportunità di accumulare oro, poiché le probabilità di arrivare fino alla fine del gioco aumentano significativamente! Di giorno, la Principessa-Rana si finge una Bella Fanciulla Rossa e vota con tutti.

«Nuove Byliny». Per dev, ops e persone curiose
Koschei l'Immortale

Koschei l'Immortale vive nel suo castello. Di notte si aggira nei villaggi vicini e zomobia gli Uomini Buoni e le Belle Rosse, che passano al suo servizio e obbediscono a tutte le sue richieste. Rifiutarsi di eseguire un ordine, ad esempio votare in modo diverso durante il giorno, rispetto a quanto detto da Koci, o scrivere messaggi durante il giorno nella chat, se Koci lo ha vietato, porta alla morte del Servitore di Koci. In questo modo, Koci è in grado di influenzare i risultati delle votazioni durante il giorno, anche se non vota di persona. Se Koci viene ucciso, tutte le sue vittime muoiono anch'esse. Vasilisa può guarire il Servitore di Koci, che poi ritorna al suo ruolo originale. Zmej-Gorynych e il Lupo hanno un'immunità innata allo zombismo, quindi Koci, per quanto ci provi, non può costringerli al suo servizio. Inoltre, il Lupo può salvare Ivan o Vasilisa, sacrificandosi. Gli individui salvati dal Lupo acquisiscono l'Immunità del Lupo allo zombismo.

«Nuove Byliny». Per dev, ops e persone curiose
Il Gatto-Bayun

Il Gatto-Bayun vive nella foresta, di notte caccia. Di giorno dorme nel suo tronco, quindi non partecipa alle votazioni. Tuttavia, di giorno può essere condannato da una maggioranza di voti. Il Gatto può attaccare in due modi: facendo le fusa — e in tal modo la sua vittima si addormenta e non può camminare di notte, né votare il giorno successivo — oppure uccidendo immediatamente con artigli di ferro. L'attacco con gli artigli non funziona su Zmej-Gorynych e, attaccando Leshy, il Gatto potrebbe persino rimanere senza artigli! Lich non può maledire il Gatto, che dopo la maledizione semplicemente dormirà per una notte. Se qualcuno riesce a sconfiggere il Gatto-Bayun, sarà curato da qualsiasi malattia e malanno, inclusa la maledizione di Lich. Questa abilità del Gatto resta con il giocatore fino alla fine del gioco. I Servitori di Koci non possono votare per il Gatto durante il giorno, ma possono scoprire indirettamente chi è il Gatto, senza informare Koci. Gatto-Bayun non forma alleanze con Ivan o i Briganti, quindi per il Gatto sono il bersaglio principale.

Tecnologie utilizzate

Per scrivere il gioco, ho scelto la tecnologia di calcolo serverless basata su OpenFaaS, poiché è abbastanza semplice per organizzare il gioco e, al tempo stesso, sufficientemente sviluppata per scrivere regole di gioco complesse senza complicare eccessivamente. Userò anche un cluster Kubernetes, poiché questo metodo di distribuzione delle applicazioni consente un rapido e affidabile deploy con la possibilità di scalare facilmente. Per creare la logica di gioco, posso fare affidamento solo su OpenFaaS, tuttavia proverò anche a realizzare il Narratore come un contenitore separato, per confrontare la complessità di implementazione. Come linguaggio principale per i microservizi e le funzioni, ho scelto Go, poiché lo studio già da tempo nel mio tempo libero in sostituzione di Perl, e per le interazioni degli utenti con i microservizi e le funzioni verrà utilizzato js basato su un certo framework. Condividerò la decisione finale in un articolo dedicato. Per la comunicazione tra le funzioni, ho scelto NATS.io, poiché ci sono già interagito in precedenza e ha un'integrazione abbastanza semplice in Kubernetes.

Annuncio

  • Introduzione
  • Installazione dell'ambiente di sviluppo, suddivisione del compito in funzioni
  • Lavori sul backend
  • Lavori sul frontend
  • Configurazione del CICD, organizzazione dei test
  • Avvio di una sessione di prova del gioco
  • Conclusioni

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster