المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ~ المنطق في تصميم الألعاب و السكربتات ~ الدرس الرابع :الأونلاين



CalmKiller
28-07-2010, 06:12 PM
بسم الله الرحمن الرحيم

الدرس الرابع ~الأونلاين~

الألعاب الأونلاين قد تكون ذات عنى مبهم او غير واضح عند معظمنا
فأنت كلاعب عند لعبك لعبة ما اونلاين فأنت تختبر ما تفقده الألعاب العادية
انت تختبر التفاعل الاجتماعي

اذن ماهي العوامل التي تؤدي الى اكمال لعبة أنولاين ما ؟

فلنبدأ الشرح اذن :

أولا : تصميم اللعبة ...

ليس من امكانية كل البرامج صنع العاب يمكن جعلها أونلاين
ولكني افضل لغات الـ C++ or C# or VB.Net
صعب ؟!
نعم صعب جدا
وقد يكون الـ VB.Net اسهل لغة من ضمن تلك اللغات ولكن مقابل تلك السهولة انت تفقد الفاعلية.
عن نفسي افضل استخدام الـ C++ لأنه فعال
ففي تلك اللغة , كل شيء تحت تصرفك
من الصحيح انها تطلب عمل اكثر, ولكن مقابل ذلك تحصل على فاعلية اكبر.



ماذا اعنى بالفاعلية ؟
تخيل انك صنعت لعبة بالـ VB.Net + DirectX 9
حجم اللعبة 400 كيلو بايت
تستغل اللعبة مساحة قدرها 11000 كيلوبايت من الذاكرة في جهاز المستخدم

والأن حاول صنع تلك اللعبة ايضا ولكن بأستخدام الـ C++ + DirectX 9
حجم اللعبة 250 كيلو بايت او اقل!
تستغل اللعبة ا يقرب من 2000 كيلو بايت من الذاكرة المؤقتة في جهاز المستخدم

~ طبعا هذا للتوضيح فقط ~


اذن كيف يكون تصميم اللعبة من اهم عوامل جعلها أونلاين ؟
-_- اللعبة في مراحل تصميمها تقوم بأدراج اكواد و تعريف طرق ارسال و استقبال البيانات من الخادم ~Server~ و كيفية ترجمة تلك البيانات الى ما يختبره اللاعب من احداث ووقائع



اذن فاللعبة تتصل بالخادم بأستخدا مكتبة الـ WinSock ؟
ليس فقط الـ WinSock توجد ايضا مكتبات اخرى توفرة
ولكن الـ WinSock يعتبر اكثرها شيوعا
مهمتها بسيطة و هي عبارة عن ارسال البيانات من والى الخادم و اللعبة

اذن تلخيص ما سبق يكون كالأتي :
1- عند صناعة اللعبة و جعلها أونلاين يجب ان نراعي الفاعلية
2- يجب ان نستخدم مكتبة لارسال البيانات من والى الخادم و اللعبة
3- يجب ان نفسر الرساءل الستقبلة من الخاد و نترجها لأحداث تحدث داخل اللعبة

ثانيا : تصميم الخادم ...
هل تصدق ان اخبرتك ان لغة تصميم الخادم لا يجب ان تكون نفس لغة تصميم اللعبة ؟
يمكن ذلك ولكن نظريا هذه الطريقة ليست مفيدة!

حسنا ننتقل للمهم.
كيف نصمم الخادم ؟
هل يمكنك تصميم شيء ما بدون ان تعرف ما هو ؟
من الطبع لا ~ مع اني صممته بدون ان اعرفه , ولكن ليس ذلك المهم~ :]
اذن دعني اعيد صياغة سؤالك الى :

ماهو الخادم ؟
الخادم هو عبارة عن المجتمع الذي يتم فيه استقبال البيانات من اكثر من عميل ~اللعبة~
وارسالها فيما بينهم
تنظيم دورة البيانات و تحديد ما يراه كل لاعب وماذا يحدث
فالخادم هو بصفة اكثر عبارة عن المتحكم في العالم الخيالى الذي صممناه
الألعاب الأونلين لا تقوم بدون خادم

ولكن هل توجد العاب اونلاين بدون خادم ؟
نعم توجد العاب مثل CounterStrike,HalfLife
ولكن كيف ؟
حقيقة تلك الألعاب انه يوجد خادم ولكنه واحد من اللاعبين
فحين تقوم بأنشاء لعبة جديدة على الشبكة مثلا LAN
انت بنفسك تلعب دور الخادم الذي ينسق البيانات
و حين تغلق اللعبة من عندك سوف تلاحظ ان جميع من كان يلعب معك طرد من اللعبة

اذن كيف نصمم الخادم ؟
الأن يسرني ان خبرك :]
عند تصميم الخادم يجب ان تراعي فيه ما يلي
اولا ما عدد اللاعبين الذي يستطيع الخادم ان يجمعهم معا ؟
ثانيا ما هي سرعة معالجة البيانات بين اللاعبين ؟


طبعا ذلك ليس كل ما يجب حسابه
ولكن كبداية هذا يعتبر جيدا :]

اذن اولا, عدد اللاعبين الذي يستطيع الخادم ان يجمعهم معا يعتمد على
1- سرعة الاستضافة
2- سرعة جهاز الاستضافة
3- طريقة تصميم الخادم

ماذا تقول, استضافة ؟
اعذرني اخي العزيز , ولكن هل ظننت انك سوف تدير لعبة اونلاين من البيت ؟

ثانيا سرعة معالجة البيانات ؟
نعم , قدرة الخادم على استقبال البيانات و تنظيمها و اعادة ارسالها او الاحتفاظ بها
كلها تأتي من التصميم الجيد للخادم
اعلم ايضا ان الخادم يستخدم نفس المكتبة التي يستخدمها العميل لارسال واستقبال البيانات

اذن هل هذا ما احتاجه لتصميم لعبة أونلاين ؟
اححم
كلا!

لا زلنا نفتقد عنصرا مهاً
تلك البيانات اين تذهب ؟
هل تلعب لعبة اونلاين كل ما شغلت اللعبة تبدأ من البداية ؟
مالفائدة ان كنت العب ولا تسجل انجازاتي ؟
اذن دعني اقدم لك
قواعد البيانات!

ثالثا : قواعد البيانات ...
قواعد البيانات تسجل فيها الأحداث, اماكن اللاعبين, ما يملكون, وكل معلوماتهم
انها مثل الكتاب ولكن هذا الكتاب يمكن ان تعدل فيه بما يناسبك.

اذن كيف اتعامل مع قواعد البيانات ؟
اولا نحدد نوع قاعدة البيانات المستخدمة
هل هي OLEDB, ODBC, MySql, MSSQL,ORACLE
لكل مميزاته و لكني افضل ان اتعامل مع الـ MySql

ثانيا نوصل القاعدة بالخادم :]
باستخدام الـ Connector وهي عبارة عن مكتبة نقل بيانات بين القاعدة المستهدفة و برنامج ما
بالنسبة للـ MySql فالـ Connector الخاص بها يسمى MySql Connector ~ملائم~

ثالثا نبدأ عملية ارسال و استقبال البيانات
بين الخادم و قاعدة البيانات فقط !

لماذا لا اجعل اللعبة متصلة مباشرة بقاعدة البيانات؟
لأنه قد يتم تعديل البيانات المستخدمة من قبل وسائل خارجية و بذلك تفقد اللعبة الأمان!
~ كنت افعل ذلك في بعض الألعاب, و لكن ليس هذا موضوعنا~
اذن تخيل معي الأتي

اللعبة >>> ~ ارسال بيانات الى :~ >>> الخادم >>> ~ ارسال بيانات الى :~ >>> القاعدة
القاعدة >>> ~ ارسال بيانات الى :~ >>> الخادم >>> ~ ارسال بيانات الى :~ >>> اللعبة

هذه احدى وسائل نقل البيانات المعهودة و يمكن ايضا التالي
اللعبة >>> ~ ارسال بيانات الى :~ >>> الخادم
الخادم >>> ~ ارسال بيانات الى :~ >>> اللعبة
الخادم >>> ~ ارسال بيانات الى :~ >>> القاعدة
القاعدة >>> ~ ارسال بيانات الى :~ >>> الخادم

هذه هي اهم الميزات للألعاب الأونلاين
~كانت توجد بعض الصور للتوضيح اكثر ولكني لم اعثر عليها في جهازي ~
-_-
والسلام عليكم ورحمة الله و بركاته
اخوكم : اسلام الريان.
~ملحوظة كاتب الموضوع كان شبه نائما اثناء الكتابة~
~ملحوظة اخرى الدرس لم ينتهي بعد~

CalmKiller
28-07-2010, 10:40 PM
رجاء عدم الرد حتى اكمال الشرح
~ملحوظة كاتب الموضوع استيقظ للتو~

CalmKiller
29-07-2010, 06:51 PM
حسنا, الأن بعض الصور التوضيحية

اولا : اللعبة ...
http://i868.photobucket.com/albums/ab242/CalmKiller/U1.jpg

ثانيا
الشكل العام للاتصال بين اللعبة و الخادم و قاعدة البيانات

http://i868.photobucket.com/albums/ab242/CalmKiller/U2.jpg


طبعا كل ذلك يعتبر تلخيص التلخيص للعملية الفعلية :]
وبذلك نختم الدرس

omiga91
01-08-2010, 07:19 PM
درس رائع أخي ...... لكن للأسف أنا ظعيف جدا في الشبكات ودائما أتكاسل عن تعلمها
لكني أدركت مهمتها .. شكرا لك

شبـح الليل
02-08-2010, 06:44 PM
درس رووووووووعة بصراحة
شكرررررراً لك على دروسك

لكن هل يمكن تصميم العاب الاونلاين بواسطة الجيم ميكر بواسطة لغة gml ?

عمر الراجح
03-08-2010, 07:48 AM
مثل ما قال شبح الليل هل يمكن استخدام الجيم ميكر لصناعة الالعاب ان لاين ؟ وهل يلزم سيرفر او عادي اخلي جهازي سيرفر ؟

CalmKiller
03-08-2010, 08:34 AM
بسم الله الرحمن الرحيم
اخواني شبح اليل و عمر الراجح و omiga91

اولا: شكرا لاهتمامكم بتطوير بصناعة الألعاب الأونلاين ورغبتكم في استخدامها لألعابكم

ثانيا: تعليقا على ردودكم واجابة على اسألتكم



درس رائع أخي ...... لكن للأسف أنا ظعيف جدا في الشبكات ودائما أتكاسل عن تعلمها
لكني أدركت مهمتها .. شكرا لك

مبدأيا برمجة الشبكات تختلف عن برمجة الاتصالات مع وجود وجه شبه ولو بسيط بينهما
ولكن ان ترتقي الى برمجة الألعاب الأونلاين عموما هو مرحلة متقدمة جدا من تصميم الألعاب
مفيدة ومهمة , تكمن روعتها في احساس اللاعب بالانجاز و تسجيل ما قام به
لا يجب ان تكون عالم ذرة!
والكسل لن يوصلنا الى شيء :]






مثل ما قال شبح الليل هل يمكن استخدام الجيم ميكر لصناعة الالعاب ان لاين ؟ وهل يلزم سيرفر او عادي اخلي جهازي سيرفر ؟


نعم!
يمكنك تصميم العاب أونلاين بالجيم ميكر
وذلك عن طريق مكتبة تسمى الـ MPlay
صممت تلك المكتبة لجعل تبادل البيانات بين الخادم و الألعاب المصممة باستخدام الجيم ميكر ممكنا
مرفق مع المكتبة ملف شرح لكيفية استخدامها ~ملف الشرح بالانجليزية~
قرأت الملف وهو بسيط جدا
يخبرك عن الاوامرالتي توفرها لك المكتبة و عن طريقة استخدامها
تم رفع المكتبة على موقع AIGN
Arabian Indie Game Developers Network
~شبكة مطوري الالعاب المستقلين العرب~
المكتبة من هنا (http://aign.co.cc/uploaded/mplay.zip)
الموقع لازال تحت الانشاء وسيتم الانتهاء منه في القريب العاجل
حاليا نقوم برفع الملفات المهمة عليه يمكن لكي لكم تحميلها
بالتوفيق انشاء الله

~اعذروني شباب خبرتي بالجيم ميكر محدودة نسبيا :]~
لأي اسئلة اخرى يسرني اجابتكم عنها
في آمان الله

فارس المجد
03-08-2010, 10:30 AM
شكراً مرة أخرى على مواضيعك المتميزة ^^
في الحقيقة درس مهم للغاية, ولكن أنا أنصح أي شخص يريد أن يبدأ لعبة أونلاين , أن يبدأ بلعبة بسيطة جداً لأن الموضوع صعب.
قرأت في كتاب لتصميم الألعاب عن محاولة عشرات من المصممين _بعد أن أخذو دورة لمؤلف الكتاب نفسه_ لتصميم ألعاب RPG أونلاين ولكن فشلت عشرات المحاولات ونجحت اثنتين (بالاكتمال فقط ولكن بجودة ضعيفة!!)

فمثلاً عندما تريد أن تصمم لعبة أونلاين إبدأ بلعبة بسيطة تعتمد على لعب الأدوار مع شات بسيط
من ثم يمكنك توسيع هذه اللعبة لعمل قاعدة بيانات لها, لتسجيل أمور بسيطة مثل حالة اللعب وعدد مرات الفوز ...إلخ

فتصميم لعبة تبقى شغالة على الدوام وتحفظ كل ما يقوم به المستخدم , وكل ما يملك ... فهي لا تحتاج فقط التكاليف العالية التي تحتاجها أي لعبة ضخمة , بل تحتاج أيضاً إلى فريق عمل ومراقبة مستمرة لأحداث السرفر , وإلا فنهاية اللعبة إلى الفشل

واعذروني إن خرجت عن الموضوع قليلاً للإيضاح ...

CalmKiller
04-08-2010, 03:28 PM
فارس المجد
يسرني ان ارى ارائك في موضوع تصميم الألعاب الأونلاين
طبعا افكارك رائعة
و فعلا الألعاب الأونلاين الناجحة تحتاج الى مراقبة مستمرة و سيرفرات ضخمة لتحمل اللاعبين
وايضا ادارة ناجحة
فعند تصميم لعبة اونلاين
انت لا تلعب بمعنى اصح
الأن انت تعمل :]
وشكرا لمرورك
في أمآن الله

مبارك الرشيدي
04-08-2010, 03:58 PM
CalmKiller

اشكرك على الدرس
وعن نفسي احاول الان اقوم بتحليل سكربتات وفهم ماهي عملها
ووجدت صعوبه في برمجة لالعاب لم اكون اتصورها هكذااا

ولكن ما اريد قوله انني عندما بدات التحليل وجدت ما قمت بشرحه وهو المنطق
وفعلا وجدت كودات معموله بطريقه منطقيه وذكيه
مثل

int currentFrame;
int maxFrames = 10;
bool key1FirstPress = false;
bool key2FirstPress = false;
void Main()
{
if (IN_3 == 1)
{
if (key1FirstPress == false)
{
currentFrame--;
if (currentFrame < 0) currentFrame = 0;
}
key1FirstPress = true;
}
else key1FirstPress = false;

if (IN_6 == 1)
{
if (key2FirstPress == false)
{
currentFrame++;
if (currentFrame >= maxFrames) currentFrame = maxFrames-1;
}
key2FirstPress = true;
}
else key2FirstPress = false;

OUT_0 = currentFrame;
}

هذا كود يجعل الفريم ينتقل من قيمه الي قيمة الصفر ولا يتعداهااا

ويجعل الفريم ينتقل من قيم الصفر او اي قيمة يكون عندها الي قيمة العليا وهي معرفه nt maxFrames = 10; ولا يتعداهااا

والحمد الله قدرت استوعب من كود المكتوب 80 بالميه

هي عمليه منطقيه وذكيه من كاتب السكربت

وتقبل تحياتي

CalmKiller
04-08-2010, 04:37 PM
فعلا
يقوك السكربت بالتأكد من قيمة المتغير currentFrame
ان كانت اكبر من اقصى قيمة للـ frames
يعيدها الى (اقصى_قيمة - 1)
ان كانت اصغر من الصفر
يعيدها للصفر!
ولكني اود ان أعرف ماهم الـ IN_3, IN_6
شكرا لك أخي مبارك!

مبارك الرشيدي
04-08-2010, 05:05 PM
input stat (0,1) = IN_3

هذا زر IN_3
يعني عند ضغط عليه يكون IN_3 == 1
لذلك هو BOOL
وكذلك IN_6 نفس IN_3

يعتبر زر ايضا