ساخت یک پایگاه داده مناسب برای بازیهای آنلاین چگونه است ؟

Mahdi_Rashed

Well-Known Member
برای طراحی یک پایگاه داده باید به چندین نکته توجه کرد که اصلیترین اونها یکی داده هایی که رد و بدل اونها موقع بازی معمولی صورت میگیره و رد و بدل داده هایی که موقع بازی در شبکه و به صورت انلاین صورت میگیره . پس یک سیستم پایگاه داده برای بازی باید حداقل هر دو موقعیت کاربر رو در نظر بگیره . البته در حال حاظر با پیشرفت روزانه ی سیستم های رایانه کسی نگران نوشتن یک پایگاه داده برای بازی نیست . البته در قسمت بازیهای معمولی . چون پردازش داده در این رایانه ها خیلی سریع صورت میگیره و عمل و عکس العمل همزمان صورت میگیرن . بیشتر توجه نویسندگان این پایگاهها به حجم اطلاعاتی هست که در هنگام بازیهای آنلاین و شبکه ای صورت میگیره . به طوری که یک در حالت آنلاین داد در کمترین زمان ممکن با کمترین سرعت اینترنت منتقل بشه و در بازیهای شبکه هم به همین صورت .
برای ساخت یک همچین پایگاه داده ای بیشتر باید به روی کم بودن متغیرها توجه کرد تا حجم بسته ی حاوی اطلاعات یک بازیکن کم بشه .
مثلاً به عنوان مثال در بازی بسیار معروف کانتر استریک که شاید همه ی شما ها بازی کرده باشین مهمترین عامل معروف شدن این بازی رو سرعت انتقال داده بدونید . علتش نوشته شدن یک پایگاه داده ی حرفه ای با حجم کم و البته نا امن و قابل نفوذ . حالا بحث امنیت مهم نیست .
پایگاه داده ی این بازی که مال موتور طراحی Valve Source هست دارای تعداد بسیار اندکی متغیر Global یا جهانی و کلی و تعدادی متغیر Local یا محلی است و. فرق بین Global و local زمان فرستادن داده هست . در Global داده های به صورت مداوم فرستاده میشن ولی در Local فقط در موارد مورد نیاز .
برای مثال متغر X , Y و Z که مختصات کاربر رو نشون میدن به صورت مداوم فرستاده میشه ولی داده هایی شبیه پریدن کاربر یا عوض کردن خشاب تفنگ فقط وقتی فرستاده میشن که لازمه . برای مثال در محیط بازی وقتی شما یک کاربر رو در مقابل خودتون میبینید که داره خشاب اسلحه رو عوض میکنه شما کارکتر رو در یک حالت خاص میبینبد با انیمیشن عوض کردن خشاب . این انیمیشن زمانی اجرا میشه که کاربر مقابل شما داده ی local عوض کردن خشاب رو به سرور و از سرور به شما میفرسته . بنابر این اگر به صورت کلی نگاه کینم تقریباً ساده هست ولی در اصل ساخت هم چین سیستمی سخته .

این فقط یک مثال حساب میشه برای ساخت و دسته بندی متغیرها :

برای یک کارکتر در داده های Global چهار متغیر در نظر گرفته میشن . 3تای اونها که که مختصات هست . یکی هم عمر طرف مقابل که باید مرتب فرستاده بشه . اگر چیزی شبیه لباس ضد گلوله هم در بازی وجود داشته باشه یک متغیر دیگه هم اضافه میشه . ولی فرستادن اینها چطوریه ؟

ما باید متغیرها رو به دسته های مختلف تقسیم کنیم . اگر فرض کنیم 5 تا متغیر برای مختصات , عمر و لباس ضدگلوله داشته باشیم میتونیم به دو دسته تقسیم کنیم . یکی دسته ی مختصات و یکی متغیر عمو و Armour . این دو دسته ی اطلاعاتی به صورت 2 Package کم حجم به صورت مداوم - 0.0001 ثانیه - به سرور و از طریق سرور به بقیه ی کاربرای داخل محیط بازی ارسال بشه .

به عنوان یک نکته هم بگم که متغیر مختصات بر حسب اون مرحله ای محاسبه میشه که شما در اون بازی میکنن .



و در داده های Local نیاز به بسته بندی نیست چون معمولاً تعداد اونها از 10 بیستر نمیشه و چون همه ی اونا یک زمان فرستاده نمیشن حجم اونها زیاد نمیشه . البته بعضی از اونها باید در دسته های مختلف وارد و به صورت package فرستاده بشن . مثل داده های شلیک گلوله که انیمیشن گلوگه زدن و مسیر گلوله رو تعیین میکنه . بقیه ی متغیرهای هم توسط کامپیوتر ها به صورت جداگانه محاسبه میشن و ربطی به اطلاعات فرستاده شده نداره . شبیه دودی که در اثر شلیک گلوله به وجود میاد یا Decal برخورد گلوله با دیوار یا سنگ یا ... .
 

جدیدترین ارسال ها

بالا