رزمآور؛ ساخت بازی سهبعدی فارسی از منطق نبرد تا شبکه
رزمآور نمونهای از توسعه بازی دسکتاپ با فناوریهای JavaScript است: رندر سهبعدی با Three.js، اجرای دسکتاپ با Electron و ارتباط چندنفره با امکانات شبکه Node.js. محصول، پنج نقشه، مأموریتهای تکنفره، مبارزه آزاد آنلاین و داراییهای صوتی فارسی را در یک تجربه واحد ترکیب میکند.
التحدي
مسئله پروژه فقط ساخت یک صحنه سهبعدی نیست. حرکت و برخورد، اسلحهها، رفتار رباتها، شرایط پایان مأموریت و نمایش رابط باید با هم هماهنگ باشند. حالت چندنفره نیز به مدیریت وضعیت مسابقه و ارتباط بازیکنان نیاز دارد. در کنار این بخشها، تجربه فارسی، پخش محلی دیالوگها و بستهبندی دسکتاپ باید جزئی از همان محصول باقی بمانند.
الحل الهندسي
سورس مسئولیتها را میان ماژولهای گرافیک، نقشه، منطق میدان، عملیات و جهان چندنفره تقسیم میکند. محیط Electron، قابلیتهای شبکه را از طریق یک رابط IPC محدود به بخش نمایش متصل میکند. ارتباط مسابقه با TCP و کشف محلی با UDP تعریف شده است. متنها و فایلهای صوتی فارسی در ماژولها و داراییهای مستقل قرار دارند و گردشکار ساخت، بررسی منطق و شبکه را پیش از بستهبندی تعریف میکند.
النتائج التشغيلية
خروجی، یک بازی دسکتاپ با حالت تکنفره و چندنفره و محتوای فارسی است. مخزن، سورس، تصاویر واقعی، فایلهای صوتی محلی، اسکریپتهای آزمون و تنظیمات ساخت برای سه خانواده سیستمعامل را در اختیار توسعهدهنده میگذارد. اعداد پنج نقشه، چهار اسلحه و ۵۳ دیالوگ از داراییها و مستندات همین نسخه گرفته شدهاند؛ عددی برای نرخ فریم، تأخیر شبکه یا تعداد کاربران ادعا نشده است.
معمارية النظام
game.js جریان بازی و اتصال رابط به رویدادها را مدیریت میکند. graphics.mjs مسئول نمایش سهبعدی است و maps.mjs و arena.mjs تعریف میدان، برخورد و بخشهایی از منطق نبرد را در بر دارند. operations.mjs مأموریتها، نارنجکها، فروشگاه و بقا را جدا میکند. multiplayer-world.mjs و network.cjs وضعیت معتبر سرور و ارتباط شبکه را پوشش میدهند. main.cjs، preload.cjs و network-ipc.cjs مرز Electron و رابط شبکه را تعریف میکنند؛ در تنظیمات پنجره، contextIsolation و sandbox فعال و nodeIntegration غیرفعال است.
الأقسام التقنية
تجربه بازی؛ پنج میدان با هویت متفاوت
TEXT_IMAGEپنج نقشه با محیطهای کویری، بازار، دهکده، نیروگاه و ایستگاه قطار در سورس تعریف شدهاند. تفاوت مسیرها، پوششها و محوطههای مأموریت به بازیکن موقعیتهای متفاوتی میدهد. تصاویر گالری از خود بازی گرفته شدهاند و تصویر مفهومی نیستند.
مأموریتهایی فراتر از حذف همه دشمنها
TEXT_IMAGEپاکسازی، کاشت و محافظت، خنثیسازی و بقا، هرکدام شرط پیشرفت و پایان متفاوت دارند. فروشگاه، چالشها و سه نوع نارنجک در تکنفره در دسترساند. در حالت آنلاین، مبارزه آزاد و امتیازگیری اجرا میشود و امکانات تکنفره بهعنوان قابلیت آنلاین معرفی نشدهاند.
چهار اسلحه و اطلاعات روشن در میدان
TEXT_IMAGEکلاشینکف، امچهار، تکتیرانداز و دزرت ایگل، رفتار شلیک و ظرفیت مهمات متفاوت دارند. نمایش جان، زره، خشاب، زمان راند و نقشه کوچک، اطلاعات مورد نیاز بازیکن را هنگام نبرد کنار هم قرار میدهد. تنظیمات و رکوردهای محلی برای ترکیبهای نقشه و حالت نگهداری میشوند.
چندنفره با میزبانی شخصی
TEXT_IMAGEمیزبان سرور را از داخل برنامه ایجاد میکند و ظرفیت دو، چهار یا هشت بازیکن را انتخاب میکند. جستوجوی شبکه محلی با UDP و ارتباط مسابقه با TCP پیادهسازی شده است. اتصال مستقیم به آدرس میزبان نیز در دسترس است؛ اتصال اینترنتی به تنظیم شبکه و دسترسی ورودی میزبان وابسته است.
هویت فارسی در تصویر و صدا
TEXTمنوها و نوشتههای بازی فارسیاند و نامهای ایرانی برای شخصیتها استفاده شده است. ۵۳ فایل MP3 آماده در مخزن قرار دارند و بهصورت محلی پخش میشوند. طبق مستندات داراییها، صداها با Piper و مدل فارسی تولید شدهاند؛ مدل تولید صوت جزئی از زمان اجرای بازی نیست.
از ماژولهای مستقل تا خروجی دسکتاپ
TEXTتفکیک منطق، گرافیک، عملیات، شبکه و صدا امکان بررسی مستقل بخشها را فراهم میکند. اسکریپتهای مخزن منطق بازی، نقشهها، چندنفره، صدا و ارتباط شبکه را پوشش میدهند. پیکربندی electron-builder و GitHub Actions ساخت خروجی برای Windows، Linux و macOS را تعریف میکند؛ تنظیم بیلد بهتنهایی تضمین اجرای بدون مشکل روی همه دستگاهها نیست.
