برنامه نویسی

Mafia: A Serverless Game Multiplayer

این اولین پستی است (امیدوارم بسیاری از آنها) که در آن سفر خود را با ایجاد یک بازی چند نفره بدون سرور مستند می کنم. مافیا (نام نهایی نیست… مگر اینکه؟؟؟).

من قصد دارم از این پست اول برای پوشش ابزارهایی که قصد استفاده از آنها را دارم استفاده کنم و یک ایده کلی از اینکه این بازی در پایان چگونه باید باشد ارائه دهم. پس بزن که بریم…

این بازی چیه؟

من این بازی را به شدت بر روی بازی محبوب روی میز با همین نام پایه گذاری می کنم. این یک بازی کسر اجتماعی است که در آن یک تیم اکثریت، یعنی Townies، سعی می کنند تیم اقلیت مخالف، مافیا را ریشه کن کنند.

اعضای مافیا از متحدان خود آگاه هستند و باید با هم همکاری کنند تا شهر را گمراه کنند و از سوء ظن جلوگیری کنند. بازیکنان شهر از نقش شخص دیگری آگاه نیستند و باید از استدلال قیاسی خود برای یافتن بدکاران استفاده کنند.

مکانیک

این بازی کاملاً مبتنی بر نوبت نیست، اما از یک اصل مشابه پیروی می کند. چهار حالت وجود دارد؛ صبح، روز، عصر و شب.

در طول روز، همه اعضای شهر (شامل اعضای مافیا) جمع می شوند تا درباره سرنخ هایی که در مورد مافیا پیدا کرده اند صحبت کنند. در این زمان آنها همچنین ممکن است تصمیم بگیرند که بازیکنی را به ظن عضویت در مافیا حذف کنند.

در Evening، انجمن عمومی بسته می شود و به بازیکنان زمان داده می شود تا مکالمه روز خود را پردازش کنند، و در صورت امکان با نقش خود می توانند بازیکنی را برای هدف قرار دادن آن شب انتخاب کنند. به عنوان مثال، یک کارآگاه ممکن است ترجیح دهد بازیکن دیگری را دنبال کند و ببیند که در آن شب چه کسی را ملاقات می کند. اعضای مافیا می توانند در این مدت با یکدیگر گفتگو کنند.

در طول شب، بازی تمام اقدامات بازیکن را پردازش می کند.

در صبح، وقایع شب قبل برای شهر آشکار می شود.

چرخه تکرار می شود تا زمانی که یک برنده وجود داشته باشد.


از بس که با چیزهای شهوانی صحبت کنید، در مورد پشته فناوری به من بگویید!

طعنه سنگین 🙂

ابزارهایی که برای ساختن آن استفاده می کنم

من می خواهم بازی در این مرحله در مرورگر وب قابل بازی باشد، ممکن است در آینده تغییر کند. همچنین در درجه اول از AWS برای Backend استفاده می شود.

Backend

تمام منطق برنامه ها در پایتون نوشته می شود.

Frontend

قسمت جلویی با Quasar Framework – یک بسته بندی Vue.js ساخته خواهد شد. Quasar بسته‌هایی با مجموعه وسیعی از اجزای از پیش ساخته شده و مستندات بسیار کامل ارائه می‌کند. یک مزیت اضافی این است که Quasar فرآیند بسته‌بندی یک کد پایه واحد را در قالب‌های چندگانه استقرار ساده می‌کند. وب، موبایل و دسکتاپ. این جرقه شادی می دهد.

چسب

همانطور که قبلاً گفتم هدف من از این پروژه 100٪ بدون سرور است، با این حال نیاز دیگری وجود دارد که به همان اندازه مهم است. 100٪ زیرساخت به عنوان کد. IaC دقیقاً همانطور که می‌خواند، تمام زیرساخت‌ها در آن پوشش داده شده است Backend بخش باید به صورت کد ارائه شود، بدون اینکه نیازی به ایجاد دستی در AWS نباشد.

چندین مزیت برای این رویکرد وجود دارد:

  1. تغییرات زیرساخت را می توان با Git ردیابی کرد. ویرایش دستی از طریق کنسول AWS غیرقابل ردیابی است و هیچ سابقه ای ایجاد نمی کند.
  2. پروژه را می توان تنها با یک دستور مستقر کرد. اگر من در استرالیا مستقر شوم، و سپس دلیلی برای استقرار در آمریکای شمالی داشته باشم، باید بتوانم این کار را با اطمینان و سرعت انجام دهم.
  3. پروژه را می توان با یک فرمان از بین برد. این بسیار مهم است. اگر به این نتیجه رسیدم که هزینه ناپایدار می شود، باید بتوانم تمام آثار آن را به طور کامل از بین ببرم بدون اینکه بقایایی باقی نماند. زمین سوخته.

چارچوب IaC که من برای این پروژه استفاده خواهم کرد، پشته بدون سرور (SST) است.

SST یک کیت توسعه معماری ابری است که به شما امکان می‌دهد زیرساخت را به‌عنوان کد با استفاده از AWS CDK پایه با پیشرفت‌هایی که به سمت برنامه‌های بدون سرور تنظیم می‌شوند، فراهم کنید. اگر در گذشته از ارائه دهندگان IaC مانند Terraform، AWS CDK، Serverless، SAM و غیره استفاده کرده اید – من به طور جدی توصیه می کنم SST را بررسی کنید. این سطح بعدی است.


فرآیند، MVP و جدول زمانی

این پروژه راهی است که من در ابتدا به توسعه ابر بدون سرور می پردازم. من از چیزی که به آن علاقه دارم برای ایجاد انگیزه و ارتقاء مهارت خود در زمینه ای استفاده می کنم که فکر می کنم آینده است. به همین دلیل سعی خواهم کرد تا آنجایی که می‌توانم بهترین روش‌ها را دنبال کنم و در صورت پذیرش آن‌ها را در اینجا به اشتراک بگذارم.

در زیر یک نمودار جریان با نقشه معماری تقریبی من است. این بدون شک با بلوغ پروژه تغییر خواهد کرد.

روند

اقدامات کاربر از طریق REST API به دروازه Api AWS ارسال می شود. این درخواست ها را به میکروسرویس مناسب لامبدا که نامیده می شود توزیع می کند کنترل کننده ها. کنترلرها تمام منطق برنامه ها را بین سرویس های frontend و backend مانند پایگاه داده مدیریت می کنند.

از آنجایی که هیچ سروری وجود ندارد، نمی توانم وضعیت مداوم را حفظ کنم. تمام اقدامات کاربر باید در پایگاه داده نوشته شود. در طول دنباله Night، تمام اقدامات کاربر از پایگاه داده خوانده می شود و با داده های مربوط به بازی (تنظیمات و غیره) ترکیب می شود.

اقدامات ترکیبی کاربر و تنظیمات بازی با استفاده از سفارشی من حل می شود موتور مافیا. با این کار وضعیت بازی حل شده به کاربران باز می گردد.

حداقل محصول قابل دوام

حداکثر تعداد بازیکنان در یک بازی 15 نفر است. یک بازی معمولی 9 بازیکن شهر، 3 بازیکن مافیا و 3 بازیکن خنثی خواهد داشت. یک بازی کاملاً برجسته، تنوع نقش زیادی بین بازیکنان خواهد داشت، با این حال از آنجایی که بازیکنان می توانند نقش مشابهی را به اشتراک بگذارند، موارد زیر را هدف قرار خواهم داد.

شهر: شهروند، دکتر، بادیگارد، کارآگاه، اسکورت

مافیا: مافیوزو، رابط (اسکورت شیطانی)

خنثی: قاتل سریالی، بازمانده، جستر (البته)

بازی به یک سیستم لابی کاملاً کارآمد، انتقال مرحله (صبح/شب/غیره) و وضوح حالت نیاز دارد.

جدول زمانی

من کار معمولی را از اوایل ژانویه 2023 شروع کردم و پیشرفت هفتگی مناسبی را حفظ کردم. امیدوارم تا 2 ماه دیگر (پایان آوریل) نسخه قابل بازی این بازی را داشته باشم. از هم‌اکنون تا آن زمان، به‌روزرسانی‌های منظم را هدف می‌گیرم و موانع و راه‌حل‌های فنی را پوشش می‌دهم.


نتیجه

من به خصوص نمی خواهم این سریال یک بازی عمومی “devlog” باشد. انگیزه واقعی پشت این پروژه آشنایی با توسعه ابر بدون سرور بود و من فکر می کنم که این یک فرصت یادگیری عظیم خواهد بود.

چیزی که بیشتر به نوشتن در مورد آن علاقه دارم نشان می دهد که چگونه برخی از ویژگی های بدون سرور را پیاده سازی کرده ام و یک مورد استفاده قانونی ارائه کرده ام که آن را برآورده می کند.

اگر این پروژه جالب به نظر می رسد، خوشحال می شوم از شما بشنوم، به خصوص اگر می بینید که من در حال دویدن در یک دام کلاسیک هستم.

توجه: من اسناد فنی تا حدودی به روز را برای پروژه در https://mafia-sdg.netlify.app/ نگه می دارم.

به سلامتی،

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا