سه راهی که دیدم پروژههای بازیسازی آماتور از مسیر خارج میشوند، و هرکدام با بهجا گذاشتن یک آشفتگی، به شما نشان میدهند تنظیمات درست واقعاً چه شکلی است.
اشتباه اول: اعتماد به مرورگر برای نگهداری امتیاز
رایجترین و در عین حال قابلاجتنابترین اشتباه. کسی یک بازی با جدول امتیازات میسازد، یک WebSocket برای بخش چندنفره وصل میکند، و اجازه میدهد کلاینت امتیاز نهایی را محاسبه کند و بعد آن را با POST به سرور بفرستد. هیچ اعتبارسنجیای در ورودی وجود ندارد. خودم شاهد این ماجرا بودم — حدود چهار دقیقه طول کشید تا یک بازیکن حوصلهسررفته DevTools را باز کند، تب شبکه را پیدا کند و شروع کند به ارسال امتیازهای نهرقمی. نه به این خاطر که هکر بود. به این خاطر که بازی خودکار در دستش گذاشته بود و از او خواسته بود امتحان خودش را نمرهگذاری کند.
راهحل هوشمندانهای نیست، فقط خستهکننده است: هیچوقت به کلاینت اعتماد نکنید، همین. هر عملی باید سمت سرور دوباره اعتبارسنجی شود، هر تیک فیزیک باید با آنچه سرور بهعنوان واقعیت میداند تطبیق داده شود، و باید هزینه تأخیر رفتوبرگشت وضعیت را بپذیرید بهجای رندر محلی و امیدواری به اینکه کسی زیر کاپوت را نگاه نکند. به همین دلیل است که اقتدار سمت سرور در اینجا یک آیتم دلخواه نیست — استاندارد است. بازیای که بتوان از کنسول مرورگر شکستش داد، همانقدر جدی خراب تلقی میشود که یک کرش، چون عملاً همان است.
اشتباه دوم: یک عنصر canvas و یک بوق، به اسم بازی
این نوع بازی در دمو خیلی خوب به نظر میرسد و در نود ثانیه بازی واقعی از هم میپاشد. چند ترنزیشن CSS، یک بررسی برخورد، یک موج سینوسی بهجای صدای مشت — در ضبط صفحه خوب دیده میشود، اما اولین بازیکن واقعی میگوید حرکت حس درستی ندارد و نمیتواند دلیلش را توضیح دهد. مشکل از فیزیک است. کد دستینویس «اگر برخورد داشت، برگرد» هرگز جرم، اصطکاک و واکنش برخورد را درست شبیهسازی نمیکند، و بازیکنان حتی اگر نتوانند نامش را بگذارند، این خلأ را حس میکنند.
پروژههای بازیسازی اینجا بهجای آن، از رندرینگ واقعی موتور استفاده میکنند:
- فیزیک و رندرینگ — three.js با شبیهسازی فیزیک واقعی برای پروژههای وب، و برای هر چیز سنگینتر، یونیتی ۶ واقعی در آزمایشگاه.
- هنر — از سوی مدیر طراحی تأمین میشود، نه یک بسته اسِت آماده.
- صدا — سازهای نمونهبرداریشده، نه یک اسیلاتور که تلاش میکند صدای قدم را تقلید کند.
توضیح مفصلتر اینکه چرا این موضوع اختیاری نیست، در موتورهای واقعی، پروژههای واقعی آمده است.
زنجیره اعتبارسنج، خطاهایی را میگیرد که یک اسکرینشات نمیتواند:
- کلیدها را فشار میدهد.
- بررسی میکند که امتیاز واقعاً تغییر میکند.
- به خروجی صدا گوش میدهد.
بهنظر خیلی ابتدایی میآید تا اینکه متوجه شوید چند پروژه اولین فریم را کامل رندر میکنند و بعد بیسروصدا قفل میشوند چون یک event listener هرگز متصل نشده. یک تصویر ثابت این را نشان نمیدهد. اما اعتبارسنجیای که باید سه دور بازی را دوام بیاورد، میتواند.
اشتباه سوم: مجبور کردن دوستتان به راهاندازی یک سرور برای بازی کردن
نمونههای اولیه خوب چندنفره دائماً در همین مرحله میمیرند — نه به این خاطر که بازی بد است، بلکه چون «اول npm install سرور را بزن، بعد این سه متغیر محیطی را تنظیم کن» برای یک نفر در یک سهشنبهشب زیادی است. شما چیز جذابی ساختهاید و آن را زیر یک راهنمای نصب دفن کردهاید.
بازیهای تکنفره اینجا دقیقاً مثل هر سایت دیگری منتشر میشوند — یک کلیک تا یک زیردامنه فعال، بدون فرآیند جداگانهای که باید یاد بگیرید. چندنفره فرق دارد چون یک فرآیند سرور واقعی باید جایی در حال اجرا بماند، پس اینها روی یک صفحه بازی عمومی منتشر میشوند و میزبانی بهطور خودکار برایتان مدیریت میشود. کل هدف ساده است: «میخوای بازی کنی؟» باید یک URL باشد که در چت گروهی میفرستید، نه یک README.
چیزی که این تضاد نشانتان میدهد
توجه کنید چه چیزی از هر سه اشتباه بالا غایب است: دونفره محلی. یک صفحهکلید، دو نفر، معمولاً WASD در برابر کلیدهای جهتدار، آرنجها به هم میخورند — این حالتی است که مردم دستِکم میگیرند چون هیچ مشکل توزیعی ندارد. نه لینکی، نه سروری، نه دوستی که ساعت ۱۱ شب باید روی چیزی کلیک کند. فقط کسی که کنارتان نشسته و سی ثانیه «نه صبر کن، تو بازیکن دوم هستی، از فلشها استفاده کن».
| دونفره محلی | چندنفرهی آنلاین | |
|---|---|---|
| آموزش شروع | «نه صبر کن، تو بازیکن دوم هستی، از فلشها استفاده کن» — سی ثانیه | پیدا کردن حریف، صفحههای خالی «در انتظار حریف» |
| توزیع | صفر — نه لینکی، نه سروری، لازم نیست کسی ساعت ۱۱ شب روی چیزی کلیک کند | به یک صفحهی بازی عمومی و حضور همزمان یک نفر دیگر آنلاین نیاز دارد |
| تبدیل | تقریباً ۱۰۰٪ — تنها اصطکاک، «صندلیات را بچرخان» است | در انتظار حریف، ریزش کاربر رخ میدهد |
ساختههای هاکی روی هوا و نبرد در آرنا در نمایشگاه دقیقاً روی همین نکته تکیه دارند.
این سه راهحل را کنار هم بگذارید — اقتدار سمت سرور، موتورهای واقعی، صفحات بازی عمومی میزبانیشده — بهعلاوهی مزیت ذاتی حالت دونفرهی محلی، و به دامنهی واقعی توانایی این ابزار میرسید:
- تکنفره — خط پایه.
- دونفرهی محلی — پیروزی رایگان.
- چندنفرهی آنلاین — طوری ساخته شده که در برابر یک نوجوان بیحوصله با DevTools باز هم دوام بیاورد.
هر بازی در کتابخانهی «بازیهای من» جمع میشود، همراه با وضعیت انتشار هر بازی، بنابراین لازم نیست در میان پیامهای قدیمی چت بگردید تا بفهمید کدام نسخه خوب بوده است. و اگر چیزی را برای اندروید بستهبندی کرده باشید، مستقیم به مسیر فروشگاه ادامه پیدا میکند، بهجای آنکه فرایندی جداگانه از صفر شروع شود.



