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

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

عمل رائع أحمد!
 
النسخة الأخيرة من الكود الكامل مع آخر تعديلاتك موجودة على الرابط نفسه كما اعتدنا:
http://www.agdn-online.com/source/kvalley_latest.zip
 
لدي بعض التعليقات التي أذكرها لتأخذها بعين الاعتبار في التعديلات اللاحقة:
 
- أنت تقوم عادة بتهيئة المتغيرات ضمن جسم الـ constructor بدلاً من رأسه... مثلاً:
 

MyClass::MyClass()
{
   memberVar = 0;
}
 
وكود اللعبة عموماً يقوم بتهيئة المتغيرات في رأس الـ constructor حيثما أمكن:


MyClass::MyClass() :
   memberVar(0)
{
}
 
نحن نفضل التهيئة في الرأس طالما أن ذلك ممكناً..
 
- أنت تتبع نظام الـ camelCase في تسمية المتغيرات، والمشروع بشكل عام يعتمد نظام الـ Hungarian Notation. ليس الموضوع موضوع تحيز طبعاً، وإنما موضوع حفاظ على التنسيق الموحد ضمن المشروع نفسه.
 
- الشبكة يتم إنشاؤها حتى لو لم نعرف ENABLE_GRID، وفي ذلك مضيعة للذاكرة.
 
لقد قمت بتعديل الكود ليتخلص من هذه العيوب، ويمكنك الاطلاع على آخر نسخة لرؤية الفروق.
 
مهمتنا التالية الآن هي كالتالي:
نود أن نمنع شاشة الخريطة من الانتقال بشكل أوتوماتيكي بعد مضي فترة محددة من الزمن. نريد أن يضغط اللاعب زراً كي ينتقل للمرحلة التالية، وذلك بهدف إعطاءه الوقت الذي يريده لنقل كلمة السر وتسجيلها جانباً.
إذن العمل على خطوتين:
- أولاً الانتقال عند ضغط زر بدلاً من انتظار مدة معينة.
- ثانياً كتابة عبارة صغيرة (Press Space To Continue) أسفل كلمة السر كي يعلم اللاعب أن اللعبة تنتظره...
 
هذه واحدة من التعديلات التي تحسن اللعبة بشكل عام، وذلك ريثما يتم تحديد بعض المزايا الجديدة في قسم التصميم...

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

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

السلام عليكم

تم تنفيذ المطلوب بجعل شاشة الخريطة تتوقف ريثما يضغط اللاعب علي زر المسافة وايضا برسم جملة توضح ذلك
 -- تم ارفاق التعديل وبالتحديد في الملف StateFlow.cpp
في الكلاس GameState_Map وخصوصا في دالة ال Update والـ Render

في انتظار الجديد وجزاك الله خيرا أخي وسام علي هذا المجهود

والسلام عليكم

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

مبتدئ  إياس مشاركة 53

جميل جداً
بصراحة لا بد و أنني أبدو كالغريق في محيط  خصوصاً أن معلوماتي و تجاربي في الDirect x لم تتجاوز ملفات ال SDK و لكني سأحاول البحث و التدقيق في كود اللعبة الذي أتمنى أن يكون فيه شروحات و ذلك طبعاً بعد تحميلها ..
و أتمنى أقدر أفهم قسم منيح .
بس أنا لاحظت من بداية الموضوع بأن الكود يعتمد على بعض المكتبات الخاصة باللعبة و بهذه الحالة رح ضيع كتير لأنه المكتبات القياسيه يالله اقدر مشي حالي فيها فهل سيتم اعتماد كودات من الصفر في اللعبة الحالية؟

It takes hard work to stay on...Top.

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

أما في 18 يوليو 2008 08:52 م، فقد تنهد إياس بارتياح وهو يرد:

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

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

كما نلاحظ في القصة الجديدة للعبة، فقد تم طرح فكرة المشاعل، وأنا أقترح أن نفكر بطريقة تنفيذ هذه الفكرة في اللعبة كتأثير رسومي. فما رأيكم؟

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

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

السلام عليكم

لما تم تعديل شاشة الخريطة بحيث يتم عرض رسالة تسمح للمستخدم بالتحكم في الانتقال للمرحلة التالية بالضغط علي زر المسافة بدلا
من الاسلوب الاول والذي كان يتم الانتظار فيه لعدة ثواني قبل ان تختفي شاشة الخريطة تلقائيا
ذكر الاخ وسام انه لما يقوم اللاعب بسرعة بالضغط علي زر المسافة فان الصوت الذي تم تشغيله في شاشة الخريطة قد يختلط مع الصوت الذي يتم
تشغيله في المرحلة التالية ولحل هذه المشكلة مبدئيا قمت بالتعديل الاتي في الكود المسئول عن تحديث شاشة الخريطة

if(InputManager::Instance->ControlDown(GameControl_Jump)||
	   InputManager::Instance->ControlDown(GameControl_Select) )
	{
		// first stop any sound may be currently playing
		if( CoreLib::AudioIsPlaying(Sound_Map) )
			AudioStop(Sound_Map);

		// other code here ....
	}
هذا الكود تجده في الدالة GameState::FlowAction GameState_Map::Update(void)

وارفقت التعديل
والسلام عليكم

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

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

السلام عليكم😄

كان المطلوب في الخطوة التالية هو اضافة مؤثر الظلام في الحجرة وتكون هناك مشاعل تضئ المكان مع اللاعب والوحوش (مبدئيا)

تم نقاش وتنفيذ التأثير في مقالة منفصلة تجدونها هنا
http://www.agdn-online.com/communities.aspx?view=posts&threadid=426&page=4
وفيها صورة للتأثير والتعديلات التي تمت خطوة بخطوة

الان تم بحمد الله الانهاء من تنفيذ التأثير بنجاح ولقد ارفقت اخر كود للمشروع وفيه التأثير يعمل بنجاح ويمكن الغاؤه فقط بعمل comment للسطر
#define NEW_TORCH_EFFECT
هذه صورة للتأثير ويمكنكم مراجعة الكود والتعديل معظمه في الملف pyramid




شكرا لملاحظات الاخ وسام

والسلام عليكم

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

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

ممتاز، لقد تم تحديث النسخة الموجودة على الموقع لتدعم المشاعل بشكل كامل. إذ أنها الآن يتم تحميلها في المرحلة ويتم رسمها كذلك، لكن دون أي مؤثرات خاصة (وهذا ما يجب أن نعالجه الآن).
 
باعتبار أن الميزة جديدة، فإن المراحل الأصلية في اللعبة لا تحتوي على أية مشاعل طبعاً، لذلك يجب أن تبني مرحلة بنفسك في محرر المراحل، وتضع فيها مشاعل وتحفظها لتلعب بها وتجربها في اللعبة الفعلية مع التأثيرات الخاصة.
 
الخطوة التالية:
* حمل آخر تحديث للكود، والذي يحتوي على ملفات محدثة (متضمنة المراحل الأصلية). التحديث ضروري لأن صيغة الملفات قد تغيرت بسبب دعم المشاعل. الرابط الثابت للتذكير:
 
http://www.agdn-online.com/source/kvalley_latest.zip
 
كل التعديلات القادمة الآن تبنى على النسخة الأخيرة من الرابط أعلاه!
 
من الجدير بالذكر أنه قد تم إسقاط دعم Visual Studio.NET 2005 في هذه النسخة، إذ أن الدعم كان يشكل عبئاً علينا أثناء طرح آخر التعديلات من مكتبة CoreLib.
 
قبل البدء بإجراء أي تغييرات على كود اللعبة، دعونا نناقش ما الذي نريد أن نصل له في النهاية من هذه الميزة الجديدة، وكيف ستعمل بكامل تفاصيلها. سنفتح موضوعاً فرعياً خاصاً بنقاش المشاعل ضمن قسم المشاريع، وحالما نعتمد إن شاء الله على التفاصيل، فلنكمل العمل هنا عليها...
 
رابط الموضوع: http://www.agdn-online.com/communities.aspx?view=posts&threadid=448

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

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

حسناً الآن وقد تم البت بالتفاصيل الخاصة بالمشاعل، فلنبدأ بإتمام العمل. المهمة التالية هي تخصيص زر جديد يتسبب باستخدام أو وضع ما يحمله اللاعب أرضاً (Ctrl للاستخدام، و Ctrl+Down لوضع ما تحمله على الأرض)...
 
التفاصيل في المشاركة رقم 8 في الموضوع:
 
http://www.agdn-online.com/communities.aspx?view=posts&threadid=448
 
لاحظ أن وضع الحمل مسموح به فقط في حالة الثبات أو المشي. أما القفز والسقوط أو صعود الأدراج فلا يسمح بهم وضع الحمل.
 
المهمة بسيطة جداً...
 
والآن، من لها؟ ☺

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

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

السلام عليكم

مرحبا استاذ وسام مرة اخري
والله الواحد سعيد لعودة العمل في فريق السي بلس بلس بعد فترة نقاهة وانتظار 😄
ان شاء الله سأحاول تنفيذ المطلوب في اقرب وقت
لكني اعتذر لانني في ايام الدارسة قليلا ما تتاح لي الفرصة للجلوس امام كمبيوتر او الانترنت بالاضافة الي انني مشغول قليلا في مشروع تخرجي
وبالتالي فانا اعتذر عن التأخير لكني ساحاول تنفيذ العمل في اقرب وقت

نراكم قريبا 😒

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

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

السلام عليكم

ها قد عدنا مرة اخري مع اول محاولة لتنفيذ المطلوب وبحمد الله تم تنفيذ المطلوب 😄 واضافة زر جديد هو CTRL مسئول عن وضع اي عنصر يحمله اللاعب
سواء قرر اللاعب تركه في حالة الثبات او المشي فقط بينما لا يمكنه تركه في حالة القفز او الصعود او السقوط

ملاحظة: هناك مشكلة تظهر لكنها غير مهمة وهي تحدث بالذات في حالة اضافة متغيرات في اي ملف header لكن في وسط الملف وليس في اخره
لانني لما حاولت اضافة بعض المتغيرات في الملف Explorer.h ولم اقم باضافتها في في نهاية الملف تسبب ذلك في انهيار اللعبة عند اغلاقها
ولكن بالطبع يبدو ان سبب هذه المشكلة ان هناك جزء ما من الكود الذي يعتمد علي قراءة المتغيرات الاصلية من هذه الملفات بالترتيب وبالتالي فهو يتوقع
وجود بعض المتغيرات التي يعرفها ويحتاجها في اماكنها واذا قام احد باضافة متغيرات في الوسط فانه يخل بالترتيب مما يسبب الانهيار
عموما الحل بسيط كما اقترح الاستاذ وسام مسبقا بان بنية اللعبة بالفعل تعتمد علي هذا والحل ببساطة هو بوضع المتغيرات الجديدة في نهاية الملفات

شكرا لكم 😒
في انتظار تعليقاتكم وملاحظاتكم وفي انتظار الخطوة القادمة ان شاء الله
اعتذر ان كان هناك تأخير في تنفيذ المطلوب لانني مسافر لظروف الدراسة وسأقوم بالمتابعة معكم بعد اسبوع ان شاء الله

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