معرفی
مشکل
بازیهای پارتی وقتی بهتریناند که همه در پنج ثانیه قانونشان را بفهمند، اما بیشتر بازیهای چندنفره حساب کاربری، نصب یا انتظار طولانی برای حریف میخواهند. میخواستم بازیای با یک قانون (در رینگ بمان) بسازم که آنلاین منصفانه باشد، روی هر دستگاهی اجرا شود و بازیکن را منتظر مسابقه نگذارد.
راهحل
Mini Sumo را بهصورت مونوریپو با کلاینت React Three Fiber و سرور Colyseus ساختم؛ سرور تکتک هلها، خروج از رینگ و برنده را تعیین میکند و کلاینت فقط ورودی میفرستد. همین Game Session درون کلاینت هم اجرا میشود و وقتی سرور در دسترس نباشد، یک حالت آفلاین کاملاً قابلبازی در برابر باتها فراهم میکند. مچمیکینگ سریع با پر شدن جای خالی توسط بات پس از ۳۰ ثانیه، اتاق خصوصی با لینک دعوت، کنترل کیبورد و لمسی، کمد لباس برای مو و صورت و لباس، و اقتصاد سکهی مجازی سمت سرور با آرنا، دفتر کل فقطافزودنی و فروشگاه ظاهری اضافه شد. نسخههای وب، ویندوز، macOS، لینوکس و اندروید بهصورت خودکار با GitHub Actions ساخته و منتشر میشوند.
تیم
پروژه شخصیفناوریها
- React
- React Three Fiber
- Three.js
- TypeScript
- Colyseus
- Node.js
- Vite
- Electron
- Capacitor
- Multiplayer Networking
- GitHub Actions
ویژگیهای کلیدی
چندنفرهٔ منصفانه با سرور معتبر
سرور Colyseus تکتک هلها، خروج از رینگ و برنده را تعیین میکند و کلاینت فقط ورودی میفرستد. مچمیکینگ سریع و اتاق خصوصی با لینک دعوت برای ۲ تا ۴ بازیکن.
حالت تمرین آفلاین
همان Game Session بهصورت محلی در برنامه اجرا میشود؛ بازی بدون سرور و در برابر باتها کاملاً قابلبازی است و در صورت قطع بودن سرور خودکار به آفلاین برمیگردد.
کمد لباس و سکههای سومو
ظاهر کشتیگیر را با مو، صورت و لباس شخصی کنید و در آرناها سکهی مجازی بگیرید یا خرج کنید. ظاهر هرگز روی گیمپلی اثر ندارد.
اجرا روی هر دستگاه، انتشار خودکار
نسخههای وب، ویندوز، macOS، لینوکس و اندروید با کنترل کیبورد و لمسی که توسط یک پایپلاین CI بهصورت GitHub Release منتشر میشوند.
گالری
آموختهها
داشتن یک Game Session معتبر و استفادهی مجدد از آن در سرور و کلاینت، حالت آفلاین را تقریباً رایگان کرد و همهٔ قوانین را در یک جای تستشده نگه داشت. ساختن اقتصاد از همان ابتدا سمت سرور، با کلیدهای idempotency و بازپرداخت، خیلی سادهتر از اضافهکردن انصاف در مراحل بعدی بود.

