"Epik Baru". Untuk dev, ops dan orang yang ingin tahu


Atas permintaan pembaca, siklus besar artikel dimulai pada penerapan teknologi komputasi tanpa server untuk mengembangkan aplikasi nyata. Dalam siklus ini, kami akan mempertimbangkan pengembangan aplikasi, pengujian dan pengiriman kepada pengguna akhir menggunakan alat modern: arsitektur aplikasi microservice (dalam versi tanpa server berdasarkan OpenFaaS ), sebuah cluster kubernet untuk penyebaran aplikasi, database MongoDB yang berfokus pada pengelompokan dan aplikasi cloud, dan bus cloud NATS . Aplikasi ini mengimplementasikan game "Epics", salah satu varian dari game salon populer "Mafia".


Apa itu "Epik"?


Ini adalah varian dari game "Mafia", juga "Werewolf". Ini didasarkan pada permainan tim di mana peserta harus belajar langkah demi langkah siapa adalah siapa dan mencoba untuk menang. Sayangnya, ketika bermain di jaringan, komponen penting dari permainan seperti interaksi pribadi menghilang, dan aturan "Mafia" klasik cukup sederhana, jadi karakter lain biasanya ditambahkan untuk gameplay yang lebih non-linear dan menarik, tetapi secara umum, fitur utama dari "Mafia" asli dipertahankan, misalnya, perubahan siang dan malam, hanya bergerak di malam hari, serta aliansi antar peserta. Perbedaan penting lain dari game melalui jaringan adalah bahwa host (alias Game Master, Storyteller) biasanya merupakan program komputer.


Deskripsi game


Aturan permainan yang ingin saya terapkan diambil dari irc-bot lama, yang saya simpan di arsip pribadi sekitar 10 tahun yang lalu. "Bylin" memiliki latar belakang di mana setiap pertandingan dimulai:


Di kerajaan yang jauh, di negara ketiga puluh, lebih dari tujuh lautan, beberapa desa hidup untuk diri mereka sendiri, dan di dalamnya orang- orang Baik dan Perawan Merah . Mereka menabur roti, dan pergi ke hutan terdekat untuk mencari jamur dan buah beri ... Dan terus seperti ini dari abad ke abad, sampai bencana mengerikan mengguncang Bumi dan kejahatan mulai menyebar ke seluruh dunia! Malam menjadi panjang dan dingin, dan kegelapan berkeliaran di hutan dan berkeliaran di desa makhluk yang tidak baik dan mengerikan. Seekor Ular Gorynych terbang dari suatu tempat dan terbiasa mencuri Gadis Merah dan mengambil segala sesuatu yang berharga dari penduduk desa. Baba Yaga yang berbahaya dan serakah, yang terbang di atas stupa dari hutan yang jauh, membingungkan pikiran penduduk, dan bahkan beberapa orang meninggalkan pesawat itu dan pergi ke hutan untuk dirampok, membuat geng di sana. Likhedey bertemu Leshii, yang tahu bagaimana menjadi pohon dan semak-semak, ia mulai memperhatikan penduduk desa yang damai dan melayani para perampok, mengendus-endus apakah orang-orang baik itu merencanakan sesuatu untuk menyelamatkan pemukiman mereka dari roh-roh jahat. Orang-orang baik dan gadis-gadis Merah, bosan dengan penggerebekan Perampok, dan kematian mengerikan di tangan Likh yang bermata satu , mengumpulkan emas dan mengundang pegulat terkenal, Ivan Tsarevich , dari kota tetangga, yang berjanji untuk menyingkirkan desa perampok. Dalam pembukaan di hutan, Ivan menyelamatkan dari kematian serigala abu - abu , yang jatuh ke dalam perangkap perangkap Perampok. Sebagai gantinya, Serigala berjanji untuk memberi tahu Tsarevich tentang berbagai roh jahat. Seorang tabib terkenal Vasilisa si Bijaksana lewat, dan ketika dia melihat masalah, dia tetap merawat para penduduk yang terkena serangan gagah. Di belakang hutan, sebuah istana hitam muncul, di mana, menurut desas-desus, Koshchei the Immortal menetap, setiap malam ia mengunjungi desa-desa dan membaca mantra pada orang Baik dan Perawan Merah sehingga mereka tidak berani melanggar perintahnya, mereka melakukan semua seperti yang dia katakan. Dan di Hutan Mati, Cot-Bayun menetap, dan semua orang yang bertemu dengannya tertidur setelah dongeng atau meninggal karena cakar besinya.


Kerajaan Jauh


Seperti yang sudah terlihat, para pemain dibagi menjadi beberapa kelompok:


  • warga sipil (Good fellows, Red Maidens, Ivan Tsarevich, Grey Wolf dan Vasilisa the Wise)
  • perampok (perampok sendiri, serta Baba Yaga dan Leshy)
  • independen (Serpent-Gorynych, Likho One-eyed, Princess Frog, Koschey the Immortal, Cot-Bayun)

Tujuan permainan, sebagaimana disebutkan di atas, adalah untuk tetap hidup dan menang. Lawan entah bagaimana harus meninggalkan permainan, dan orang-orang independen juga harus tetap hidup sampai akhir pertandingan. Gim ini memiliki emas, sejenis mata uang gim yang hanya dapat diperoleh pemain di dalam gim. Pemenang mendapatkan emas. Semakin banyak emas, semakin tinggi peringkat pemain.


Saya akan sedikit membahas deskripsi karakter.



Bagus Bagus



Red Maiden


Good Good and Red Maiden - peran paling masif dan utama dalam permainan. Ini adalah warga sipil yang tidur di malam hari dan bekerja di siang hari. Pada malam hari, mereka diserang oleh salah satu perampok, Gorynych Ular dan peran lainnya, dan Vasilisa yang Bijaksana memperlakukan mereka. Dengan beberapa kemungkinan kecil, Orang Baik atau Perawan Merah dapat bertahan dari serangan tanpa kerusakan (kemungkinan kehilangan emas pada saat yang sama), namun, pada saat yang sama, semua orang akan mengenali nama samaran pemain pada hari berikutnya setelah serangan / pertahanan. Pada malam hari, para pemain ini tidak bergerak, tetapi menganalisis situasi permainan berdasarkan pesan di obrolan game. Pada sore hari, para pemain ini memutuskan dengan memilih siapa di antara mereka yang bukan Orang Baik atau Gadis Merah. Pemain yang dipilih oleh sebagian besar pemain lain meninggalkan permainan, mendapatkan sisa atau kehilangan emas. Jika para pemain tidak memilih siapa pun dengan suara mayoritas, tidak ada pemain yang akan dieksekusi.



Ivan Tsarevich


Ivan Tsarevich - awalnya pembela anonim warga sipil. Di malam hari, periksa peran pemain lain, karena ia hanya tahu satu dari sekutunya - Serigala Abu-abu. Dengan partisipasi langsung Grey Wolf (yang juga dapat memeriksa peran pemain lain), Ivan Tsarevich, alih-alih memeriksa, dapat membunuh karakter lain di malam hari. Jika, sebagai akibat dari cek, Ivan Tsarevich melihat peran Good Young Man atau Red Maiden dalam pemain, maka ia dapat mengundang mereka untuk dirinya sendiri dan memperkenalkannya ke Grey Wolf dan Pria Muda Baik lainnya serta Red Maidens. Ivan dapat dicegah oleh Putri Kodok, yang dapat merayunya di malam hari, sambil tidak mengkhianati perannya kepada pemain lain di siang hari. Jika Ivan sendiri menemukan Putri Kodok, maka dia dapat menawarkannya untuk bergabung dengan warga sipil, tetapi jika Putri menolak, dia mati di tangan Ivan. The Serpent-Gorynych juga dapat mengganggu pemeriksaan Ivan Tsarevich, tetapi, tidak seperti Katak Tsarevna, pada sore hari ia akan memberi tahu para pemain yang mana di antara mereka adalah Ivan Tsarevich. Pada sore hari, Ivan Tsarevich tidak berbeda dengan rekan-rekan Good Good lainnya.



Serigala abu-abu


Grey Wolf adalah asisten Ivan Tsarevich, yang aroma tajamnya membantu Ivan menemukan Good Fellows dan Red Maidens lainnya. Gray Wolf memberi tahu para pemain ini siapa Ivan Tsarevich, dan juga melaporkan pemain lain dengan peran rekan yang baik dan Red Maidens. Jika Serigala menemukan perampok atau musuh lain, ia segera memberi tahu Ivan Tsarevich tentang hal ini sehingga ia mengambil tindakan malam berikutnya. Jika Serigala sang Putri Katak menyerang, ia berubah menjadi Orang Baik biasa dan tidak dapat memeriksa siapa pun, dan Sang Putri tidak akan tahu bahwa itu sebenarnya Serigala Abu-abu, karena Serigala tidak tidur di malam hari. Namun, sang Serigala sendiri pada sore ini mengetahui siapa pemain yang merupakan Putri Kodok, dan mungkin mencoba untuk membujuk Good Fellows dan Red Maidens yang tersisa yang ia bawa ke Ivan Tsarevich untuk memilih eksekusi sang Putri Kodok. Juga, malam berikutnya, dia dapat mencoba secara anonim membujuk Putri Kodok ke pihak warga sipil sehingga dia tidak menyentuh satupun dari mereka. Seekor serigala dapat mengorbankan dirinya di malam hari untuk menyelamatkan Ivan Tsarevich atau Vasilisa si Bijaksana, jika ia menyarankan bahwa mereka tiba-tiba jatuh di bawah pukulan perampok, atau diserang oleh Koshchei (Serigala adalah kekebalan bawaan terhadap pesona Koshchei), tetapi serigala meninggalkan permainan setelah pengorbanan diri.



Vasilisa si Bijaksana


Vasilisa the Wise - bermain untuk warga sipil, tetapi mereka tidak tahu tentang dia, karena Vasilisa sangat sederhana. Juga, Vasilisa si Bijaksana, ketika sembuh, tidak mengajukan pertanyaan, dan bagaimana seorang dokter yang baik menyembuhkan semua orang berturut-turut. Tetapi jika obatnya diminum oleh Koschei, Likho atau Leshiy, maka mereka tidak boleh hidup lebih lama dari satu hari, karena Vasilisa hanya memperlakukan orang. Obat-obatan Vasilisa yang Bijaksana tidak akan membantu baik Ular Gorynych atau Kota-Bajun, tetapi mereka tidak akan membahayakan. Juga, Cot-Bayun tidak menyentuh Vasilisa di malam hari, karena Vasilisa tidak pergi ke Hutan Hidup untuk tanaman obat. Selain itu, pesona perempuan dari Putri Katak pada Vasilisa tidak berfungsi. Jika mereka mencoba membunuh pasiennya dua kali, obatnya akan tidak berdaya. Vasilisa tidak akan menyelamatkan dari serangan sihir, misalnya, dari kutukan Likh. Pada sore hari, Vasilisa bertingkah seperti Gadis Merah, dan hanya tatapan singkat yang sedikit bisa memberi petunjuk sedikit bahwa dia adalah dokter terbaik di Far Far Away.



Perampok


Para perampok , tidak seperti semua peran sebelumnya, saling mengenal, karena mereka tinggal di Den yang sama, dan juga tahu Leshy dan Babu Yaga, oleh karena itu mereka dapat bertindak secara konser langsung dari langkah pertama. Tetapi hanya Pemimpin Geng yang melakukan tindakan di malam hari dan tidak memberikan suara di siang hari, sementara para Perampok lainnya dengan rajin berpura-pura menjadi Orang Baik dan Perawan Merah. Jika Pemimpin meninggalkan permainan karena alasan apa pun, salah satu Perampok yang tersisa segera menggantikannya. Pertama-tama, para Perampok berusaha melumpuhkan Ivan Tsarevich, sampai ia mengumpulkan cukup kekuatan dari rekan-rekan Baik dan Red Maidens untuk secara aktif menghadapi para Perampok di sore hari.



Goblin


Goblin memata-matai para Perampok di malam hari, memberi tahu mereka tentang peran yang ditemukan di Den mereka, tetapi tidak memberikan suara pada siang hari, karena dia tidak tinggal di desa. Namun, pemain lain dapat memilih Leshy dan, dengan demikian, mengeksekusinya. Karena Leshiy berasal dari rawa-rawa, Putri Katak tidak dapat merayunya, dan jika dia mencoba, Leshiy akan menandai rumahnya, dan penduduk desa akan mencari tahu siapa dia sebenarnya. Lesha tidak pantas takut pada mantra Koshchei, tetapi Vasilisa bisa menyembuhkannya sampai mati. Jika Kot-Baiyun mencoba menyerang Lesha, maka ia berisiko kehilangan cakar besinya, dan kemudian Kot harus menidurkan para korban hanya dengan satu gumaman.



Baba Yaga


Baba Yaga juga bekerja sama dengan Perampok, menyulap di malam hari: ia bisa mengirim penyakit ke pemain lain, atau melindungi salah satu sekutu dari serangan. Sihirnya bahkan lebih kuat dari kutukan Leah. Pada sore hari, Baba Yaga juga aktif: orang yang berada di bawah perlindungannya tidak dapat dieksekusi bahkan oleh mayoritas suara. Namun, pasokan akar sihir untuk perlindungan siang hari terbatas, sehingga Baba Yaga tidak dapat melindungi siapa pun, termasuk dirinya sendiri, lebih dari tiga kali per game. Sore ini, Baba Yaga berpura-pura menjadi Gadis Merah yang biasa dan memberikan suara untuk semua orang.



Ular-Gorynych


Pada malam hari, Ular-Gorynych terbang di atas desa, hutan dan rawa-rawa dan terlibat dalam perampokan, mengungkapkan pada siang hari peran perampok. Pada sore hari, Ular tidur, karena itu tidak memilih, tetapi itu dapat dieksekusi oleh mayoritas suara. Ular itu sangat berbahaya bagi semua orang, terutama bagi Perampok dan Ivan Tsarevich. Tidak masalah siapa yang harus direbut, tetapi jika Serigala atau Goblin membukanya, dia bisa menjadi sekutu yang berharga. Jika Anda membunuh Ular di malam hari, Anda bisa, dengan beberapa kemungkinan, mendapatkan barang yang sangat berharga - Kulit Ular, yang akan melindungi pemiliknya sekali dari serangan fisik.



Terkenal bermata satu


Pria bermata satu yang terkenal di malam hari membunuh semua orang yang menghalangi jalannya dan tidak bisa membunuh (Leshy, Kota-Bajun, atau Zmety Gorynych) - dia mengutuk, jadi siapa pun yang mencoba berkomunikasi dengan yang terkutuk malam itu akan mati di siang hari. Terkutuklah dirinya juga binasa pada saat yang sama, hanya Kot-Baiun, yang hanya pergi tidur untuk mendapatkan kekuatan, melewatkan kursus malam berikutnya. Hanya Baba Yaga yang bisa menyelamatkan Likh dari kutukan. Kutukan itu tidak mempengaruhi orang yang mengalahkan Kota-Baiyun: dia, seperti Kucing, hanya pergi tidur dengan izin.



Putri Kodok


The Frog Princess tidak bisa memenangkan permainan, tetapi dia bisa mendapatkan banyak uang dengan merayu pemain lain di malam hari. Dirayu pada saat yang sama melewatkan langkah. Katak tidak dapat merayu Vasilisa si Bijaksana, dia juga harus menghindari Lesha, yang akan menyerahkannya kepada semua orang pada hari berikutnya. Jika Ivan Tsarevich atau Pemimpin Perampok menemukan Katak, mereka dapat mengundang warga sipil atau Perampok ke samping, sementara Ivan tidak menerima penolakan Katak, tetapi Pemimpin tidak begitu pilih-pilih. Tapi sang Putri cukup licik, bisa menjadi agen ganda, karena terlepas dari kenyataan bahwa dia sendiri tidak bisa menang, ini adalah peluang besar untuk mendapatkan emas, karena peluang mencapai akhir permainan sangat meningkat! Pada sore hari, Putri Kodok berpura-pura menjadi Gadis Merah dan memberikan suara untuk semua orang.



Koschey the Immortal


Koschey the Immortal tinggal di istananya. Pada malam hari, ia berjalan di sekitar desa-desa di sekitarnya dan zombie para sahabat Baik dan Red Maidens, yang pergi ke layanannya dan tanpa ragu menjalankan semua tugas. Menolak untuk melaksanakan perintah, misalnya, memberikan suara yang berbeda di siang hari daripada yang dikatakan Koschey, atau menulis pesan dalam obrolan di siang hari, jika Koshchei melarangnya, Hamba Koshchei binasa. Dengan demikian, Koschey dapat mempengaruhi hasil pemungutan suara di siang hari, meskipun ia sendiri tidak memberikan suara. Jika Koshchei terbunuh, semua korbannya juga mati. Vasilisa dapat menyembuhkan Hamba Koshchei, yang kemudian kembali ke peran aslinya. Ular-Gorynych dan Serigala memiliki kekebalan bawaan terhadap zombie, jadi Koschey, dengan semua keinginan, tidak dapat mengubahnya untuk melayani. Juga, Serigala dapat membantu Ivan atau Vasilisa keluar dari masalah dengan mengorbankan dirinya sendiri. Diselamatkan oleh Serigala memperoleh kekebalan serigala untuk zombie.



Gading Bayun


Gading Bayun tinggal di hutan, berburu di malam hari. Tidur di cekungannya di siang hari, jadi dia tidak berpartisipasi dalam pemungutan suara. Namun, pada siang hari ia dapat dieksekusi dengan suara mayoritas. Seekor kucing dapat menyerang dengan dua cara: mendengkur - dan kemudian korbannya tertidur dan tidak bisa berjalan di malam hari, dan juga untuk memberikan suara keesokan harinya - atau membunuh dengan segera menggunakan cakar besi. Serangan cakar tidak bekerja pada Ular-Gorynycha, tetapi, menyerang Leshy, Kucing bahkan dapat tetap tanpa cakar! Terkenal tidak bisa mengutuk Kucing, yang setelah kutukan hanya akan tidur satu malam. Jika seseorang mengalahkan Kota-Bajun untuk menaklukkan, ia akan disembuhkan dari segala penyakit dan penyakit, termasuk kutukan Liha. Kemampuan Kotova ini dipertahankan oleh pemain hingga akhir pertandingan. Para pelayan Koshchei tidak dapat memberikan suara untuk Kucing di siang hari, tetapi mereka secara tidak langsung dapat mengetahui siapa Kucing itu tanpa memberi tahu Koshchei tentang hal itu. Kot-Bayun tidak bersekutu dengan Ivan atau Perampok, jadi bagi Kot, mereka adalah tujuan utama.


Teknologi yang digunakan


Untuk menulis gim, saya memilih teknologi tanpa server berbasis OpenFaaS, karena cukup sederhana untuk mengatur gim, dan pada saat yang sama cukup berkembang untuk menulis aturan gim yang rumit tanpa komplikasi yang tidak semestinya. Saya juga akan menggunakan kluster Kubernetes, karena cara ini menyebarkan aplikasi membuatnya mudah dan dapat diandalkan untuk mendapatkan penyebaran cepat, kemampuan untuk skala mudah. Untuk membuat logika permainan, hanya OpenFaaS yang dapat ditiadakan, namun saya juga akan mencoba menjadikan Storyteller sebagai wadah terpisah untuk membandingkan kerumitan implementasi. Saya memilih Go sebagai bahasa pemrograman utama untuk layanan dan fungsi microser, karena saya telah mempelajarinya sejak lama di waktu senggang saya untuk menggantikan Perl, dan js akan digunakan untuk interaksi pengguna dengan layanan dan fungsi microser berdasarkan kerangka kerja tertentu. Saya akan berbicara tentang keputusan akhir dalam artikel terkait dalam seri ini. Untuk komunikasi antar fungsi, saya memilih NATS.io, karena saya sudah pernah menjumpainya sebelumnya, dan memiliki integrasi yang cukup mudah ke dalam Kubernetes.


Pengumuman


Source: https://habr.com/ru/post/id482010/


All Articles