الجمعة، 23 يوليو 2010

سلسلة تطوير الألعاب للبلاليص | الجزء الأول : مقدمة

 تمهيد: هناك عدة ملاحظات أرغب في التنويه عنها قبل أن تبدأ في القراءة, هذه السلسلة ستفترض أن القارئ لا يعرف الفرق بين القلقاس والبطيخ, سيكون المانع الوحيد لك لفهم هذه السلسلة هو أنك لا تعرف القراءة والكتابة مثلاً, على أي حال, كما قد تتوقع من أسلوب الكتابة حتى الآن, هذه ليست سلسلة أكاديمية أو مرجعاً لتصنيف وظائف محرك..إلخ إلخ, فهذه يمكنك أن تجدها في أي مكان على الانترنت, إذا كنت لا ترتاح لبعض النكات هنا أو هناك أثناء التعلم فربما عليك أن تشتري كتاباً بألفّي صفحة عن "نظريات الألعاب\Game Theory" مثلاً لتكتشف بعد قراءته أن فائدته العملية الوحيدة هو بيعه لمحمصة أو مطعم لاستخدام ورقه كقراطيس للبّ أو للطعمية, اذاً ... في كل جزء من هذه السلسلة ستخرج بنتيجة ملموسة قد تفخر بها وتحتفظ بها لأولادك, امممم .... فلنرى, كنت أنوي التغزل قليلاً في محرك اليونتي, اه ... نسيت, من المفترض أن هذه السلسلة موجّهة للبلاليص, لذا فلنبدأ بمقدمة عن تطوير الألعاب.


تطوير الألعاب: كما وعدت فلن أوجع أدمغتكم بالكلام النظري, فلنأخذ لعبة ولنحللها إلى عناصرها الأساسية ونرى كيف صنعت, دعني أفكّر في لعبة أولاً ...... مممممممم ..... *بعد دقائق من التفكير*.... حسناً, فلنبدأ بـ Space Invaders ....إذا أردت ن تلعب نسخة 1978 الأصلية فيمكنك تحميل محاكي ألعاب أركاد من ظلال الانترنت, أمّا ان كنت لا تقدّر التحفّ والدقة التاريخيه فالعب هذه النسخة هنا :
قد تتسائل لماذا اخترت لعبة بهذه البساطة؟!...ببساطة لأنه من المفترض أنك لا تعرف الفرق بين القلقاس والبطيخ, حسناً ... فلنبدأ بتحليل هيكل اللعبة :-

 
(1) القائمة الرئيسية : وهذا أوّل ماتراه في اللعبة أمامك, اممم.. دعنا نرى, بها اسم اللعبة/الشعار, وقائمة بسيطة بالأعداء في اللعبة وما يعادلهم من نقاط, واختياران : احداهما لبدأ اللعب و الأخرى للانتقال للوحة الأرقام القياسية *احم..أي اقتراح لترجمة أفضل ؟!*
(2) اللعبة نفسها : وهذه تحتاج إلى بعض التحليل, فلنبدأ بالرسوم :- ونرى فيها الآتي : اللاعب, باللون الأخضر ذو شكل بدائي جداً ويطلق نقاط من المفترض أنها طلقّات / صفوف من الأعداء والتي تستطيع اصابتها بالطلقات / أشكال بيضاء والتي تبدو كأقواس النصر, من المفترض أن تحميها / وخط أخضر تُدمر عنده طلقات الأعداء / واجهة بسيطة بها النقاط التي جمعتها حتى الآن بالاضافة لعدد الأرواح *ترجمة أفضل هنا لوسمحت* ..... كما نستطيع سماع موسيقى في الخلفية, بالاضافة الى الأصوات التي تصدرها الطلقات و المركبة الحمراء.
(3) شاشة النهاية : عندما تنتهي من اللعبة سواء بالخسارة أو اتمام كل المراحل, فسيطلب منك ادخال اسمك وسينقلك الى القائمة الرئيسية مرّة أخرى.

حسناً, بعد أن جربت اللعبة, عندي سؤال, هل تستطيع تخيّل المنطق الذي بنيت عليه اللعبة ؟! ... اللعبة بسيطة جداً ولن تتطلّب منك الكثير من الوقت لاستنتاج المنطق ورائها... فلنبدأ أولاً بالمركبة الخضراء التي تتحكم فيها أثناء اللعبة :-
المركبة الخضراء : مايحدث في اللعبة هو كالآتي: عندما يضغط اللاعب على زر كذا تصرّف هكذا , عندما يضغط اللاعب على "المسافة" اطلق النار على هؤلاء الأوغاد , عندما يضغط اللاعب على زر "->" حرّك المركبة للشمال .... وهكذا .... يحدث كلّ هذا من خلال مايسمّى بـدوارة اللعبة أو الـ"Game Loop" .... ببساطة هي مجموعة من الأومر تتكرر بمعدل معين , مثلا تتكرر مرة كل ثانية أو مرتين أو ثلاث ... إلخ, في الألعاب يجب أن تتكرر من 30 إلى 60 مرة في الثانية مثلا حتى لا تلاحظ العين البشرية البطء في اللعبة أو التصرف ... والآن فلنتحدث بشئ من التفصيل عن هذا الموضوع, اليكم توضيح لسلوك اللعبة في خطوة واحدة :-
1- مالزر الذي ضغط عليه اللاعب ؟!
2- إذا كان الزر الذي ضغط عليه اللاعب هو المسافة , ضع طلقة في الاحداثيات كذا وكذا وضع سرعتها الأفقية بكذا 
3- نفس اسلوب الشرط السابق ولكن مع أزرار مختلفة... وسلوك مختلف لكل زر كما أوضحت مسبقاً
4- هل أصيب اللاعب بطلقة من الأعداء ؟!, اذا اصيب .... ضع حالة اللاعب = "موت"
5-بعد أن تنتهي من كل هذه العملية ارسم الناتج على الشاشة 
وبتكرار هذه الخطوة مثلاً ثلاثين مرّة في الدقيقة نحصل على النتيجة التي نراها في اللعبة أمامناً , ونفس الدوارة أيضاً نوضّح فيها سلوك الأعداء ,في هذه اللعبة ... سلوك الأعداء هو عبارة عن تغير احداثيات الأعداء كل مرة بالزيادة والنقصان لتشكّل حركتها .. بنفس الطريقة السابقة للمركبة الخضراء ولكن بدون التحقق من الأزرار المضغوطة ... 
بالاضافة إلى كلّ هذا, فمعظم الألعاب يوجد بها عنصر منظّم واحد على الأقل, ليدير السلوك العام للعبة, مثلا ماذا يحدث إذا مات اللاعب ونفذت الأرواح لديه... في هذه الحالة ارجع باللاعب إلى القائمة الرئيسية .... ماذا إذا أصاب اللاعب عدو ؟! .... أضف نقاط جديدة لسجل اللاعب .... وهكذا ......

الآن وبعد أن أخذنا لعبة وتصوّرنا بشكل عام المنطق الذي يحكمها ..... كانت هذه مجرد مداعبة لعقلك .... فلننتقل إلى الجدّ .... كيف يتم صناعة الألعاب حقّاً ؟! ..... لن أتحدث كثيراً في هذه النقطة عن جانب "ماقبل الانتاج/Pre-production" من اللعبة, ولكن على الأقل يجب أن يكون لديك تصور لما ستصبح عليه لعبتك, فيما بعد سنناقش بالتفصيل ان شاء الله كيف توثّق أفكارك وتصميماتك في ما يسمّي بـوثائق التصميم "GDDs" .... يمكن أن تبحث عن تفاصيل أكثر عن الموضوع على الانترنت, بثلاث كلمات مفتاحية "Game Design Document" ... بالتوفيق في قراءاتك الخارجية... و الآن فلنعد لموضوعنا.... من المفترض أن لديك فكرة للعبة الآن و ترغب تنفيذها .... إليك ما كنت ستفعله :-
- ضع أفكارك على ورق, و وصف كامل للعبة في تصوّركد
- اصنع موارد اللعبة من رسوم وأصوات ...إلخ إلخ
- برمج وجمّع اللعبة على حسب وصفك المسبق
- انتهيت
كم أتمنّى أن يكون الموضوع بهذه البساطة, على العموم, في هذا الجزء من السلسلة لن ننقاش لا تصميم اللعبة و لا صناعة الموارد.... سنركّز على الجزء الخاص ببرمجة وتجميع اللعبة.... ولهذا فلننتقل إلى هذه النقطة سريعاً :
بدون الكثير من المقدمات هنا أيضاً .... لكي تتمكن من صنع لعبة تحتاج للآتى :-
1- جهاز كمبيوتر "هههه ... ياللمفاجأة" .
2- بيئة تطوير "الشرح قادم في الطريق" .
3- كرسي مريح لأنك في الغالب ستجلس بالأيّام عليه بالإضافة إلىّ مخدّرك المفضّل طبعاً .
و الآن إليك بعض من التفصيل بخصوص بيئة التطوير "عليك أن تبحث بنفسك عن تفاصيل أكثر عن بيئات التطوير التي سأذكرها, فلن أذكر هنا أكثر من الاسم" .... أنت حرّ في البيئة التي تختار ... وهذا يعتمد في الغالب أصلاً على حجم المشروع و النتائج المتوقعة .... مثلاً قد يختار أحد المجانين لغة Assembly لصناعة لعبة AAA .... سيكون مجنوناً بالفعل .... أو مجنون مثلك مثلاُ يريد صنع لعبة بمستوى الـ AAA من الصفّر ... وبمفرده .... هذا جنون أيضاً ..... على أيّ حال .... سأعطيكم أمثلة عملية على بيئات تطوير لألعاب مشهورة .... ولنبدأ بأحد ألعابي المفضّلة : Bioshock ..... تم بناء هذه اللعبة باستخدام نسخة معدّلة من UnrealEngine3 ..... يمكنك الحصول على نسخة مخصصة أيضاً من هذا المحرك وبرخصة معقولة بالنسبة لسعر النسخة الكاملة ... من هنا لمزيد من التفاصيل : UDK : http://www.udk.com .... لعبة كـ Assassin's Creed ... تم بناءها على محرك ألعاب يدعى Scimitar ... أعتقد أنهم غيّروا اسمه الآن ... لا يهم ... فالمحرك خاص بالشركة فقط وليس متاح للاستخدام العام In-House Game Engine ..... سلسلة ألعاب كـ Half Life تم تطويرها بسلسلة محركات Source أيضاً ... نفس النظام مع سلسلة Quake و Doom تم تطويرها بسلسلة محركات شركة ID ... ونفس الحال مع ألعاب EPIC و UnrealEngine3 ...الخلاصة ... تريد أن تصنع لعبة بتصوّر معين .... ابحث عن الأدوات التي تمكنّك من تحقيق ذلك ولا تتفذلك وتعيد صناعة العجلة ... فإذا كانت الأمور تؤخذ هكذا فربما عليك أن تعيد صناعة جهاز الكمبيوتر أرضاً ... الخلاصة .... لايوجد شئ اسمه من الصفر .... على العموم ... اذا أردت صناعة لعبة بسيطة ثنائية الأبعاد مثلاً بالإضافة إلى رغبتك في تعلّم لغة كالـ C++ ... فأفضل خيار أمامك هو مكتبة SFML .... ولا تبدأ بالـ DirectX أو الـ OpenGL مباشرة ..... هذه مجرد نصيحة إذا أردت أن تغير مسارك .... ويمكنك بعد ذلك الانتقال إلى استخدام مكتبات أكثر تقدماً مثل OGRE ... على أي حال .... بيئة التطوير وظيفتها هي تقديم ماتحتاجة أنت لصناعة اللعبة ... وبناءاً على التحليل البسيط في بداية هذه الجزء .... فلنري مالذي نحتاجة بالضبط :-
1- إدارة المدخلات/Input : كما في مثال المركبة الخضراء ..... إذا ضغط على زر معين ... أو قمت بأي صورة من صور الادخال .... على هذا الجزء من بيئة التطوير اكتشافه و إدارته لأستطيع توظيفه فيما بعد في سلوك اللعبة .
2- المكتبات الأساسية : أي مكتبات قد تحتاجها في اللعبة ... كالعمليات الرياضية الأساسية ..حساب جيوب الزوايا مثلاً .... حساب متجّه معيّن بنقطتين .... الكواتيرنيون .... إلخ إلخ ...
3- لغة لتصف منطق اللعبة : قد تكون اللعبة بسيطة لدرجة أن اللغة المستخدمة في برمجة أجزائها هي نفسها اللغة التي توصف بها سلوك اللعبة .... في الألعاب المعقدة بعض الشئ تحتاج إلى ما يسمى بالـ Scripting Language .... في حالتنا هذه مع اليونتي سيتاح أمامنا ثلاث خيارات : JavaScript / C#/ Boo .... 
4- مكتبة الجرافية : لترسم لك الناتج النهائي بعد أن قمت بكل العمليات المطلوبة في دوارة اللعبة كما في المثال البسيط السابق في البداية ....
5- مكتبات للأصوات و بقية الأشياء : ستحتاج لمكتبات أخرى أيضاً لإدارة أشياء كالذكاء الاصطناعي ... إلخ إلخ 

إذا كنت تتسائل ما الذي أقصده بالضبط بالمكتبات ... فتخيّل انها مكعبات تحتاجها لبناء اللعبة .... إذا أردت تفاصيل أكثر فربما عليك البحث في هذه الكلمات المفتاحية "API , SDK" .....

والآن إليكم بيئة التطوير التي سنستعملها خلال هذه السلسلة .... اليونتي/Unity .... يمكنك تحميل نسخة مجانية من المحرّك من هنا :-
من المستحسن أن تتجول قليلاً في الموقع وتقرأ أكثر في الكلمات المفتاحية التي وضعتها في هذا الجزء .... هذا الجزء كان مجرد تنشيط للعقل فقط .... للتسخين يعني .... غداً ان شاء الله الجزء الثاني ... سنتعلم في الجزء القادم كيف نقوم بصناعة لعبة سباق سيارات بسيطة باليونتي .... 

هناك 4 تعليقات:

  1. وكيف يمكن أن تتوقع إقبال مع هذا العنوان المستفذ " البلاليص " !!!

    ردحذف
  2. والله يا أستاذ غير معرف لا أقصد أي استفزاز من العنوان, فقط لو قرأت التمهيد ستعرف القصد,السلسلة من المفترض أنها لا تتطلب معرفة مسبقة بأي شئ عدا الأساسيات....

    ردحذف
  3. الشرح عامل زي البطيخ المشبع بالموز
    مشكور يا باشا ومتحرمانش من الجديد عندك

    ردحذف
  4. أدهم بكار الحمار الجحش

    ردحذف