„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi

Na liczne prośby czytelników rozpoczynamy duży cykl artykułów o zastosowaniu technologii obliczeń bezserwerowych do tworzenia rzeczywistych aplikacji. W tym cyklu omówimy rozwój aplikacji, testowanie oraz dostarczanie ich do użytkowników końcowych z wykorzystaniem nowoczesnych narzędzi: architektury aplikacji opartej na mikroserwisach (w wariancie serverless, na bazie OpenFaaS), klastra kubernetes do wdrożenia aplikacji, bazy danych MongoDB, ukierunkowanej na chmurę, oraz zastosowanie, a także chmurowej magistrali NATS. Aplikacja realizuje grę „Byliny”, jeden z wariantów popularnej gry salonowej „Mafia”.

Czym są „Byliny”?

To wariant gry „Mafia”, znanej również jako „Werewolf”. Podstawą jest gra zespołowa, w której uczestnicy krok po kroku muszą odkryć, kto jest kim, i próbować wygrać. Niestety, grając w sieci, traci się ważny element, jakim jest osobista interakcja, a zasady klasycznej „Mafii” są dość proste, dlatego dla bardziej nieliniowego i interesującego przebiegu gry zazwyczaj dodaje się inne postacie, zachowując jednocześnie główne cechy oryginalnej „Mafii”, takie jak zmiana dnia i nocy, akcje tylko w nocy oraz sojusze między uczestnikami. Ważną różnicą gry w sieci jest to, że prowadzący (zwany również Mistrzem gry, Bajkopiszem) jest zazwyczaj programem komputerowym.

Opis gry

Zasady gry, którą chcę zrealizować, pochodzą ze starego bota irc, którego zachowałem w osobistym archiwum około 10 lat temu. „Byliny” mają swoją historię, od której zaczyna się każda gra:

W trzecim królestwie, w trzydziestym państwie, za siedmioma morzami, żyły sobie kilka wiosek, a w nich Sławni młodzieńcy i Czerwone panny. Siali zboże, chodzili do okolicznego lasu po grzyby i jagody… I trwało to wiekami, aż straszna katastrofa poruszyła Ziemię i zło zaczęło rozpełzać się po świecie! Noce stały się długie i zimne, a w ciemności po lesie wałęsały się złowrogie i przerażające stwory. Przyleciał skądś Smok Wawelski i zaczął kraść Czerwone panny i odbierać wszystko cenne wieśniakom. Złośliwa i chciwa Baba Jaga, przylecą na miotle z dalekich lasów, zamąciła rozum mieszkańców, a nawet niektórzy porzucili rzemiosło i poszli do lasu rabować, tworząc tam bandę. Złoczyńcy spotkali Leszego, który potrafił zmieniać się w drzewa i krzewy, zaczął obserwować spokojnych wieśniaków i służyć zbójcom, wypytując, czy Dobry Młodzieńcy planują coś, aby uwolnić swoje osady od nieczystości. Dobry Młodzieńcy i Czerwone Dziewice, zmęczeni napadami Zbójców, oraz straszliwymi śmierciami z rąk okropnego Licha Jednookiego, zebrali złoto i zaprosili znanego wojownika z sąsiedniego miasta – Iwana-Carewicza, który obiecał uwolnić wieś od zbójców. Na polanie w lesie Iwan uratował od nieuchronnej śmierci Szarego Wilka, który wpadł w pułapkę Zbójców. W zamian Wilk obiecał informować Carewicza o różnych leśnych nieczystościach. Przechodziła znana uzdrowicielka Wasilisa Mądra, a kiedy zobaczyła tragedię – została, aby pielęgnować mieszkańców dotkniętych atakami złośliwych. Za lasem pojawił się czarny pałac, w którym, według plotek, osiedlił się Kościej Nieśmiertelny, który każdej nocy nawiedzał wioski i czarował Dobrych Młodzieńców i Czerwone Dziewice, aby nie śmieli stawiać się jego rozkazom, wszyscy robili tak, jak on kazał. A w Beznamiętnym Lesie osiedlił się Kot-Bajun, i każdy, kto go spotkał, zapadał w martwy sen po jego bajkach lub ginął od jego żelaznych pazurów.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Trzydzieste Królestwo

Jak już widać, gracze dzielą się na kilka grup:

  • spokojnych mieszkańców (Dobry Młodzieńcy, Czerwone Dziewice, Iwan-Carewicz, Szary Wilk i Wasilisa Mądra)
  • zbójców (właściwie zbójców, a także Baba Jaga i Leszy)
  • niezależnych (Smok Wawelski, Licho Jednookie, Czarodziejka-Kurczak, Kościej Nieśmiertelny, Kot-Bajun)

Celem gry, jak już powiedziano, jest przetrwać i zwyciężyć. Przeciwnicy muszą w taki czy inny sposób opuścić grę, a niezależni również powinni pozostać przy życiu do końca gry. W grze istnieje złoto, swoisty środek płatniczy, który gracze zdobywają tylko w grze. Zwycięzcy otrzymują złoto. Im więcej złota, tym wyższa ranga gracza.

Zatrzymam się trochę dokładniej przy opisie postaci.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Dobry Młodzieniec

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Czerwona Dziewica

Dobry Młodzieniec i Czerwona Dziewica — to najpopularniejsza i podstawowa rola w grze. To mieszkańcy, którzy w nocy śpią, a w ciągu dnia pracują. Nocą atakuje ich ktoś z rozbójników, Żmij Gorynych i inne role, a Wasilisa Mądra ich leczy. Z pewnym, niewielkim prawdopodobieństwem Dobry młodzieniec lub Czerwona dziewica mogą przeżyć atak bez strat (możliwe, że tracąc przy tym złoto), jednak wszyscy dowiedzą się o pseudonimie gracza następnego dnia po ataku ochrony. Nocą ci gracze nie wykonują żadnych ruchów, a analizują sytuację w grze, opierając się na wiadomościach w czacie gry. W ciągu dnia ci gracze decydują poprzez głosowanie, kto z nich nie jest Dobrym młodzieńcem ani Czerwoną dziewicą. Gracz, na którego zagłosowała większość innych graczy, opuszcza grę, a pozostali zdobywają lub tracą złoto. Jeśli gracze nie wybiorą nikogo większością głosów, nikt z graczy nie zostanie stracony.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Iwan-Carewicz

Iwan-Carewicz — pierwotnie anonimowy obrońca mieszkańców. Nocą sprawdza role innych graczy, ponieważ zna tylko jednego swojego sojusznika — Szarego Wilka. Przy bezpośrednim udziale Szarego Wilka (który także może sprawdzać role innych graczy) Iwan-Carewicz, zamiast sprawdzania, może nocą zabić innego bohatera. Jeśli w wyniku sprawdzenia Iwan-Carewicz widzi rolę Dobrego Młodzieńca lub Czerwonej Dziewicy, może ich zaprosić do siebie i przedstawić Szaremu Wilkowi oraz innym Dobrym Młodzieńcom i Czerwonym Dziewicom. Iwanowi może przeszkodzić Carewna Żabka, która może go nocą uwieść, jednocześnie nie zdradzając jego roli innym graczom w ciągu dnia. Jeśli Iwan sam odkryje Carewnę Żabę, może jej zaproponować dołączenie do mieszkańców, ale jeśli Carewna odmówi, umiera z ręki Iwana. Żmij-Gorynych także może przeszkadzać sprawdzeniom Iwana-Carewicza, ale w przeciwieństwie do Carewny Żaby, w ciągu dnia opowie pozostałym graczom, kto z nich to Iwan-Carewicz. W ciągu dnia Iwan-Carewicz nie różni się niczym od innych Dobrych Młodzieńców.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Szary Wilk

Szary Wilk — pomocnik Iwana-Czarnowicza, którego bystry nos pomaga Iwanowi znaleźć innych Dobrych Młodzieńców i Czerwone Dziewice. Szary Wilk mówi tym graczom, kto to Iwan-Czarnowicz, a także informuje o innych graczach z rolami Dobrych Młodzieńców i Czerwonych Dziewic. Jeśli Wilk odkryje zbójnika lub innego przeciwnika, natychmiast informuje Iwana-Czarnowicza, aby ten podjął działania następnej nocy. Jeśli na Wilka zaatakuje Czarownica-Ropucha, zamienia się w zwykłego Dobrego Młodzieńca i nie może nikogo sprawdzić, a Czarownica nie dowiaduje się, że właściwie był to Szary Wilk, ponieważ Wilk nie śpi w nocy. Jednak sam Wilk w ciągu dnia dowiaduje się, kto z graczy jest Czarownicą-Ropuszą, i może spróbować namówić pozostałych Dobrych Młodzieńców i Czerwone Dziewice, które przyprowadził do Iwana-Czarnowicza, do głosowania za egzekucją Czarownicy-Ropuszy. Również następnej nocy może próbować anonimowo nakłonić Czarownicę-Ropuchę do strony pokojowych mieszkańców, aby nikogo z nich nie dotykała. Wilk w nocy może poświęcić się, aby uratować Iwana-Czarnowicza lub Wasilisę Mądralę, jeśli sądzi, że ci mogą nagle znaleźć się pod ostrzałem zbójników, lub zostali zombirowani przez Koszeja (Wilk ma wrodzoną odporność na czary Koszeja), jednak po samopoświęceniu Wilk wypada z gry.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Wasilisa Mądra

Wasilisa Mądra — gra w imieniu pokojowych mieszkańców, jednak oni o tym nie wiedzą, ponieważ Wasilisa jest bardzo skromna. Również Wasilisa Mądra, gdy leczy, nie zadaje pytań i jako dobry lekarz leczy wszystkich bez wyjątku. Jednak jeśli jej lekarstwo wypije Kosziej, Licho lub Leśnik — nie przeżyją dłużej niż jeden dzień, ponieważ Wasilisa leczy tylko ludzi. Wąż Gorynych lub Kot-Bajun również nie skorzystają na lekarstwie Wasilisy Mądrej, ale też nie odniesie im to szkody. Również Wasilisę w nocy nie dotyka Kot-Bajun, ponieważ Wasilisa nie zbiera ziół leczniczych w Bezżyciowym Lesie. Ponadto urok Czarownicy-Ropuszy na Wasilisę nie działa. Jeśli jej pacjenta spróbują zabić dwukrotnie, medycyna okaże się bezsilna. Wasilisa nie uratuje też przed atakami magicznymi, na przykład od przekleństwa Licha. W ciągu dnia Wasilisa zachowuje się jak Czerwona Dziewica i tylko przelotny, lekko smutny wzrok może nieco zasugerować, że jest najlepszą lekarką w Trzydziestym Królestwie.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Zbójnik

Zbójnicy, w przeciwieństwie do wszystkich poprzednich ról, znają się nawzajem, ponieważ żyją w tym samym Legowisku, a także znają Leśnego Dziadka i Babę Jagę, dlatego mogą działać wspólnie od samego początku. Jednak tylko Przywódca bandy podejmuje działania w nocy i nie głosuje w ciągu dnia, podczas gdy pozostali Rozbójnicy starają się udawać Dobrych Chłopców i Czerwone Dziewczyny. Jeśli Przywódca zostanie wyeliminowany z gry z jakiegokolwiek powodu, jego miejsce natychmiast zajmuje jeden z pozostałych Rozbójników. W pierwszej kolejności, Rozbójnicy starają się unieszkodliwić Iwana-Carewicza, zanim zdobędzie wystarczającą moc od Dobrych Chłopców i Czerwonych Dziewczyn, aby aktywnie przeciwstawiać się Rozbójnikom w ciągu dnia.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Leśny Dziadek

Leśny Dziadek w nocy szpieguje dla Rozbójników, informując ich o znalezionych rolach w ich Legowisku, ale w ciągu dnia nie głosuje, ponieważ nie mieszka w wiosce. Inni gracze mogą jednak głosować na Leśnego Dziadka i w ten sposób skazać go na śmierć. Ponieważ Leśny Dziadek pochodzi z bagien, nie może go uwieść Księżniczka-Ropucha, a jeśli spróbuje, Leśny Dziadek oznaczy jej dom, a mieszkańcy wioski dowiedzą się, kim ona naprawdę jest. Leśny Dziadek nie musi obawiać się czarów Kocieja, ale Wasilisa może go uleczyć na śmierć. Jeśli Kot-Bajun spróbuje zaatakować Leśnego Dziadka, ryzykuje utratą swoich żelaznych pazurów i później będzie musiał usypiać ofiary tylko przez mruczenie.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Baba Jaga

Baba Jaga także współpracuje z Rozbójnikami, w nocy czaruje: może albo rzucić chorobę na innych graczy, albo ochronić jednego ze swoich sojuszników przed atakiem. Jej czarodziejska moc jest nawet silniejsza od klątwy Upiora. W ciągu dnia Baba Jaga również jest aktywna: osobę, którą ma pod ochroną, nie można ukarać nawet większością głosów. Jednak zapas magicznych korzeni do ochrony w ciągu dnia jest ograniczony, więc Baba Jaga nie może chronić nikogo, w tym siebie, więcej niż trzy razy w trakcie gry. W ciągu dnia Baba Jaga udaje zwykłą Czerwoną Dziewczynę i głosuje razem z innymi.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Smok Wawelski

Smok Wawelski W nocy lata nad wioskami, lasami i bagnami, dokonując rabunków, ujawniając w ciągu dnia rolę okradzionego. W ciągu dnia Żmij śpi, więc nie głosuje, ale może zostać skazany większością głosów. Żmij jest bardzo niebezpieczny dla wszystkich, szczególnie dla Rozbójników i Iwana-Czarnobylnika. Żmijowi wszystko jedno, kogo okrada, ale jeśli ujawni go Wilk lub Leśny Dziad, może stać się cennym sojusznikiem. Jeśli zabijesz Żmija w nocy, istnieje pewne prawdopodobieństwo, że otrzymasz bardzo cenny przedmiot — Żmijową Skórę, która ochroni swojego właściciela przed jedną fizyczną ataką.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Złośliwy Jednooki

Złośliwy Jednooki w nocy zabija wszystkich, którzy znajdą się na jego drodze, a tych, których zabić nie może (Leśnego Dziada, Kota-Bajuna lub Żmija Gorynycza) — przeklina, więc każdy, kto spróbuje rozmawiać z tym przeklętym tej samej nocy, umrze w ciągu dnia. Sam przeklęty również ginie, tylko Kot-Bajun nie umiera, po prostu kładzie się spać, by nabrać sił, pomijając swoją turę w następnej nocy. Może ocalić od przekleństwa tylko Babcia-Jaga. Przekleństwo nie działa również na tego, kto pokonał Kota-Bajuna: on, podobnie jak Kot, po prostu kładzie się spać, pomijając swoją turę.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Księżniczka Żabka

Księżniczka Żabka nie może wygrać w grze, ale może zarobić dużo pieniędzy, uwodząc innych graczy w nocy. Uwiedziony gracz pomija swoją turę. Żabka nie może uwieść Wasilisy Mądrej, powinna także unikać Leśnego Dziada, który wyda ją wszystkim następnego dnia. Jeśli Iwan-Czarnobyl lub Przywódca Rozbójników znajdą Żabkę, mogą zaprosić ją do obozu pokojowych mieszkańców lub Rozbójników, przy czym Iwan nie akceptuje odmowy Żabki, natomiast Przywódca jest mniej wybredny. Jednak Księżniczka jest dostatecznie przebiegła, aby stać się podwójnym agentem, bo mimo że nie może wygrać sama, ma doskonałą okazję, by zdobyć złoto, ponieważ szanse na dotarcie do końca gry znacznie wzrastają! W ciągu dnia Księżniczka Żabka udaje Czerwoną Dziewicę i głosuje razem z innymi.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Kościej Nieśmiertelny

Kościej Nieśmiertelny mieszka w swoim zamku. W nocy chodzi po okolicznych wioskach i zmienia Dobrych Młodzieńców i Czerwone Dziewice w swoich służących, którzy bez sprzeciwu wykonują wszystkie polecenia. Odrzucając wykonanie rozkazu, na przykład głosowanie w dzień w sposób inny niż nakazał Kościej, lub pisanie wiadomości w czacie w dzień, jeśli Kościej tego zabronił, Sługa Kościeja ginie. W ten sposób Kościej może wpływać na wyniki głosowania w dzień, chociaż sam osobiście nie głosuje. Jeśli Kościeja zabiją, wszystkie jego ofiary także umierają. Wasilisa może uleczyć Sługę Kościeja, który następnie wraca do swojej pierwotnej roli. Zmiy-Gorynycz i Wilk mają wrodzoną odporność na zombifikację, więc Kościej, pomimo wszelkich starań, nie może ich zwrócić na swoją służbę. Wilk może również uratować Iwana lub Wasilisę, poświęcając się. Uratowani przez Wilka zyskują Wilczy immunitet na zombifikację.

„Nowe Bylińskie’. Dla dev, ops i ciekawskich ludzi
Kot-Bajun

Kot-Bajun mieszka w lesie, w nocy poluje. W ciągu dnia śpi w swojej dziupli, więc nie bierze udziału w głosowaniu. Jednak w ciągu dnia mogą go skazać większością głosów. Kot może atakować na dwa sposoby: mrucząc — a wtedy jego ofiara zasypia i nie może chodzić w nocy, a także głosować następnego dnia, — lub zabijając od razu żelaznymi pazurami. Atak pazurami nie działa na Zmiy-Gorynycza, a atakując Leśnego Dziada, Kot może nawet zostać bez pazurów! Zło nie może przekląć Kota, który po przekleństwie po prostu przez jedną noc będzie spał. Jeśli ktoś zdoła pokonać Kota-Bajuna, wyzdrowieje z każdej choroby i dolegliwości, w tym z przekleństwa Zła. Ta zdolność Kota pozostaje przy graczu do końca gry. Słudzy Kościeja nie mogą głosować za Kotem w ciągu dnia, ale mogą nieco się dowiedzieć, kim jest Kot, nie informując o tym Kościeja. Kot-Bajun nie zawiera sojuszy z Iwanem ani Złodziejami, więc są oni dla Kota priorytetowym celem.

Wykorzystywane technologie

Do stworzenia gry wybrałem technologię obliczeń bezserwerowych (serverless) opartą na OpenFaaS, ponieważ jest ona wystarczająco prosta do organizacji gry, a jednocześnie wystarczająco rozwinięta, aby pisać skomplikowane zasady gry bez zbędnych komplikacji. Będę również korzystać z klastra Kubernetes, ponieważ ten sposób wdrażania aplikacji umożliwia dość łatwe i niezawodne szybkie wdrażanie oraz możliwość łatwego skalowania. Aby stworzyć logikę gry, można obejść się tylko z OpenFaaS, jednak spróbuję również stworzyć Baśniarza jako osobny kontener, aby porównać trudność realizacji. Jako główny język programowania dla mikrousług i funkcji wybrałem Go, ponieważ od dłuższego czasu studiuję go w wolnym czasie jako zamiennik dla Perla, a do interakcji użytkowników z mikrousługami i funkcjami będzie używana js na bazie pewnego frameworka. Ostateczną decyzję przedstawię w odpowiednim artykule tego cyklu. Do komunikacji funkcji między sobą wybrałem NATS.io, ponieważ miałem z nią już styczność wcześniej, a jej integracja z Kubernetes jest dość prosta.

Ogłoszenie

  • Wprowadzenie
  • Ustawienie środowiska do rozwoju, podział zadania na funkcje
  • Prace nad backendem
  • Prace nad frontendem
  • Konfiguracja CICD, organizacja testowania
  • Uruchomienie próbnej sesji gry
  • Podsumowanie

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster