بازی سازی

بازی تحت شبکه – تکنولوژی ها و معماری

نوشته شده توسط امین سجودی

مقدمه

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

 

نوع ارتباط تحت شبکه

۱- ریل تایم نیست . یعنی هر قرار نیست همه چی همه جا سینک باشه .برای نمونه بازی های ریل تایم مثل کانتر و دوتا و wow و خیلی بازی های معروف روی PC ریل تایم هستن و بازی های غیر ریل تایم مثل Clash of clans ، فروت کرفت ، خروس جنگی و … .

امیدوارم تفاوت این دو نوع رو درک کرده باشید. به طور کلی توی بازی های غیر ریل تایم Ping، lag ،delay خیلی مطرح نیستن به نسبت بازی های ریل تایم . توی بازی کانتر شما به محض اینکه اینترنتون قطع بشه از بازی خارج می شید ولی توی بازی فروت کرفت مادامی که کاری انجام ندین بازی متوجه قطع بودن اینترنت شما نمیشه .(حتی شاید بتونین کارت ها تون رو نگاه هم بندازین)

۲- در هر لحظه که تبادل اطلاعات مد نظر بود یک درخواست به سرور داده می شه و سرور اطلاعات را در قالب پاسخ بر می گردونه .

 

خوب فکر کنم سبک بازی و نوع بازی دستتون اومده باشه . من می خوام فقط یک دید کلی بهتون بدم . چیزی که خیلی از بازی سازها وقتی می خوان از یک بازی تک نفره به یک بازی چند نفره سوییچ کنن ، ندارن . (یک دید کلی)

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

روند ارتباط

روند کاری توی این بازی ها به این شکل هستش که در سمت سرور شما API دارید . حالا API چیه ؟ API جیز خاصی نیست ، فقط شما یک آدرس اینترنتی رو صدا می کنید و یکسری اطلاعات همراه اون می فرستید (به این می گن Request ) و سرور در جواب یکسری اطلاعات برای شما بر می گردونه (به این میگن Response). در حقیقت شما با صدا کردن یک آدرس اینترنتی یک تابع درون کد های سمت سرور رو صدا می کنید . مثلا فرض کنیم می خوایم آیتم های بازیکن رو لود کنیم . برای این کار یک Request به سرور می زنیم و توش اسم بازیکن رو می فرستیم برای سرور . سرور اسم بازیکن رو بررسی می کنه و در نهایت در Response لیستی از آیتم های بازیکن برای ما(منظور از ما کلاینت بازی است ، همون نرم افزاری که با یونیتی یا هر گیم انجین دیگه می سازیم) می فرسته .

استاندارد های ارتباط

حالا این اطلاعات چجوری رد و بدل می شن ؟ یعنی چی می فرسته می فرستیم و … .

برای اینکه سرور و کلاینت با هم صحبت کنن و اطلاعات رد و بدل کنن باید یک استانداردی وجود داشته باشد . علت وجود استاندارد هم اینه که سرور و کلاینت دو نرم افزار کاملا مجزا هستند و در دو پلتفرم جداگانه با تکنولوژی ها و زبون های غیریکسان(نه لزوما) اجرا میشن ، پس به صورت عادی نمی تونن با هم ارتباط بر قرار کنن . پس برای بر قراری ارتباط به یک استاندارد احتیاج دارن که بتوننن با هم صحبت کنن . معمولا برای رد و بدل کردن داده توی وب از XML یا JSON استفاده می کنن .استفاده از JSON بیشتره چون بهتره و هدر رفت اطلاعات کمتری داره .

البته باید این نکته رو هم اصافه کنم که بهینه ترین راه انتقال اطلاعات تحت شبکه تبدیل اون به باینری است. منتها برای اینکار باید از تکنولوژی های دیگه ای استفاده کنید که یکم کار رو سخت می کنه. به طور مثال کسانی که علاقمند هستند می تونند Thrift رو سرچ کنند.

جمع بندی

خیلی خوب پس تا اینجا فهمیدیم که کلاینت بازی ما یک Request به سرور می زنه (یک URL رو باز می کنه) ، اطلاعاتی که می خواد برای سرور بفرسته رو به شکل JSON در میاره . سرور اطلاعات رو به شکل JSON  دریافت می کنه ، اون رو بازخوانی می کنه . فعالیت مورد نظرش رو انجامی میده و سپس جواب(Response) رو در قالب JSON  برای کلاینت می فرسته . کلاینت JSON رو بازخوانی می کنه و از اطلاعات استفاده می کنه .

خیلی خوب پس نحوه تبادل اطلاعات بین کلاینت و سرور رو یاد گرفتید .

تخصص های مورد نیاز

در درجه اول شما به یکسری بازی ساز احتیاج دارید 🙂 . که توانایی ساخت بازی تک نفره رو داشته باشن (با هر ابزاری ، می خواد یونیتی باشه ، گیم میکر باشه ، کرونا باشه ، کوکوس باشه و …)

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

علاوه بر اینها شما به حداقل یک سرور احتیاج دارید که برنامه ای که وب دولوپر هاتون می سازن رو روی اون قرار بدید .(قاعدتا دیتابیس اطلاعاتتون هم روی همین سرور قرار خواهد گرفت)

بازی سازهاتون می تونن به این سرور وصل شن و از API ها استفاده کنن .

 

شاید براتون سوال پیش اومده باشه که چه وقت هایی باید به سرور وصل شیم و چه وقت هایی نباید ؟ جواب این سوال به دیزاین بازی شما بستگی داره . این شمایید که تعیین می کنید چه میزان از اطلاعات تون سمت سرور باشه و چه میزان به صورت لوکال روی دستگاه بازیکن ذخیره بشه . همه این ها به نوع بازی شما بستگی داره .

خیلی خوب فکر می کنم کلیت رو گفتم . امیدوار موفق باشید .

 

 

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

امین سجودی

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

دیدگاه

  • با سلام خدمت آقای سجودی. هم وطن عزیزم من ب کمک احتیاج دارم ممنون میشم اگه کمکم کنید.
    بنده دارم برا پروژه دانشگام ی بازی برای اندروید با یونیتی میسازم .این بازی بسیار ساده و کم حجمه و تقریبا تمامی چیزها تموم شده الا ی بخش بسیار مهم.من تو این بازی دوتا گوشی اندروید رو باید از طریق wifi به هم متصل کنم یعنی ی برنامه ای باید بنویسم ک اطلاعات به صورت آفلاین بدون نیاز به اینترنت از طریق wifi ردو بدلشه بین دو گوشی .چطور میتونم این کار رو تو یونیتی انجام بدم .پلاگین خاصی میخواد.واقعا گیج شدم فقط هم با یونیتی بلدم.خواهش میکنم آقای سجودی کمکم کنید.

    • من اطلاعی ندارم ، شاید سیستم قدیمی نتورک یونیتی بتونه مشکل شما رو حل کنه ، یا شایدم لازم باشه که یک Socket server بنویسید و یک آی پی لوکال برای اون ست کنید بعد از طریق گوشی ها بیاید یک Socket باز کنید و به این سرورتون وصل بشید .(پیاده سازی یک socket سرور ساده کار سختی نیست ، نترسید!)
      ما ترم دو دانشگاه به عنوان پروژه امتیازی مون نوشتن یه بازی گل یا پوچ مالتی پلیر بود که یک سوکت سرور ساده داشت ، پس شما هم حتما می تونید به راحتی اینو بنویسید.

اضافه کردن دیدگاه

12 − 3 =