"Nuove epopee". Per sviluppatori, operatori e persone curiose

"Nuove epopee". Per sviluppatori, operatori e persone curiose

A causa delle numerose richieste da parte dei lettori, sta iniziando una nutrita serie di articoli sull'utilizzo della tecnologia serverless computing per sviluppare un'applicazione reale. Questo ciclo riguarderà lo sviluppo, il test e la distribuzione delle applicazioni agli utenti finali utilizzando strumenti moderni: architettura applicativa a microservizi (in versione serverless, basata su OpenFaaS), grappolo kubernetes per la distribuzione dell'applicazione, database MongoDB, incentrato sul clustering e sulle applicazioni cloud, nonché sul bus cloud NATS. L'applicazione implementa il gioco "Epics", una delle varianti del popolare gioco di società "Mafia".

Cosa sono gli "Epic"?

Questa è una variante del gioco "Mafia", noto anche come "Lupo mannaro". Si basa su un gioco di squadra in cui i partecipanti devono imparare passo dopo passo chi è chi e cercare di vincere. Sfortunatamente, quando si gioca online, una componente così importante del gioco come l'interazione personale scompare, e le regole della classica "Mafia" sono piuttosto semplici, quindi, per un gameplay più non lineare e interessante, di solito vengono aggiunti altri personaggi, ma in generale vengono preservate le caratteristiche principali della “mafia” originaria, ad esempio il cambio del giorno e della notte, gli spostamenti solo di notte, nonché le alleanze tra i partecipanti. Un'altra importante differenza tra il gioco online è che l'host (noto anche come Game Master, Storyteller) è solitamente un programma per computer.

Descrizione del gioco

Le regole del gioco che voglio implementare sono prese da un vecchio bot irc che ho salvato nel mio archivio personale circa 10 anni fa. Le "Epics" hanno un retroscena con cui inizia ogni gioco:

Nel lontano regno, nel trentesimo stato, al di là dei sette mari, vivevano e vivevano diversi villaggi, e in essi Bravi ragazzi и Belle ragazze. Seminarono il pane e andarono nella foresta circostante a raccogliere funghi e bacche... E questo continuò di secolo in secolo, finché una terribile catastrofe scosse la Terra e il male cominciò a diffondersi in tutto il mondo! Le notti divennero lunghe e fredde e nell'oscurità creature crudeli e terribili si aggiravano per la foresta e vagavano per il villaggio. Arrivato da qualche parte Snake Gorynych e prese l'abitudine di rapire le fanciulle rosse e di portare via tutto ciò di valore agli abitanti del villaggio. Dannoso e avido Baba Yaga, che volò su un mortaio da foreste lontane, confuse le menti degli abitanti, e persino alcuni abbandonarono il loro mestiere e andarono nella foresta a derubare, formando lì una banda. I cattivi si sono incontrati Goblin, che sapeva come trasformarsi in alberi e cespugli, iniziò a monitorare i pacifici abitanti dei villaggi e a servire i ladri, fiutando se i Bravi Ragazzi stavano tramando qualcosa per liberare i loro insediamenti dagli spiriti maligni. Bravi ragazzi e belle fanciulle, stanchi delle incursioni dei ladri e delle morti terribili per mano dei terribili Audace con un occhio solo, raccolse oro e invitò un famoso lottatore di una città vicina - Ivan Zarevic, che ha promesso di liberare il villaggio dai ladri. In una radura nella foresta, Ivan lo salvò da morte certa Lupo grigio, caduto nella trappola dei ladri. In cambio, il Lupo promise di informare lo Tsarevich sui vari spiriti maligni della foresta. È passato un famoso guaritore Vassilissa la Saggia, e quando vide problemi, rimase ad assistere i residenti che avevano sofferto gli attacchi degli affrettati. Dietro la foresta apparve un palazzo nero, nel quale, secondo le indiscrezioni, si stabilì Koschey l'Immortale, ogni notte visitava i villaggi e stregava i Bravi Ragazzi e le Fanciulle Rosse in modo che non osassero disobbedire ai suoi ordini, facessero tutto come aveva detto. E si stabilì nella foresta senza vita Gatto Baiyun, e tutti quelli che lo incontrarono si addormentarono dopo i suoi racconti o morirono a causa dei suoi artigli di ferro.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Regno molto lontano

Come puoi già vedere, i giocatori sono divisi in diversi gruppi:

  • civili (Good Fellows, Red Maidens, Ivan Tsarevich, Grey Wolf e Vasilisa the Wise)
  • ladri (i ladri stessi, così come Baba Yaga e Leshy)
  • indipendente (Snake-Gorynych, Dashing One-Eyed, Frog Princess, Koschey the Immortal, Cat-Bayun)

L'obiettivo del gioco, come accennato in precedenza, è rimanere in vita e vincere. Gli avversari devono lasciare il gioco in un modo o nell'altro e anche gli indipendenti devono rimanere in vita fino alla fine del gioco. Il gioco ha l'oro, una sorta di valuta di gioco che i giocatori guadagnano solo all'interno del gioco. I vincitori ricevono l'oro. Più oro, più alto sarà il punteggio del giocatore.

Mi soffermerò un po' più in dettaglio sulla descrizione dei personaggi.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Bravo ragazzo

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Fanciulla Rossa

Bravo ragazzo и Fanciulla Rossa - il ruolo più diffuso e principale nel gioco. Si tratta di civili che dormono di notte e lavorano di giorno. Di notte vengono attaccati da uno dei ladri, il Serpente Gorynych e altri ruoli, e Vasilisa la Saggia li guarisce. Con una piccola probabilità, il Bravo Ragazzo o la Fanciulla Rossa possono sopravvivere all'attacco senza danni (possibilmente perdendo oro nel processo), tuttavia, tutti riconosceranno il soprannome del giocatore il giorno successivo all'attacco. Di notte questi giocatori non effettuano alcuna mossa, ma analizzano la situazione di gioco in base ai messaggi presenti nella chat di gioco. Durante il giorno, questi giocatori decidono votando chi di loro non è il Bravo Ragazzo o la Fanciulla Rossa. Il giocatore votato dalla maggioranza degli altri giocatori lascia il gioco, i giocatori rimanenti ricevono o perdono oro. Se i giocatori non scelgono nessuno a maggioranza, nessun giocatore verrà giustiziato.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Ivan Tsarevich

Ivan Tsarevich - inizialmente un anonimo difensore dei civili. Di notte controlla i ruoli degli altri giocatori, poiché conosce solo uno dei suoi alleati: il Lupo Grigio. Con la partecipazione diretta del Lupo Grigio (che può anche controllare i ruoli degli altri giocatori), Ivan Tsarevich, invece di controllare, può uccidere un altro personaggio di notte. Se, come risultato del controllo, Ivan Tsarevich vede in un giocatore il ruolo di un bravo ragazzo o di una fanciulla rossa, allora può invitarlo a casa sua e presentarlo al lupo grigio e ad altri bravi compagni e fanciulle rosse. Ivan può subire le interferenze della Principessa Ranocchio, che può sedurlo di notte, senza rivelare il suo ruolo agli altri giocatori durante il giorno. Se Ivan stesso scopre la Principessa Rana, può invitarla a unirsi ai civili, ma se la Principessa rifiuta, morirà per mano di Ivan. Il Serpente-Gorynych può anche interferire con i controlli di Ivan-Tsarevich, ma, a differenza della Principessa Rana, durante il giorno dirà agli altri giocatori chi di loro è Ivan-Tsarevich. Durante il giorno, Ivan Tsarevich non è diverso dagli altri bravi ragazzi.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Lupo grigio

Lupo grigio - assistente di Ivan Tsarevich, il cui acuto senso dell'olfatto aiuta Ivan a trovare altri bravi ragazzi e fanciulle rosse. Lupo Grigio dice a questi giocatori chi è Ivan lo Zarevic e informa anche sugli altri giocatori con i ruoli di Bravi Ragazzi e Fanciulle Rosse. Se il Lupo scopre un ladro o un altro nemico, informa immediatamente Ivan Tsarevich in modo che possa agire la notte successiva. Se il lupo viene attaccato dalla principessa rana, si trasforma in un normale bravo ragazzo e non può controllare nessuno, e la principessa non saprà che in realtà era il lupo grigio, poiché il lupo non dorme di notte. Tuttavia, il Lupo stesso scoprirà durante il giorno quale dei giocatori è la Principessa Ranocchio e potrà provare a convincere il resto dei Bravi Ragazzi e delle Fanciulle Rosse, che ha portato a Ivan Tsarevich, a votare per l'esecuzione della Rana. Principessa. Anche la notte successiva, può provare a convincere in modo anonimo la Principessa Rana a schierarsi dalla parte dei civili in modo che non tocchi nessuno di loro. Il Lupo può sacrificarsi di notte per salvare Ivan Tsarevich o Vassilissa il Saggio, se presume che cadranno improvvisamente sotto l'attacco dei ladri, o che siano stati zombificati da Koshchei (il Lupo ha un'immunità innata al fascino di Koshchei), ma dopo il sacrificio di sé che il Lupo elimina dal gioco.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Vassilissa la Saggia

Vassilissa la Saggia - suona per i civili, ma loro non la conoscono, dato che Vasilisa è molto modesta. Inoltre, Vasilisa la Saggia, quando cura, non fa domande e, come un buon dottore, tratta tutti. Ma se Koschey, Likho o Leshy bevono la sua medicina, non vivranno più di un giorno, poiché Vasilisa cura solo le persone. Anche la medicina di Vasilisa la Saggia non aiuterà il serpente Gorynych o il Gatto-Bayun, ma non arrecheranno nemmeno danni. Inoltre, Kot-Bayun non tocca Vasilisa di notte, poiché Vasilisa non va nella Foresta Senza Vita per comprare erbe medicinali. Inoltre, il fascino femminile della Principessa Rana non funziona su Vasilisa. Se tentassero di uccidere la sua paziente due volte, la medicina sarebbe impotente. Vasilisa non ti salverà dagli attacchi magici, ad esempio dalla maledizione Dashing. Durante il giorno, Vasilisa si comporta come una Fanciulla Rossa, e solo uno sguardo fugace e leggermente triste può suggerire un po' che lei è la migliore guaritrice del Regno Lontano.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Rogue

ladri, a differenza di tutti i ruoli precedenti, si conoscono, poiché vivono nella stessa tana, e conoscono anche Leshy e Baba Yaga, quindi possono agire di concerto fin dalla prima mossa. Ma solo il capo della banda compie azioni di notte e non vota durante il giorno, mentre il resto dei ladri finge diligentemente di essere bravi ragazzi e fanciulle rosse. Se per qualsiasi motivo il Leader lascia il gioco, uno dei Ladri rimasti prende immediatamente il suo posto. Prima di tutto, i Ladri stanno cercando di disabilitare Ivan lo Tsarevich finché non avrà raccolto abbastanza forze da Bravi Ragazzi e Fanciulle Rosse per affrontare attivamente i Ladri durante il giorno.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
legno di goblin

legno di goblin di notte spia i Ladri, informandoli dei ruoli trovati nella loro Tana, ma di giorno non vota, poiché non abita nel villaggio. Tuttavia, altri giocatori possono votare per Leshy e quindi giustiziarlo. Poiché il Leshy proviene dalle paludi, non può essere sedotto dalla Principessa Rana e, se ci prova, il Leshy segnerà la sua casa e gli abitanti del villaggio scopriranno chi è veramente. Leshem non dovrebbe aver paura dell'incantesimo di Koshchei, ma Vasilisa può curarlo a morte. Se Kot-Bayun tenta di attaccare Leshy, rischia di perdere i suoi artigli di ferro, e quindi Kot dovrà far addormentare le vittime solo con le sue fusa.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Baba Yaga

Baba Yaga Collabora anche con i Ladri e lancia incantesimi di notte: può mandare malattie ad altri giocatori o proteggere uno dei suoi alleati dagli attacchi. La sua stregoneria è persino più forte della maledizione di Likh. Durante il giorno è attiva anche Baba Yaga: chiunque sia sotto la sua protezione non può essere giustiziato nemmeno con la maggioranza dei voti. Tuttavia, la fornitura di radici magiche per la protezione diurna è limitata, quindi Baba Yaga non può proteggere nessuno, inclusa se stessa, più di tre volte per partita. Durante il giorno, Baba Yaga finge di essere una normale Fanciulla Rossa e vota con tutti gli altri.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Drago

Drago di notte sorvola villaggi, foreste e paludi e si dedica a rapine, rivelando durante il giorno il ruolo dei derubati. Durante il giorno il Serpente dorme, quindi non vota, ma può essere giustiziato a maggioranza. Il serpente è molto pericoloso per tutti, soprattutto per i ladri e Ivan Tsarevich. Al serpente non importa chi deruba, ma se viene scoperto dal Lupo o dal Leshy può diventare un prezioso alleato. Se uccidi il serpente di notte, puoi, con una certa probabilità, ricevere un oggetto molto prezioso: la pelle di serpente, che proteggerà il suo proprietario una volta dagli attacchi fisici.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Notoriamente con un occhio solo

Notoriamente con un occhio solo di notte uccide chiunque si metta sulla sua strada, e chiunque non possa uccidere (Leshy, Kota-Bayun o il Serpente Gorynych) maledice, in modo che chiunque tenti di comunicare con il dannato quella stessa notte morirà durante il giorno . Anche il dannato muore in questo caso, non muore solo Kot-Bayun, che va semplicemente a letto per prendere forza, saltando il suo turno la notte successiva. Solo Baba Yaga può salvare Likh dalla maledizione. La maledizione non colpisce chi ha sconfitto il Gatto-Bayun: lui, come il Gatto, va semplicemente a letto e salta il turno.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
La principessa rana

La principessa rana non può vincere la partita, ma può guadagnare un sacco di soldi seducendo altri giocatori di notte. Il tentato perde il suo turno. La rana non può sedurre Vasilisa la Saggia, e dovrebbe anche evitare Leshy, che la tradirà davanti a tutti il ​​giorno successivo. Se Ivan lo Zarevic o il Capo dei Ladri trovano la Rana, possono invitare i civili o i Ladri al loro fianco, mentre Ivan non accetterà il rifiuto della Rana, ma il Capo non è così schizzinoso. Ma la principessa è piuttosto astuta, può diventare una doppia agente, perché nonostante non possa vincere da sola, questa è un'ottima occasione per guadagnare oro, perché le possibilità di sopravvivere fino alla fine del gioco aumentano notevolmente! Durante il giorno, la Principessa Ranocchio finge di essere la Fanciulla Rossa e vota insieme a tutti.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Koschey l'Immortale

Koschey l'Immortale vive nel suo castello. Di notte, cammina per i villaggi circostanti e zombifica Good Fellows e Red Maidens, che vengono al suo servizio ed eseguono senza dubbio tutti gli ordini. Se si rifiuta di eseguire un ordine, ad esempio di votare durante il giorno diversamente da quanto detto da Koshchei, o di scrivere messaggi nella chat durante il giorno se Koshchei lo vieta, il Servo di Koshchei muore. Koschey può quindi influenzare i risultati delle votazioni durante il giorno, anche se lui stesso non vota. Se Koshchei viene ucciso, moriranno anche tutte le sue vittime. Vasilisa può curare il servitore Koshchei, che poi ritorna al suo ruolo originale. Il Serpente-Gorynych e il Lupo hanno un'immunità innata alla zombificazione, quindi Koschey, non importa quanto voglia, non può trasformarli al suo servizio. Il Lupo può anche aiutare Ivan o Vasilisa a uscire dai guai sacrificando se stesso. Salvato dal Lupo acquisisce l'immunità del Lupo alla zombificazione.

"Nuove epopee". Per sviluppatori, operatori e persone curiose
Gatto Baiyun

Gatto Baiyun vive nella foresta, caccia di notte. Durante il giorno dorme nella sua cavità, quindi non partecipa alle votazioni. Tuttavia, durante il giorno può essere giustiziato a maggioranza. Il gatto può attaccare in due modi: facendo le fusa - e poi la sua vittima si addormenta e non può camminare di notte, e non può votare il giorno successivo - o uccidere direttamente con artigli di ferro. Attaccare con gli artigli non funziona sul Serpente-Gorynych e, dopo aver attaccato Leshy, il gatto potrebbe rimanere senza artigli! Dashing non può maledire il Gatto, che dopo la maledizione dormirà semplicemente per una notte. Se qualcuno riesce a sconfiggere Kota-Bayun, sarà curato da qualsiasi malattia o malattia, inclusa la maledizione di Likh. Questa abilità del gatto rimane con il giocatore fino alla fine del gioco. I servi di Koshchei non possono votare per il Gatto durante il giorno, ma possono scoprire indirettamente chi è il Gatto senza informarne Koshchei. Kot-Bayun non stringe alleanze con Ivan o i ladri, quindi sono l'obiettivo principale di Kot.

Tecnologie utilizzate

Per scrivere il gioco, ho scelto la tecnologia serverless computing basata su OpenFaaS, poiché è abbastanza semplice da organizzare il gioco e allo stesso tempo abbastanza avanzata da scrivere regole di gioco complesse senza inutili complicazioni. Utilizzerò anche un cluster Kubernetes, poiché questo metodo di distribuzione delle applicazioni rende abbastanza semplice e affidabile ottenere una distribuzione rapida e la possibilità di scalare facilmente. Per creare la logica del gioco puoi farcela solo con OpenFaaS, ma cercherò anche di rendere Storyteller un contenitore separato per confrontare la complessità dell'implementazione. Come linguaggio di programmazione principale per microservizi e funzioni, ho scelto Go, poiché lo studio da molto tempo nel mio tempo libero per sostituire Perl, e js verrà utilizzato sulla base di un determinato framework per l'interazione dell'utente con microservizi e funzioni. Vi parlerò della decisione finale nell'articolo corrispondente della serie. Per comunicare le funzioni tra loro, ho scelto NATS.io, perché lo avevo già incontrato prima e si integra abbastanza facilmente in Kubernetes.

annuncio

  • Introduzione
  • Impostazione dell'ambiente di sviluppo, scomposizione del compito in funzioni
  • Lavoro di back-end
  • Lavoro frontend
  • Impostazione del CICD, organizzazione dei test
  • Avvia una sessione di gioco di prova
  • Risultati di

Fonte: habr.com

Aggiungi un commento