بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله
هذا الموضوع موجة لكل من يريد صناعة العاب جماعية اين كانت Multi-Player او MMO
حسنا هناك بعض الاشياء التى يجب ان تكون على دراية بها وفى اولويتها معرفتك للغة برمجة بشكل جيد مثل C# / VB.Net / C++ / Java
وان تكون جيد فى استخدام محرك العاب مثل Unity3D / او اى محرك العاب جاهز يدعم لغة برمجة من المشار اليها سابقا / او التعامل مع مكتبات مثل XNA او DirectX
ويستحسن ان تكون استخدمت مكتبة ال Sockets فى اى لغة لا يهم
سأدخل فى صلب الموضوع
حسنا اولا : كلنا يعلم انة هناك العاب FPS / TPS / RTS وهى العاب من المفترض انها العاب فردية ومقامة على قصة معينة ولكننا نقدر على اللعب عبر الانترنت او من خلال الشبكة المحلية انت والاصدقاء من خلال خيار مضاف بها يمكنك من ذالك عن طريق قيام احد اللاعبين بعمل مضيف (Host) كخيار داخل اللعبة وباقى اللاعبين يدخلون على هذا المضيف كضيف (Guest) حسنا هذا النوع الاول ويندرج تحتة اى نوع من الالعاب الفردية فى الاساس وبها خيار اللعب الجماعى
ثانيا : النوع الثانى وهو الالعاب الاون لاين MMO ايا كانت MMORPG او MMORTS اى يعنى الالعاب الاستراتيجية الاجتماعية فقط ليس لها لعب فردى وهو بدأ بالانتشار حديثا
حسنا سأشرح النوع الاول وهو اسهل من النوع الثانى
حسنا لنفترض اننا لدينا لعبة ونريد ان نجعل بها اللعب الجماعى لنجعلة الان لعب جماعى داخل الشبكة المحلية
اولا بالنسبة للالعاب ال FPS / TPS / RTS انت ستقوم بعمل الضيف (Client) والمضيف (Server) فى تطبيق واحد وهو لعبتك فاللعبة هتعتبر مجزأة الى جزئين
بالنسبة لجزء للسرفر : والى هو عبارة عن انك تعمل جوا اللعبة Host بمجرد ضغطة الزر هذة تقم اللعبة على عمل سرفر محلى منشأ على الاى بى المحلى للجهاز المقام علية السرفر مثل هذا 192.168.1.2 وعلى اى بورت انت بتختار ان السرفر يتعمل علية - عادة انت بردو موش بتختار بيكون فى نظام عشوائى لعمل البورتات -
فمثلا فى اليونتى انت عشان تعمل سرفر بتكتب الكود دة
كود:
using UnityEngine; using System.Collections; public class example : MonoBehaviour { void LaunchServer() { Network.InitializeServer(32, 25000, false); } }
بالنسبة لجزء الكلينت : بضغطة الزر على Guest اولا لازم تصنع انت كود بنفسك بيبحث عن السرفرات المتاحة عبر الشبكة المحلية لانك فى الاساس موش عارف انهى اى بى او بورت اتعمل علية السرفر فانت هتعمل نظام يبحث عن عدد السرفرات المتاحة داخل الشبكة المحلية بالتالى هيبدء يعرض السرفرات المتاحة بدلالة الاى بى والبورت المقام عليهم السرفر
حسنا لننتقل الى نطاق اوسع قليلا وهو ان تريد من هم خارج الشبكة المحلية ان يلعبو معك هنا سيختلف الامر قليلا
اولا اذا لاحظنا ان فى جميع الالعاب فى اختيارين للعب الجماعى وليس اختيار واحد وهى Play Multi-Player OR Local والاخر Play Network
الاول وهو Play Multi-Player ودة شرحنا الية عملة فوق ودة مينفعش تلعب من خلالو خارج الشبكة المحلية اما
الثانى Play Network ينفع تلعب من خلالى خارج الشبكة المحلية ودة الية عملة تختلف عن السابق
هنا ايضا فى زران Host و Guest او مايشبههم عامة هناك زر لعمل جيم وزر اخر للدخول على الجيم ولكن زر ال Host هنا لن يصنع سرفر هو سيدخل ككلينت ايضا حسنا لنقف هنا الان وننتقل الى نقطة اخرى ثم نرجع لها
_________________هنا التعديل_________________
سؤال : ما هى الاشياء التى احتاجها لكى انشر لعبتى خارج الشبكة المحلية ؟
حسنا سنتدرج فى الشرح : نفترض انك ستقيم السرفر لديك اى بالضغط على زر ال Host فى الاختيار Play Network هنا انت لعمل السرفر ستحتاج لاى بى ليس محلى فستستخدم اى بى الراوتر لديك لتقيم علية السرفر بالاضافة لاى بورت انت تختارة .المشكلة هنا بعد ما انت صنعت السرفر كيف يفترض ان يدخل عليك باقى اللاعبين ك Guest هل سيبحث النظام فى كافة شبكة الانترنت على جيمباسم لعبتك مثلا - هذا جنون - (بالعلم انهم لا يعرفون اى بى والبورت المقام عليهم السرفر) هذة اول مشكلة حسنا هناك مشكلة اخرى وهى فى الالعاب الجماعية عند اللعب مع اصدقائك فى النت كافى عادة ما يكون الحد الاقصى لعدد اللاعبين هو 15 / 20 لاعب بكدا لا يكون التحميل على صاحب الجيم كبير حيث ان سرعة انتقال المعلومات داخل الشبكة المحلية تصل الى ما فوق ال 10 ميجا فى الثانية
هنا تخيل ان ينتقل صاحب الجيم الى خارج الشبكة فى هذة الحالة تتحدد سرعة انتقال المعلومات بسرعة النت لديك وهى فى الغالب لا تكفى لعمل جيم يحتوى على 10 لاعبين فالحل هنا فى الاتى :
___________________________________________
فى جميع الالعاب لدى الشركات الكبرى يصنعون سرفر للعبة مفتوح 24 ساعة يقوم بالتخديم على هذة الجيمات بمعنى:
ان الى بعمل مضيف جديد لما بدخل على اختيار ال Play Network هو فى الاساس موش بيعمل سرفر جديد لانو موش بيعمل سرفر من الاساس هو بيدخل ككلينت على السرفر الموجود بالشركة الصانعة للعبة مع اعطاء هذا السرفر معلومة انو داخل على صورة مضيف فبيصنع لة السرفر - الى هو موش على جهازو دا على جهاز السرفر الموجود عند الشركة فقط -
السرفر الى عند الشركة الصانعة للعبة بيكون مقام على جهاز لدية اى بى ثابت وبورت لا يتغيران ابدا والى هما بيطحطو فى اللعبة لما الشركة تنشرها عشان الناس تعرف تتصل ببعض ولا يتغير ابدا
كل الى بيعملو السرفر دة انو فية نظام معين انت الى بتبرمجو والى هو فى معظم الالعاب بيكون عبارة عن وسيط ما بين الشخص الى عمل Host وباقى اللاعبين الى عملو Guest علية بالاضافة الى انو بيخزن عدد ال Hosts الى مفتوحة علية ويبعتا لما حد يدخل ك Guest ويدور على Host
____ هنا الاضافة_____________________
يلعب فية بالاضافة الى انة هو المسؤل عن انتقال المعلومات بين اللاعبين بعضهم البعض فصاحب الجيم لا يتحمل اى لاج ممكن يحدث من عملية البطأ فى ارسال المعلومات
__________________________________
العملية دى اشبة كتير بالالعاب الاون لاين ولكن بصورة بسيطة جدا
فال Play Network بيتكون من :
سيرفر : ودة بيكون مقام على اى بى ثابت لدى الشركة المصنعة للعبة وعشان يسهل عملية اللعبة عبر شبكة الانترنت بدل ما كل الى عاوز يعمل Host جديد يبقى مشترك فى خدمة الاى بى الثابت فهو فقط يقوم بدور المعلن عن الجيم (Host) الى انت عملتو الجديد فقط يقوم بالاعلان عنة فى السرفر الرئيسى (الذى فى الشركة) الا اذا جعلتة يفعل اشياء اخرى
Host : صاحب الجيم المقام فى السرفر كل الى بيعملو انو بيأمر السرفر انو يعمل جيم جديد بمواصفات معينة - هو اشبة بنظام انا مستخدمو عندى فى السرفر والى هو حاجة ذى انو بيعمل بعد جديد فى السرفر (dimension) فانت مثلا اذا اخترت انك تصنع جيم جديد وعاوز تعملو فى خريطة معينة نفترض مثلا الخريطة 1 وفى نفس الوقت فى جيم معمول من قبل بنفس الخريطة دى فعشان تحل المشكلة دى وتخلى كل جيم ميشفش اللاعيبة الى فى الجيم التانى مع انهم فى خريطة وحدة هو انك تعمل نظام يعمل استنساخ او يعمل بعد جديد للخريطة دى مختلف عن الخريطة الاصلية كأنو بيعملها كوبى - انت بتحددها لما بتصنع اللعبة ذى : اسم الجيم / كلمة السر للجيم / وخلافة وبقيام السرفر بعمل المضيف الجديد هذا لا يتحمل الشخص الى عمل هذا المضيف او يعنى الى امر السرفر انو يعملو باى نوع من انواع ال Ping او التحميل على جهاز المالك لهذا الجيم فالجيم بالكامل يكون فى السرفر وانت (المالك) يلعب كأنو زبون عادى (كلينت عادى) ولكن بخيارات اضافية مثل انو يتحكم انو يقفل الجيم فى اى وقت هو عوزو ليس اكثر
Guest : وهم اللاعبين الذين يدخلون على السرفر للبحث عن جيمات مفتوحة سلفا للعب فيها وهو بدخولة على احد هذة الجيمات (Hosts) هو ليست لة علاقة بصاحب الجيم هذا ابدا فهو يدخل لزبون عادى ويتأثر بفروق المسافات بينة وبين سرفر اللعبة فى ال Ping وليس المسافة بينة وبين صاحب الجيم
انت لك الحرية المطلقة فى ان تدع السرفر الرأيسى ان يتحكم فى كل شىء او يظل فقط الوسيط بينة وبين اللاعبين حتى لا يستطيع احد ان يخدع السيرفر
فانت مثلا اذا جعلت اللاعب اذا تحرك من النقطة 1 الى النقطة 10 ان يرسلها للسرفر ثم يعيد السرفر ارسالها الى باقى اللاعبين بدون ان يتحقق من الممسافة والسرعة مثلا التى من المفترض ان تكون ثابتة عند كل اللعابين فى هذة الحالة يستطيع اللاعب ان يخدع اللاعبين الاخرين فانت لك الحرية فى هذا او تجعل السرفر يتحكم فى كل شىء - هذة برمجة ذاتية انت الى بتعملها بنفسك موش معمولة اوتوماتك
فمهوم ال Play Network هذة قريب جدا من مفهوم ال Master Server فى اليونتى فالماستر سرفر يقوم بالاعلان عن سرفرك الخاص باللعبة الى انت عملتها على اليونتى فقط وهو سرفر مفتوح فى شركة اليونتى 24 ساعة بشكل دائم (هو فى الحقيقة ليس سرفر واحد هو اكثر من سرفر على اجهزة مختلفة للتخفيف موش اكثر) دة خدمة اليونتى مقدمها لينا عشان يسهل عملية اللعب خارج الشبكة المحلية وحتى لا تتضطر الى تحمل نفقات السرفر - هنا يأتى عيب ال Master Server وهو انك مينفعش تتحكم فية بمعنى انك مينفعش تحمى لعبتك من التهكير لو استخدمتو لانك لا تمتلكو فهو موجود فى شركة اليونتى فقط فلا تستطيع ان تفعل مثل المثال السابق
فانت مثلا اذا جعلت اللاعب اذا تحرك من النقطة 1 الى النقطة 10 ان يرسلها للسرفر ثم يعيد السرفر ارسالها الى باقى اللاعبين بدون ان يتحقق من الممسافة والسرعة مثلا التى من المفترض ان تكون ثابتة عند كل اللعابين فى هذة الحالة يستطيع اللاعب ان يخدع اللاعبين الاخرين
كدا شرحت الجزء الخاص بالالعاب ال Multi-Player بالتفصيل والى عاوزنى اوضحلو اى نقطة مش فهمها يقلى
امثلة على الشرح :-
http://www.mediafire.com/?j5ugpit3uu7psx9 دة مثال بالدوت نت
http://www.mediafire.com/?5ka84a04l8nf27e ودة مثال اذاى تعمل سرفر باليونتى باستخدام ال State Synchronization
__________________________________________________________
شرح النوع الثانى : الالعاب الاون لاين MMO
حسنا هذا النوع لا يختلف كثيرا عن ال Play Network فى الالعاب ال Multi-Player
هذة الالعاب جماعية فقط ولا يوجد لها لعب فردى وهى مثل لعبة Conquer Online / Cabal / Zero Online / EVE Online / World Of War Craft
هذة الالعاب اساسى تتكون من سرفر مستقل وكلينت مستقل
السرفر : بيكون عبارة عن برنامج مقام على جهاز بمواصفات خاصة جدا ليتحمل التخديم على الاعداد الضخمة من اللاعبين الذى يتعدى الالاف وغالبا ما يتم تصميم السرفر حسب نوع اللعبة المصنوع لها فتكوين السرفر تختلف من لعبة الى اخرى خاصة فى طرق ارسال الحزم عبر الانترنت هناك ما يسمى بالمناهج / الاساليب
المناهج مثل : Authoritative او Non-Authoritative
الاساليب مثل : RPC(Remote Procedure Calls) / Synchronization / ASynchronization
كل منهج ممكن تستخدم فية اكثر من اسلوب مع بعض
غالبا السرفر بيكون مسؤل عن كل صغيرة وكبيرة ممكن يعملها اللاعب من التحرك والجرى والقفز والانتقال وتغيير الاسم او اللبس او اى شىء
تعليق