20 موردی که هنگام نوشتن یک بازی چند نفره با Django و React آموختم
توسعه یک بازی چند نفره هیچ شاهکار کوچکی نیست. این ترکیبی از حل مسئله ، یادگیری ابزارهای جدید و پیمایش از طریق چالش های غیر منتظره است. به تازگی ، من یک بازی چند نفره آنلاین Pong را با Django به عنوان پس زمینه ساختم و به عنوان جبهه واکنش نشان می دهم. می توانید بازی را در ft-pong.me انجام دهید ، و اگر با هر مشکلی روبرو شدید یا پیشنهادی دارید ، لطفاً آنها را در مخزن GitHub ما گزارش دهید. در اینجا دروس کلیدی که من در طول راه آموخته ام آورده شده است:
1 مدیریت دولت برای بازی های چند نفره بسیار مهم است
مدیریت وضعیت بازی در بین بازیکنان و همگام سازی آن با سرور یک بخش چالش برانگیز و در عین حال اساسی در ساخت یک بازی چند نفره است. من اهمیت ذخیره سازی وضعیت بازی را به طور کارآمد یاد گرفتم. استفاده از Refs برای ذخیره به روزرسانی های حالت ، به اطمینان از ارائه صاف و بدون ایجاد مجدداً غیر ضروری کمک کرد.
2 تشخیص برخورد یک هنر است
اجرای تشخیص دقیق برخورد بین توپ و بالشتک ها نیاز به محاسبه زاویه گزاف گویی بر اساس نقطه ضربه. ترفندهای کوچک این محاسبات به طور قابل توجهی روی گیم پلی تأثیر گذاشت و اهمیت دقت را در فیزیک بازی به من آموزش داد.
3 ارتباطات پیشانی
من اهمیت طراحی یک پروتکل ارتباطی روشن را بین جبهه React و پس زمینه Django یاد گرفتم. هنگامی که من به تولید تغییر کردم و از NGINX با HTTP/2 استفاده کردم ، در هنگام اتصال و جدا کردن وقایع با مشکلات مسابقه داده روبرو شدم زیرا درخواست ها سریعتر شدند. علاوه بر این ، من فهمیدم که گروه های کانال های Django فقط یک سیستم پخش هستند و نمی توانند اعضا را شمارش کنند ، که نیاز به تجدید نظر در نحوه مدیریت کاربران متصل به طور مؤثر دارد.
4 تعادل منطق بازی بین جلو و پس زمینه
تصمیم گیری در مورد اینکه کدام بخش از منطق بازی باید روی پس زمینه در مقابل جبهه اجرا شود بسیار مهم بود. در حالی که باطن منبع حقیقت برای وضعیت بازی بود ، جبهه به روزرسانی و به روزرسانی های جزئی دولت برای بهبود پاسخگویی رسیدگی کرد.
5 استفاده از TypeScript برای تجربه بهتر توسعه دهنده
استفاده از TypeScript در Frontend React به گرفتن خطاها زودتر کمک کرد و حفظ پایگاه کد من را آسانتر کرد. با یک پروژه این مجموعه ، نوع ایمنی از من ساعت های بی شماری از اشکال زدایی را نجات داد.
6 تست ویژگی های چند نفره
تست یک بازی چند نفره برای من یک چالش جدید بود. من اغلب مجبور شدم چندین بازیکن را به صورت محلی شبیه سازی کنم که به راه حل های خلاقانه و صبر زیادی نیاز داشت. اشکال زدایی تعامل در زمان واقعی ، یک لایه اضافی از پیچیدگی اضافه کرد.
7 نحوه حذف پرونده از تعهدات قبلی
من در ابتدا فشار دادم .env
پرونده برای راحتی ، اما وقتی تصمیم گرفتیم مخزن را علنی کنیم ، یاد گرفتم که چگونه با استفاده از دستوراتی مانند آن را از کل تاریخ git حذف کنم git filter-repo
بشر این یک درس کلیدی در تأمین داده های حساس بود.
8 انتخاب ابزارهای مناسب برای CSS
در ابتدا ، من از ماژول های CSS و CSS معمولی برای سبک کردن برنامه استفاده کردم. در حالی که این کار کار می کرد ، فهمیدم که جابجایی به Tailwind CSS می تواند روند را به میزان قابل توجهی سرعت بخشد. رویکرد اول ابزار Tailwind باعث می شود نمونه اولیه و سریعاً تکرار شود. علاوه بر این ، استفاده از کتابخانه ای مانند Shadcn برای اجزای از پیش ساخته می تواند در زمان و تلاش صرفه جویی کند و به شما این امکان را می دهد تا بیشتر به جای طراحی اجزای از ابتدا روی عملکرد تمرکز کنید.
9 ابزارهای اسناد و آزمایش API
استفاده از ابزارهایی مانند Swagger برای تجسم نقاط پایانی API ، درک و مستندسازی پس زمینه را آسانتر کرده است. علاوه بر این ، Postman برای آزمایش سریع درخواست های API و مشکلات اشکال زدایی بسیار ارزشمند بود. این ابزارها روند توسعه را ساده تر کرده و ارتباطات ارتباطی بین اعضای تیم را کاهش می دهد.
10 دست زدن به اتصالات WebSocket
مدیریت چندین اتصال WebSocket برای یک بازیکن یک چالش بود. هنگامی که بازیکنی که از یک برگه یا مرورگر دیگر متصل است ، WebSocket قدیمی بسته شد و بازیکن به صفحه اصلی هدایت شد. این یک اتصال فعال برای هر بازیکن را تضمین می کند و از درگیری های احتمالی جلوگیری می کند.
11 در داخل ظروف لینت
هنگام اجرای برنامه در داخل ظروف ، متوجه شدم که ابزارهای Linting به راحتی در دسترس نیستند. برای پرداختن به این ، من استفاده کردم flake8
برای پایتون لینت. این تنظیم کیفیت کد مداوم را در سراسر تیم تضمین کرده و به دستیابی به مسائل در اوایل توسعه کمک کرده است.
12 آزمایش و توسعه مداوم
آزمایش ضروری است. اتخاذ یک رویکرد توسعه آزمایش محور به من کمک کرد تا زود هنگام اشکالات را بگیرم و یک پایگاه کد پایدار را حفظ کنم. علاوه بر این ، استفاده از اقدامات GitHub برای آزمایش خودکار و لینت ، کیفیت کد مداوم را در طول پروژه تضمین می کند.
13 سازگاری با محیط های تولید
همه چیز در مقایسه با توسعه در تولید متفاوت است. راه اندازی فرآیند استقرار زودهنگام برای توسعه مداوم بسیار مهم است. به عنوان مثال ، اجرای دافنه در تولید نیاز به افزودن دارد django.setup()
برای اطمینان از اولیه سازی مناسب.
14 اهمیت تکنیک های اشکال زدایی
یادگیری تکنیک های مناسب اشکال زدایی وقت زیادی را برای من صرفه جویی کرد. به جای اینکه کد من را با هم به هم بزنم print
بیانیه ها ، من از ابزارها و رویکردهای بهتری برای شناسایی و رفع مسائل کارآمدتر استفاده کردم.
15 نوشتن قبل از برنامه نویسی
نوشتن ایده ها و برنامه ریزی قبل از پرش به برنامه نویسی به من کمک کرد تا افکار خود را ساختار دهم و از بازنویسی های غیر ضروری جلوگیری کنم.
16 هنگام گیر کردن استراحت
هنگامی که من نتوانستم یک اشکال را برطرف کنم ، قدم بردارم برای استراحت قهوه یا انجام کار دیگری که اغلب به من یک دیدگاه تازه می داد و به من کمک می کرد تا سریعتر راه حل ها را پیدا کنم.
17 درک اصول امنیت وب
CSRF داشتن درک اساسی از مفاهیم امنیت وب مانند هدر CORS ، هنگام کار با یک پروژه که دارای دامنه های جلوی و پس زمینه جداگانه بود ، وقت زیادی را برای من صرفه جویی کرد.
18 متن async و sync_to_async
هنگام کار در یک زمینه ناهمزمان ، کارکردهای همزمان را بدون پیچیدن آنها اجرا کنید sync_to_async
می تواند حلقه رویداد را مسدود کند و باعث ایجاد اشکالات سخت شود. بسته بندی صحیح چنین توابع عملکرد صاف را تضمین می کند و از مشکلات عملکرد جلوگیری می کند.
19. تعادل یادگیری و پایان
یک نبرد مداوم بین یادگیری مفاهیم جدید و دیدار با مهلت پروژه وجود داشت. در حالی که یادگیری پاداش دهنده بود ، تمرکز روی تحویل ها به ما کمک کرد تا زودتر پروژه را تمام کنیم.
20 شادی حل مسئله
سرانجام ، ساختن یک بازی چند نفره به من یادآوری کرد که چرا عاشق برنامه نویسی هستم. هر اشکال ، مسئله تاخیر یا چالش طراحی فرصتی برای یادگیری و رشد به عنوان یک توسعه دهنده بود.
این سفر مملو از درسهایی بود که امیدوارم در سفر توسعه خود الهام بخش و به دیگران کمک کند.