«Legende Noi». Pentru dev, ops și persoane curioase

«Legende Noi». Pentru dev, ops și persoane curioase

La cererea numeroasă a cititorilor, începe un mare ciclu de articole despre utilizarea tehnologiei de calcul fără servere pentru dezvoltarea unei aplicații reale. În acest ciclu vor fi discutate dezvoltarea aplicației, testarea și livrarea către utilizatorii finali cu ajutorul celor mai moderne instrumente: arhitectura de microservicii a aplicației (în varianta serverless, bazată pe OpenFaaS), clusterul kubernetes pentru desfășurarea aplicației, baza de date MongoDB, orientată spre clustering și aplicare în cloud și, de asemenea, către un bus de cloud NATS. Aplicația implementează jocul „Bîline”, o variantă a popularului joc de salon „Mafia”.

Ce este „Bîline”?

Este o variantă a jocului „Mafia”, cunoscut și sub numele de „Werewolf”. Se bazează pe un joc de echipă, în care participanții trebuie pas cu pas să descopere cine este cine și să încerce să câștige. Din păcate, atunci când se joacă online, o parte importantă a jocului, interacțiunea personală, se pierde, iar regulile clasice ale „Mafiei” sunt destul de simple, așa că pentru un proces de joc mai neliniar și interesant, de obicei se adaugă alte personaje, dar în general se păstrează trăsăturile principale ale originalei „Mafii”, cum ar fi alternarea între zi și noapte, mutările doar noaptea, precum și alianțele între participanți. De asemenea, un aspect important în jocul online este că prezentatorul (de asemenea, Maestrul jocului, Povestitorul) este de obicei un program de calculator.

Descrierea jocului

Regulile jocului, pe care vreau să-l realizez, sunt preluate dintr-un vechi bot IRC pe care l-am păstrat în arhiva personală acum 10 ani. „Bîline” are o poveste de fundal, care începe fiecare joc:

În regatul de dincolo, în statul de dincolo, după șapte mări, trăiau câteva sătucuri, iar în ele Băieți buni și Fete frumoase. Ei semănau grâu și mergeau în pădurile din jur după ciuperci și fructe de pădure... Și așa a continuat din veac în veac, până când o catastrofă teribilă a zguduit Pământul și răul a început să se răspândească în lume! Nopțile au devenit lungi și reci, iar în întuneric se strecurau prin pădure și intrau în sat ființe rele și înfricoșătoare. A apărut dintr-un loc Zmeul Gorynych și a început să fure fete frumoase și să ia tot ce era valoros de la săteni. O femeie vicleană și zgârcită Baba Yaga, venind pe o mătură din pădurile îndepărtate, a tulburat mințile localnicilor, iar unii au abandonat meșteșugurile și au plecat în pădure să se apuce de tâlhărie, formând o gașcă. Tâlharii au întâlnit Lilith, care știa să se transforme în copaci și arbuști, el a început să observe țăranilor pașnici și să slujească hoților, răscolind informații dacă eroii drepți intenționează să salveze așezările lor de necuratul. Eroii drepți și fetele roșii, sătui de raidurile tâlharilor și de morțile teribile în mâinile lui Lihodaiu cu un ochi, au adunat aur și l-au invitat din orașul vecin pe cunoscutul luptător — Ivan Țarevici, care a promis să scape satul de tâlhari. Pe poiana din pădure, Ivan l-a salvat de la moarte iminentă pe Lupul Gri, care căzuse într-o capcană a tâlharilor. În schimb, Lupul a promis să-l informeze pe Țarevici despre diversele necurățenii din pădure. O cunoscută vrăjitoare Vasilisa înțeleaptă, iar când a văzut necazul — a rămas să aibă grijă de locuitori, afectați de atacurile răufăcătorilor. Dincolo de pădure a apărut un palat negru, în care, după zvonuri, s-a stabilit Koshchei Nemuritorul, care noaptea vizita satele și îi încântat pe Eroii Drepți și pe Fetele Roșii, astfel încât ei să nu cuteze să-i nesocotească poruncile, toți făceau așa cum le decía. Și în Pădurea Fără Viață s-a stabilit Pisica Bayun, iar fiecare care îl întâlnea adormea într-un somn adânc după poveștile lui sau muri de ghearele lui de fier.

«Legende Noi». Pentru dev, ops și persoane curioase
Trei regate

După cum se poate observa, jucătorii sunt împărțiți în mai multe grupuri:

  • cetățeni pașnici (Eroii Drepți, Fetele Roșii, Ivan Țarevici, Lupul Gri și Vasilisa înțeleaptă)
  • tâlhari (tâlharii propriu-zis, precum și Baba Yaga și Lihodaiul)
  • independenți (Zmeu-Gorynych, Lihodaiu cu un ochi, Țarina-Broscă, Koshchei Nemuritorul, Pisica Bayun)

Scopul jocului, așa cum s-a spus mai sus, este să rămână în viață și să câștige. Inamicii trebuie să părăsească jocul într-un fel sau altul, iar independenții de asemenea trebuie să rămână în viață până la finalul jocului. În joc există aur, un tip de monedă virtuală pe care jucătorii o câștigă doar în interiorul jocului. Cei care câștigă primesc aur. Cu cât ai mai mult aur, cu atât ratingul jucătorului este mai ridicat.

Voi detalia puțin mai mult descrierea personajelor.

«Legende Noi». Pentru dev, ops și persoane curioase
Eroul Drept

«Legende Noi». Pentru dev, ops și persoane curioase
Fata Roșie

Eroul Drept și Fata Roșie — rolul cel mai comun și principal în joc. Aceștia sunt cetățeni pașnici care dorm noaptea și muncesc ziua. Noaptea, aceștia sunt atacați de unii dintre răufăcători, Zmeul Gorynych și alte roluri, iar Vasilisa Prekrasnaya îi vindecă. Cu o probabilitate mică, Băiatul Bun sau Fata Roșie pot supraviețui atacului fără daune (poate pierzând aur), însă toți află pseudonimul jucătorului în dimineața următoare atacului. Noaptea, acești jucători nu fac niciun fel de mutări, ci analizează situația de joc, pe baza mesajelor din chatul de joc. În timpul zilei, acești jucători decid prin vot cine dintre ei nu este Băiat Bun sau Fata Roșie. Jucătorul pentru care a votat majoritatea celorlalți jucători iese din joc, iar cei rămași primesc sau pierd aur. Dacă jucătorii nu aleg pe nimeni cu majoritatea voturilor, nimeni dintre jucători nu va fi executat.

«Legende Noi». Pentru dev, ops și persoane curioase
Ivan Țarevici

Ivan Țarevici — inițial un apărător anonim al cetățenilor pașnici. Noaptea, verifică rolurile altor jucători, deoarece știe doar unul dintre aliații săi — Lupul Cenușiu. Cu participarea directă a Lupului Cenușiu (care poate verifica, de asemenea, rolurile altor jucători), Ivan Țarevici, în loc de verificare, poate ucide un alt personaj. Dacă în urma verificării Ivan Țarevici vede rolul Băiatului Bun sau al Fetei Roșii la un jucător, poate să-i invite pe aceștia la el și să-i prezinte Lupului Cenușiu și altor Băieți Buni și Fete Roșii. Ivan poate fi împiedicat de Țarina Broască, care îl poate seduce noaptea, fără să dezvăluie rolul său altor jucători în timpul zilei. Dacă Ivan descoperă el însuși Țarina Broască, îi poate propune să se alăture cetățenilor pașnici, dar dacă Țarina refuză, ea moare din mâna lui Ivan. Zmeul Gorynych poate de asemenea să împiedice verificările lui Ivan Țarevici, însă, spre deosebire de Țarina Broască, ziua el le va spune celorlalți jucători cine dintre ei este Ivan Țarevici. În timpul zilei, Ivan Țarevici nu se deosebește de ceilalți Băieți Buni.

«Legende Noi». Pentru dev, ops și persoane curioase
Lupul Cenușiu

Lupul Cenușiu — asistentul lui Ivan Țarevici, a cărui intuiție ascuțită îl ajută pe Ivan să găsească alți Buni Tineri și Fete Roșii. Lupul Gri le spune acestor jucători cine este Ivan Țarevici, și le comunică despre ceilalți jucători cu roluri de Buni Tineri și Fete Roșii. Dacă Lupul descoperă un hoț sau un alt dușman, îi comunică imediat lui Ivan Țarevici, astfel încât acesta să poată lua măsuri în noaptea următoare. Dacă prințesa-Șopârlă atacă Lupul, acesta se transformă într-un simplu Băiat Bun și nu poate verifica pe cineva, iar prințesa nu va realiza că a fost de fapt Lupul Gri, deoarece acesta nu doarme noaptea. Totuși, Lupul în timpul zilei află cine dintre jucători este prințesa-Șopârlă și poate încerca să îi convingă pe ceilalți Buni Tineri și Fete Roșii pe care i-a adus lui Ivan Țarevici să voteze pentru execuția prințesei-Șopârlă. De asemenea, în noaptea următoare poate încerca să o convingă anonim pe prințesa-Șopârlă să se alăture celor pașnici, astfel încât să nu le facă rău. Lupul poate să se sacrifice noaptea pentru a-l salva pe Ivan Țarevici sau pe Vasilisa înțeleapta, dacă bănuiește că aceștia urmează să fie atacați de hoți, sau au fost zombificați de Kocie, deoarece Lupul are imunitate înnăscută la vrăjile lui Kocie, dar după autoconducerea lui, Lupul iese din joc.

«Legende Noi». Pentru dev, ops și persoane curioase
Vasilisa înțeleaptă

Vasilisa înțeleaptă — joacă de partea celor pașnici, însă aceștia nu știu despre ea, deoarece Vasilisa este foarte timidă. De asemenea, Vasilisa înțeleapta, atunci când tratează, nu pune întrebări și ca un doctor bun, îi tratează pe toți fără discriminare. Dar dacă Kocie, Liho sau Leșii beau medicamentele ei — nu le va mai rămâne decât o zi de trăit, deoarece Vasilisa tratează doar oamenii. Zmeului Gorynych și Pisicii-Baiun medicamentele Vasilisei nu le vor fi de ajutor, dar nici nu vor face rău. De asemenea, noaptea, Pisica-Baiun nu o deranjează pe Vasilisa, deoarece ea nu merge în Pădurea Fără Viață pentru plantele vindecătoare. În plus, farmecele feminine ale prințesei-Șopârlă nu au efect asupra Vasilisei. Dacă pacientul ei este atacat de două ori, medicina va fi inutilă. Vasilisa nu va salva de atacuri magice, cum ar fi blestemul lui Liho. În timpul zilei, Vasilisa se comportă ca o Fata Roșie, iar doar o privire trecătoare, ușor tristă, ar putea să sugereze că ea este cel mai bun healer din regatul lui Tridevieu.

«Legende Noi». Pentru dev, ops și persoane curioase
Hoț

Hoți, spre deosebire de toate celelalte roluri, se cunosc între ei, deoarece trăiesc în aceeași Peșteră și îl cunosc pe Făcătorul de Nori și pe Baba Iaga, astfel încât pot acționa coordonat încă din prima mișcare. Numai că Liderul bandei își desfășoară acțiunile noaptea și nu votează ziua, în timp ce restul Haiducilor se prefac cu grijă în Oameni Buni și Fete Roșii. Dacă Liderul este eliminat din joc din orice motiv, locul său este imediat ocupat de unul dintre Haiducii rămași. În primul rând, Haiducii încearcă să-l neutralizeze pe Ivan Țarevici, înainte ca acesta să adune suficiente forțe din Oameni Buni și Fete Roșii pentru a se opune activ Haiducilor ziua.

«Legende Noi». Pentru dev, ops și persoane curioase
Făcătorul de Nori

Făcătorul de Nori spionează noaptea pentru Haiduci, informându-i despre rolurile găsite în Peștera lor, dar ziua nu votează, deoarece nu locuiește în sat. Totuși, ceilalți jucători pot vota pentru Făcătorul de Nori și, astfel, pot să-l condamne. Fiind originar din mlaștini, Făcătorul de Nori nu poate fi sedus de Prințesa Broască, iar dacă se va încerca, Făcătorul de Nori îi va marca casa, iar locuitorii satului îi vor descoperi adevărata identitate. Făcătorul de Nori nu trebuie să se teamă de vrăjile lui Koshchey, dar Vasiliisa îi poate vindeca până la moarte. Dacă Pisica-Bașun va încerca să atace Făcătorul de Nori, riscă să-și piardă ghearele de fier, iar apoi Pisica va trebui să adoarmă victimele doar cu mârâitul.

«Legende Noi». Pentru dev, ops și persoane curioase
Baba Yaga

Baba Yaga de asemenea, lucrează împreună cu Haiducii, vrând noaptea: poate fie să le impună boală altor jucători, fie să protejeze pe cineva din alianță de atac. Magia ei este chiar mai puternică decât blestemul Zmeului. Ziua, Baba Iaga este de asemenea activă: pe cel care este sub protecția ei nu poate fi condamnat chiar și prin voturi majoritare. Totuși, rezervele de rădăcini magice pentru protecția de zi sunt limitate, astfel încât Baba Iaga nu poate proteja pe nimeni, inclusiv pe sine, mai mult de trei ori pe parcursul jocului. În acest timp, ziua Baba Iaga se preface că este o obșinuită Fată Roșie și votează alături de toți.

«Legende Noi». Pentru dev, ops și persoane curioase
Zmeu-Gorunych

Zmeu-Gorunych zboară noaptea deasupra satelor, pădurilor și mlaștinilor, furând și dezvăluind în timpul zilei rolul său de jefuitor. În timpul zilei, Zmeu doarme, așa că nu votează, dar poate fi executat cu majoritatea voturilor. Zmeu este foarte periculos pentru toți, în special pentru Războinici și Ivan Țarevici. Zmeu nu are preferințe cu privire la cine să fure, dar dacă este dezvăluit de Lup sau de Leșii, poate deveni un aliat valoros. Dacă Zmeu este ucis noaptea, există o probabilitate de a obține un obiect foarte valoros - Pielea de Zmeu, care își va proteja deținătorul o dată de un atac fizic.

«Legende Noi». Pentru dev, ops și persoane curioase
Răutăciosul cu un Ochi

Răutăciosul cu un Ochi noaptea ucide pe oricine îi iese în cale, iar pe cei pe care nu îi poate ucide (Leșul, Pisica-Bayun sau Zmeul Gorițici) îi blesteamă, așa că oricine încearcă să comunice cu cel blestemat în acea noapte va muri în ziua următoare. Cel blestemat va muri de asemenea, în timp ce Pisica-Bayun rămâne teafără, pur și simplu se culcă să doarmă pentru a se odihni, sărind o rundă în noaptea următoare. Numai Baba Iaga poate salva pe cineva de blestem. Blestemul nu afectează pe cineva care l-a învins pe Pisica-Bayun: el, la fel ca și Pisica, se culcă pur și simplu să doarmă, sărind o rundă.

«Legende Noi». Pentru dev, ops și persoane curioase
Prințesa-Broască

Prințesa-Broască nu poate câștiga în joc, dar poate câștiga foarte mulți bani, seducând alți jucători noaptea. Cei seduși sar o rundă. Broasca nu poate seduce pe Vasilisa înțeleaptă, de asemenea ar trebui să evite Leșul, care o va vinde tuturor a doua zi. Dacă Ivan Țarevici sau Șeful Războinici o găsesc pe Broască, pot invita de partea lor cetățenii pașnici sau Războinicii, în timp ce Ivan nu acceptă refuzul Broaștei, dar Șeful nu este atât de pretențios. Totuși, Prințesa este suficient de vicleană, poate deveni un agent dublu, deoarece, deși nu poate câștiga singură, este o oportunitate excelentă de a aduna aur, având în vedere că șansele de a ajunge până la sfârșitul jocului cresc semnificativ! În timpul zilei, Prințesa-Broască se prefăc că este o Fata Roșie și votează împreună cu toți ceilalți.

«Legende Noi». Pentru dev, ops și persoane curioase
Koshchei Nemuritorul

Koshchei Nemuritorul locuiește în castelul său. Noaptea se plimbă prin satele din jur și zăpăcește Băieții Bunici și Fetele Roșii, care îi devin slujitori și îndeplinesc fără ezitare toate ordinele. Refuzând să execute un ordin, de exemplu, să voteze ziua diferit de cum a spus Koshchei sau să scrie mesaje ziua în chat, dacă Koshchei a interzis acest lucru, Servitorul lui Koshchei moare. Astfel, Koshchei poate influența rezultatele votului de zi, chiar dacă el nu votează personal. Dacă Koshchei este ucis, toate victimele lui mor și ele. Vasilisa poate să-l vindece pe Servitorul lui Koshchei, care apoi se întoarce la rolul său inițial. Zmeul Gorynych și Lupul au imunitate înnăscută la zombificare, astfel încât Koshchei, în ciuda tuturor eforturilor, nu poate să-i atragă în slujba sa. De asemenea, Lupul poate să-l salveze pe Ivan sau pe Vasilisa, sacrificându-se. Cei salvați de Lup dobândesc imunitate lupă la zombificare.

«Legende Noi». Pentru dev, ops și persoane curioase
Pisica Bayun

Pisica Bayun trăiește în pădure, vânează noaptea. Ziua doarme în cuibul său, de aceea nu participă la vot. Totuși, ziua poate fi condamnat la moarte prin votul majorității. Pisica poate ataca în două feluri: făcându-se auzită — și atunci victima sa adoarme și nu poate umbla noaptea, și, de asemenea, nu poate vota a doua zi — sau ucigându-și victima cu gheare de fier. Atacul cu ghearele nu funcționează asupra Zmeului Gorynych, iar atacându-l pe Leshy, Pisica poate rămâne fără gheare! Lich nu poate să-l blesteme pe Pisică, care, după blestem, va dormi pur și simplu o noapte. Dacă cineva reușește să-l învingă pe Pisica-Baiun, se va vindeca de orice boală și neajuns, inclusiv de blestemul Lichului. Această abilitate a Pisicii rămâne la jucător până la sfârșitul jocului. Slujitorii lui Koshchei nu pot vota ziua pentru Pisică, dar pot afla indirect cine este Pisica, fără a spune acest lucru lui Koshchei. Pisica-Baiun nu intră în alianțe cu Ivan sau cu Tălharii, astfel că aceștia sunt pentru Pisică — o prioritate.

Tehnologiile utilizate

Pentru a dezvolta un joc, am ales tehnologia de calcul serverless bazată pe OpenFaaS, deoarece este suficient de simplă pentru organizarea jocului și, în același timp, destul de avansată pentru a scrie reguli complexe fără complicații inutile. De asemenea, voi utiliza un cluster Kubernetes, deoarece acest mod de desfășurare a aplicațiilor permite o desfășurare rapidă și fiabilă, precum și scalabilitate ușoară. Pentru a crea logica jocului, OpenFaaS este suficient, dar voi încerca și să dezvolt un Contenant de Povestitor pentru a compara dificultatea implementării. Am ales ca limbaj principal de programare pentru microservicii și funcții Go, întrucât l-am studiat de mult timp în timpul liber ca înlocuitor pentru Perl, iar pentru interacțiunea utilizatorilor cu microserviciile și funcțiile se va folosi js bazat pe un anumit framework. Voi povesti despre decizia finală într-un articol corespunzător din ciclu. Pentru comunicarea între funcții, am ales NATS.io, deoarece am lucrat cu ea anterior și are o integrare destul de ușoară în Kubernetes.

Anunț

  • Introducere
  • Configurarea mediului pentru dezvoltare, împărțirea sarcinii în funcții
  • Lucrări la backend
  • Lucrări la frontend
  • Configurarea CICD, organizarea testării
  • Lansarea unei sesiuni de probă a jocului
  • Concluzii

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster