الشبكة العربية لمطوري الألعاب

خبير  أحمد عزالدين مشاركة 1

السلام عليكم

من باب عدم اهمال المواضيع الرائعة؟ فكان لابد من وقفة وعودة مع المشروع الممتاز الملئ بالافكار والمفيدة - مشروع لعبة "وادي الملوك"
يعني ربما يكون الكثير من شارك أو رأي مشروع لعبة وادي الملوك لم تتسنى له الفرصة للمعرفة والاستفادة من كامل الافكار الموجودة والتي تم تطبيقها
في اللعبة ، فأدعوك بتفحص اللعبة مرة أخرى ولو سريعا لتلقي لنا من نافذة خيالك أكثر الامور والتى أعجبتك وكيف تتخيل أنه تم تطبيقها في اللعبة
وهل كنت تعتقد أنه يمكن عملها بأسلوب أفضل؟ 😏
ربما في هذا بعض التحدي ، فلا تفوت المشاركة.

أبدأ أنا وأتمنى ألا أكون نسيت بعض الامور ...
كان لدي بعض التساؤلات حول بعض الامور في مشروع وادي الملوك
ولقد استفدت كثيراً منه بحمد الله
ولعل أبرز الامور والتي رأيتها وأعجبتني ولم أكن أعلمها من قبل
أسلوب عمل كلمة السر الموجودة في اللعبة وأسلوب استخدام نوع المتغيرات fixed وطريقة استخدام ال State machine لادارة تتابع
 اللعبة game sequence بجانب استخدام اسلوب ال singleton مع بعض الكلاسات
بجانب الاضافة الرائعة للتحكم بالـ input باستخدام directInput باستخدام مفهوم ال action mapping (من الاخ سلوان على ما أذكر)
------- ربما هناك بعض الاشياء الاخرى ، ربما سأوافيكم بها قريباً 😄

وكان لدي تساؤل حول الادة GameEd والمستخدمة كـ viewport داخل محرر المراحل الذي تم تطويره بالسي شارب
يعني كيف تعمل هذه الاداة وتتيح لك ان تقوم بعمل محاكاة اللعبة داخلها بهذه البساطة
بجانب أنها كنت تقدم ادراة لمشهد اللعبة علي هيئة مجموعة من القوائم lists بطريقة بسيطة واحترافية
فكيف تم عمل ذلك؟ وبالاخص لانني اعتقد ان ال C++/cli لها دور في هذا الموضوع؟ فما هو؟(ان كان تخميني صحيحاً)

أيضا أتمنى أن تشاركونا الاسئلة والاستفسارت حول أهم التقنيات التي أعجبتكم في عمل مشروع وادي الملوك
وربما يتفضل أحدكم ويوضح أحد الامور التي تحدثت عنها هنا.

قبا أن أنهي حديثي لابد أن أشكر الشبكة العربية وكل من ساعد في هذا العمل الممتاز ، والي رؤية المزيد من مثل هذه الاعمال في المستقبل ان شاء الله
والسلام عليكم

أحمد عزالدين
طالب دراسات عليا
جامعة كالجري

خبير مدير وسام البهنسي مشاركة 2

وفي 16 يونيو 2009 09:13 ص، قال ahmed ezz متحمساً:

لدي تساؤل حول الادة GameEd والمستخدمة كـ viewport داخل محرر المراحل الذي تم تطويره بالسي شارب
يعني كيف تعمل هذه الاداة وتتيح لك ان تقوم بعمل محاكاة اللعبة داخلها بهذه البساطة
بجانب أنها كنت تقدم ادراة لمشهد اللعبة علي هيئة مجموعة من القوائم lists بطريقة بسيطة واحترافية
فكيف تم عمل ذلك؟ وبالاخص لانني اعتقد ان ال C++/cli لها دور في هذا الموضوع؟ فما هو؟(ان كان تخميني صحيحاً)

وحدة الرسم GameEd هي نتاج التصميم والتنظيم الصحيح لكود المشروع. تعتمد الوحدة على الكود الأصلي للعبة والذي كان فريق الـ ++C يقوم بتطويره وتعديله، لذلك فإن كافة المزايا الجديدة التي يضعها فريق الـ ++C كانت تنعكس مباشرة في وحدة الرسم GameEd بمجرد إعادة ترجمتها.
 
مشروع GameEd هو مكتبة NET. طبعاً، ومبنية باستخدام لغة C++/CLI بالفعل، وذلك لتسهيل نقل البيانات بين ذاكرة اللعبة وذاكرة NET. .
تقوم المكتبة باشتقاق أصناف جديدة من أصناف اللعبة السابقة لإضافة مزايا التحرير عليها (مثلاً، فتح مرحلة الهرم دون تشغيلها، وتمكين إضافة/إزالة الأحجار). لذلك فإن كود اللعبة الأصلي لم يتم لمسه على الإطلاق (باستثناء تعديل صغير لأحد الأصناف لتصبح أعضاؤه متاحة للأصناف الوارثة بتبديل كلمة private لتصبح protected). وباعتبار أن كل العمل الإضافي يتم فقط في كود الوحدة، فإن مبرمجي الـ ++C ليسوا بحاجة لأن يصدعوا رؤوسهم بأية تفاصيل خاصة بالوحدة.
 
في ميزة محاكاة اللعبة وإيقافها وإعادة محاكاتها، فإن ما تقوم به الوحدة هو الآتي:
* في وضع التحرير، يتم فتح ملف الهرم، ويقوم صنف الهرم المشتق بتعطيل نداء معالجة المنطق، وبالتالي كافة الأجسام في اللعبة ستكون جامدة.
* في وضع المحاكاة، يتم فتح ملف الهرم، ويتم تنفيذ المنطق من صنف الهرم الأساسي دون أي تدخل. مما يعني أنك ستلعب اللعبة كما هي.
 
القوائم التي تقدمها الوحدة للمبرمجين هي في الحقيقة قوائم وهمية، وكل ما تحتفظ به وراء الكواليس هي مؤشرات للأغراض الفعلية التي تحجزها اللعبة في كود الـ ++C. فمثلاً، البنية Stairs والتي تعبر عن الدرج في الوحدة، هي في الحقيقة مكونة من متغير واحد (*void مثلاً). والخصائص المكشوفة كالارتفاع والتوجيه هي مجرد إجراءات تقوم بجلب أو تعديل القيمة على بنية الدرج في ذاكرة اللعبة الفعلية.
بهذه الطريقة لا يوجد مجال للخطأ في حال قام المبرمج بتعديل قيمة لكنها لم تنعكس على اللعبة لسبب أو لآخر.
 
 
إن كانت لديك أية أسئلة عن جزئيات تفصيلية في الوحدة، فأرجو ألا تتردد بطرحها...

وسام البهنسي
مبرمج في إنفيديا وإنفريمز