the mmm

ورشة عمل اكمال برمجة لعبة SR

14 ردود في هذا الموضوع

السلام عليكم ورحمة الله وبركاته

رغم قلة مشاركتي هنا او في اي منتدى آخر ، لا انكر مدى الفائدة الكبيرة التي حصلت عليها من منتديات الفريق العربي للبرمجة

لذلك احب ان اشارككم في ورشة لعبتي ، لعلها تكون ذات فائدة للمبتدئين (مثلي ^^ )

بدأت برمجة هذه اللعبة قبل ما يقارب السنة ونصف ... وتوقفت ايضاً قبل ما يقارب السنة ونصف .. والان بعد سنة ونصف اجد رغبة باكمال العمل على هذا المشروع

البداية كانت مع كتاب Introduction to 3D Game Programming With DirectX 9 للمؤلف Frank D.Luna

اسم اللعبة : لم احدد بشكل نهائي .. حالياً SR

فكرة اللعبة : لم احدد حتى الان فكرة نهائية .. حالياً هي تشبه نوعاً ما لعبة الدبابات (المدرعات ) التي كنا نلعبها قبل 100 سنة بما كنا ندعوه بال (اتاري)

ميزات اللعبة : حالياً ثنائية الابعاد ، يعلبها شخصان اما على نفس الحاسوب او عن طريق الانترنت او ال Lan ، تحوي اصوات ... استكشف الباقي بنفسك!

الخصائص التقنية:

* c + c++ + API + directx

* visual studio 2010

* للصوت استعملت xact3

* للشبكة Windows Sockets

ملاحظة: اللعبة حالياً مهيئة للعمل بدقة عرض 1024X768 او 1920X1080 غير ذلك لن تكون الخلفية ملائمة

تحذير : الكود سيكون متاح للجميع , صحيح ان هذا الشيء ايجابي غالباً لكن عليكم الاخذ بالاعتبار انني هاو مبتدئ

نتيجة لذلك بالتأكيد سيكون هنالك الكثير من الاخطاء ، وايضاً اشعر ان توزيع الكود سيء جداً .. فانا غير ماهر باستعمال ال oop وما شابه

تحذير 2 : اللعبة حالياً غبية نوعاً ما ، فبالرغم من بساطتها الا انها اثقل على الحاسوب من الالعاب الحديثة !!!!!!!

+ يبدو انها تتأثر بسرعة المعالج

تحذير 3 : الكثير من الامور من ابتكاري ولم أخذها من احد .. مثل طريقة تناقل المعلومات بين السيرفر وال client ايضا مثل اكتشاف التصادم ... لذلك لا اضمن لأحد مدى جودتها

شيفرة اللعبة ( السورس ) +نسخة من اللعبة بالمرفقات

الازرار:

* الاسهم للاعب الاول

* A W D للاعب الثاني اذا كان على نفس الحاسوب

* R لبداية اللعبة من جديد

* N شوط جديد (يحافظ على النقاط)

* T , Y للغش ^^

سأتحدث لاحقاً عن كيفية اللعب عن طريق الشبكة

SR_source.rar

SR_v1.2.part01.rar

SR_v1.2.part02.rar

تم تعديل بواسطه the mmm
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لا داعي لفحص السورس السابق ^^ .. لأني خلال الايام الماضية قمت بمراجعة ال classes وتعلمت الوراثة واخواتها ... والقليل من ال templates

جاري تحسين السورس ليكون مفهوم وعملي اكثر + تطوير بعض الامور

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هذا فيديو سريع للشكل الحالي للعبة:

(الفيديو يحوي على صوت , يعني شغل السماعات :happy: )

تم عمل تغييرات جذرية للكود ، اصبحت اللعبة اسرع بكثير ، واصبح بالامكان فهم الكود بشكل افضل

يمكن تلخيص التعديلات بما يلي:

---------------------------------------

* ابادة جماعية للمتغيرات العامة (global) وايضا للمتغييرات من نوع static ، حيث شارف هذان النوعان على الانقراض ، وقد تم استبدالهما بالclasses .

* تحسين نظام عرض النقاط لكنه اصبح يحوي بعض المشاكل .. حيث انه عندما تصل النقاط الى اكثر من 9 لأحدى اللاعبين فإنه يبدأ بعرض احرف يابانية!!!!

* امكانية التحرك في جميع انحاء الشاشة .. وليس مثل السابق.

* تحسين قسم كبير من الكود الرئيسي (ملف SRgrfx.cpp ) مما ادى الى تسريع اللعبة وجعلها قابلة للفهم اكثر من قبل.

المشاكل الحالية:

---------------------

* اللعبة تدعم 1024x768 بالشكل المطلوب و تدعم 1920x1080 بشكل غير متكامل . اما بقية الابعاد ستكون مشاكل بالخلفية وحدود اللعبة

* عند عرض النقاط عندما تصل نقاط احد اللاعبين الى اكثر من 9 فإنه يبدأ بعرض احرف يابانية بدل الارقام !!!!

* اللعبة تتعلق بسرعة الحاسوب ... فمثلاً تعمل لدي بسرعة 1600 fps تقريباً !!! هذه مشكلة كبيرة فانا مثلاً ارى سرعة انطلاق الرصاصة في حاسوبي ملائمة لكن لديكم ربما ترونها سريعة جداً او بطيئة جداً

* بسبب التعديلات الكبيرة التي حصلت نتج بعض المشاكل عند اللعب بال network

* عند الضغط المتواصل مثلاً على الزر الذي يسير الى الاعلى فان الدبابة ستتحرك بشكل متواصل ، لكن اثناء ذلك اذا تم الضغط على الزر الذي يطلق القذية فان الدبابة ستتوقف ( اظن ان الحل هو استعمال direct input )

* لا يمكن استقبال معلومات مثل: اسم اللاعب ....

جاري العمل على حل هذه المشاكل ان شاء الله

اترككم الآن مع السورس الجديد ومع اللعبة بالمرفقات

ملاحظة: الملف الرئيسي الذي يحوي الدالة الرئيسية والدوال المهمة هو SRgrfx.cpp

ملاحظة2: الخامات والاصوات غير مرفقة مع السورس لكنها موجودة مع الملف التنفيذي للعبة .. اذا اردت ان تعمل complie للعبة بنفسك وتشغيلها

عليك نسخ كل الملفات ماعدا الملف التنفيذي (exe) من مجلد اللعبة (وليس السورس) , ووضعها بنفس المجلد للملف التنفيذي الذي ستقوم بعمله ...

الازار:

------

* الاسهم للاعب الاول و P لاطلاق النار

* A W S D للاعب الثاني اذا كان على نفس الحاسوب - F لاطلاق النار

* R لبداية اللعبة من جديد

* N شوط جديد (يحافظ على النقاط)

* T , Y للغش ^^

* Tab لعرض النقاط

SRv1.2source.rar

SRv1.2.part01.rar

SRv1.2.part02.rar

تم تعديل بواسطه the mmm
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اللعبة تبدو ممتعة من الفيديو ( الصوت رائع أيضاً ) ،

لكن حاولت تشغيله ، يخرج لي خطأ ، النظام لدي Windows 7 32-bits و لدي Directx آخر نسخة ..

post-42837-065694100 1316783113_thumb.pn:

شاهدت الكود ، الكود منظم تقريباً ، يقف وراءه مبرمج يعرف ما يكتب :-)، لكن هناك ملاحظات صغيرة ، مثلاً :

case 1: rocket2.y_position+=rocket2.speed;break;

أو

case 1: tank2.y_position=((float)(tank2.y_position+0.2f));break;

أعتقد تحتاج تأخذ في الاعتبار أن سرعة جهازك ليست نفس سرعة جهاز شخص آخر ، قد تكن أبطأ و قد تكون أسرع ، بمعنى حركة اللاعب و الطلقة ستبدو سريعة جداً في الأجهزة السريعة ، لذلك يمكن تضربها في delta-time ، وشيء زي كذا ، ابحث في الموضوع ، أو شاهد هذا المقطع :

أيضاً : بدلاً من كتابة دوال اكتشاف التصادم بشكل " خاص " لكل حالة ، يمكن أن تضيف دوال مثل checkRectangleCollision لاكتشاف تصادم بين أي مستطيلين ، مثل المدرعات أو الطلقات .. أو إضافة دالة مثل checkRectanglePointCollision ، ونحو ذلك ، وبالتالي ستستخدمها بنفس الطريقة ، وسيسهل عليك الأمر لو كان عندك مئة شكل ، تريد أن تكتشف التصادم بينهم .

	if((rocket2.y_position>2.2f)||(rocket2.y_position<-2.2f)||(rocket2.x_position>2.2f)||(rocket2.x_position<-2.2f))
{
rocket2.y_position=0.0;
rocket2.x_position=0.0;
rocket2.flying=0;
first_in2=1;
return 0;
}

عدا هذا ، الكود يبدو رائع ، و اللعبة يظهر أنها ممتعة :-) .

بالتوفيق .

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك اخي عبد الله وجزاك الله خيراً على التشجيع ^^

حاولت البحث (على السريع) عن الخطأ الذي يظهر لديك والكثير يقولون ان الحل هو الحصول على آخر نسخة من Directx

لكن بما انك تملك اخر نسخة .... لا اعرف ما الحل :S

على كل حال ارجو ممن يحمل اللعبة ان يخبرني اذا عملت او لم تعمل عنده وله جزيل الشكر.

بالنسبة لسرعة اللعبة على اجهزة مختلفة فهي احدى المشاكل المدرجة في جدول مشاكلي , جاري الاطلاع على الفيديو والبحث عن حل ملائم

اما عمل دوال خاصة للتصادم فهي فكرة رائعة وجاري تطبيقها .. الف شكر لك :)

___________________________________________________________

تم حل مشكلة الاحرف اليابانية والحمد لله

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

الحل :

تحويل الرقم من int الى مصفوفة char باستعمال الدالة sprintf

ثم تحويل المصفوفة الى مصفوفة من نوع wchar_t ثم تمريرها الى الدالة باستعمال ال casting كما في المثال التالي:


char na [10];
wchar_t wa [10];
sprintf(na, "%d", 10);
mbstowcs(wa, na, 10);

::MessageBox(NULL, (LPCWSTR)wa, L"AAA", MB_OK);

_________________________________________________________________

اضافة :

يا سلام يا سلام يا سلام ... هذه ال timeDelta فكرتها رائعة .... الف الف الف شكر لك استاذ عبد الله :thumb_up:

الفيديو رائع وايضاً يمكن لمن يريد ان يفهم الموضوع اكثر ان يبحث عن ال Time Based Animation للالعاب ...

في الواقع كنت اظن ان هذه مشكلة صعبة وكنت اريد حلها عن طريق عمل fps ثابت للعبة بالشكل التالي:

تحديد frame rate ثابت .. مثلا 50 فريم بالثانية .. ينتج انه لكل فريم او لكل loop يتوفر له 20 مللي من الثانية

كنت اريد حساب الوقت الذي تأخذه كل دورة ثم عمل sleep بالوقت المتبقي حتى تكمل ال 20 ms

مثلاً لو انه دورة معينة اخذت 2 ms سيحدث بعدها sleep لمدة 18 ms

توصلت لهذه الطريقة بنفسي (عمل sleep ) لم اجربها .. لكن اظن انها ناجحة

طبعاً تقنية عمل لعبة ب fps ثابت اظن انه شيء معروف .. لكني لم اقرأ كيف يتم تنفيذها

لهذه الطريقة يوجد سلبيات ... مثلاً لو زاد وقت الدورة عن 20 ms اي لو ان fps قلّ عن ال 50 لسبب ما ، فانه سيحدث خلل وتأخر و ........

لذلك فضلت استعمل Time Based Animation .. لكن أيضاً لهذه الطريقة يوجد سلبية في لعبتي .. لو كان لدي مجسم يتحرك بسرعة عالية وكان الزمن كبير فان المجسم سيتحرك بقفزات متباعدة مما يؤدي الى تجاوز المجسمات الاخرى دون ان تكتشف لعبتي التصادم ... لكن بما ان هذا سيحدث فقط مع المجسمات ذات السرعات العالية جداً او الحواسيب البطيئة جداً فلن اعتبرها مشكلة وسيتم اعتماد هذه التقنية ان شاء الله.

بارك الله فيك اخي عبد الله وجزاك الله خيراً على المساعده الرائعة .

انا فرح جداً لسببين : الاول انه واخيراً اعرفت شو قصة ال timeDelta , لانه قبل سنه ونصف استعصى علي فهمها

والسبب الثاني انه اول مرة ادمج الفيزياء مع برمجتي

المسافة = السرعة * الزمن :cash:

:ty:

تم تعديل بواسطه the mmm
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

بعد هذا الغياب الطويل عدت مع بعض التعديلات ، كذلك قمت بتصحيح بعض الاخطاء البرمجية....

اهم التعديلات في هذه النسخة :

*لا يهم سرعة المعالج ... اللعبة ستعمل على كل الحواسيب بنفس السرعة (الف شكر للأخ عبد الله )

* حل مشكلة الاحرف اليابانية

* امكانية ادخال المعلومات قبل الدخول الى اللعبة ، حيث انه عند الدخول الى اللعبة ستخرج لك نافذة تمكنك من اختيار مثلاً اللعب عن طريق الشبكة او على نفس الحاسوب

*اضافة icon

ربما يوجد المزيد لكن لا اتذكره ..

المشاكل الحالية:

* نسيت اضافة امكانية ادخال اسم اللاعب .. سيكون ذلك في النسخة القادمة ان شاء الله

* الصورة التي يتم التقاطها لخلفية اللعبة غير واضحة جداً .. بالاحرى الصورة واضحة لكن يبدو ان طريقة عرضها عرضها غير سليمة 100%

* اللعبة تدعم فقط الابعاد التالية : 1920*1080 او 1024*768

* يبدو انه يوجد بعض الاخطاء البرمجية في حالة اللعب على الشبكة .. حيث يحدث خلل باطلاق القذائف بعد الضغط على R (اي عمل restart )

للتذكير ، الازرار هي :

------

* الاسهم للاعب الاول و P لاطلاق النار

* A W S D للاعب الثاني اذا كان على نفس الحاسوب - F لاطلاق النار

* R لبداية اللعبة من جديد

* N شوط جديد (يحافظ على النقاط)

* T , Y للغش ^^

* Tab لعرض النقاط

اللعبة + السورس في المرفقات

او يمكنكم التحميل من الرابط التالي:

تحديث:

قمت بحذف المرفقات لأني اكتشفت خطأ بسيط .. جاري اصلاح الخطأ

تم تعديل بواسطه the mmm
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تم اصلاح عدة اخطاء + تم اضافة امكانية ادخال اسماء اللاعبين

تم ايضاً تحسين SRconfiger.exe

اللعبة + السورس في المرفقات

او على الرابط التالي

http://hotfile.com/dl/135531543/c7d96f2/SRv1.2.rar.html

SRv1.2.part01.rar

SRv1.2.part02.rar

SRv1.2.part03.rar

SRv1.2.part04.rar

SRv1.2.part05.rar

تم تعديل بواسطه the mmm
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اولا احييك على روح المشاركة العلمية

عندي ملاحظة صغيرة . مادامت اللعبة لاتحتاج الى مجهود كبير من GPU . لملا تستخدم GDI اولا اللعبة ستكون متاحة لكل المستخدمين . ثانيا تطويرها سيكون سهل

تحياتي

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حياك الله اخي فؤاد وجزاك الله خيراً على المرور

فعلاً اللعبة حالياً خفيفة جداً (1500 fps على حاسوب متوسط الذكاء ) ، لكنها مازالت قيد التطوير ولا اعرف ماذا سيكون حالها غداً

ايضاً "اللعبة" في شكلها الحالي سخيفة ولا اظن ان هنالك من سيلعبها اكثر من دقيقة واحدة .. لذلك لست بحاجة لجعلها تدعم كل انواع المستخدمين

ايضا بالتاكيد لست مهتم بانتشارها حاليا .. فهدفي منها فقط التمرن على البرمجة (كهاوٍ)

اما بالنسبة لل GDI فانا لم اكن اعرف ما هو .. لكني لست بحاجة له.. لأني أفهم من كلامك انه بديل للdirectx .. والذي انا هنا من اجل تعلمه

وانا لا اطمح تعلم برمجة الالعاب من خلال هذا التطبيق .. ولو اردت ذلك لبدأت مباشرة بتعلم محركات الالعاب ..

الف شكر لك اخي فؤاد على المرور ^^

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

بعد هذا الانقطاع الطويل نسبياً اعود مع اصدار جديد

بكل بساطة .. لقد تم عمل تغييرات جذرية في الكود ..

بصراحة انا سعيد جداً بما وصلت اليه .. فقد اصبحت ارى الاصدارات السابقة تافه جدا .. صعبة التطوير .. غير عملية ..

فمثلاً لو اردت اضافة دبابة جديدة للاصدارات السابقة سيتطلب ذلك عدة ساعات

اما الآن لكي اضيف دبابة جديدة يكفي ان اقوم بتعريفها بسطر واحد واضافة اسمها الى قائمة الدبابات .. يعني 10 ثواني او اقل :)

اي ان الكود يمكنه التعامل مع دبابتين او مئة بدون فرق (من ناحية المبرمج)

ايضاً تم اضافة AI (غباء برمجي P:) هو عشوائي جداً والهدف هو التأكد ان الكود يتعامل مع العديد من الدبابات بالشكل الصحيح

تم ايضا اضافة صواريخ يتم التحكم بها عن بعد

ربما هنالك بعض التعديلات الاخرى لا اتذكرها ........

في الواقع لم اكن انوي ان اطرح هذا الاصدار الآن, لأن هنالك بعض الاخطاء وخصوصاً عند اللعب عن طريق الشبكة، لكن لضيق وقتي في الايام المقبلة

قررت ان اضعها اليوم ان شاء الله

الازرار هي :

------

* الاسهم للاعب الاول و O لاطلاق النار و P للتغيير بين نوع القذائف

* A W S D للاعب الثاني اذا كان على نفس الحاسوب - F لاطلاق النار و G للتغيير بين نوع القذائف

* R لبداية اللعبة من جديد

* N شوط جديد (يحافظ على النقاط)

* Tab لعرض النقاط

* L لتفعيل/تعطيل دبابات الذكاء الاصطناعي

يمكنكم تحميل اللعبة مع المصدر من الرابط التالي أو من المرفقات

http://hotfile.com/dl/138050551/470d089/SRv1.2e3.rar.html

وفي الختام انصح ان يتم مقارنة الاصدار الحالي مع السابق لمن اراد ان يرى تأثير المشاريع في تحسين طرق البرمجة

انتقاداتكم مرحب بها

واتمنى ان تعم الفائدة

بأمان الله

ملاحظة: بقية اجزاء المرفقات بالرد التالي

SRv1.2e3.part01.rar

تم تعديل بواسطه the mmm
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

اقسم بالله انى سعيد بك وانى اتوقع انك سوف تكون من مبرمجى الألعاب المتميزون واتشوق لرؤية لعبة كاملة من تطويرك اتمنى من الله ان يوفقك

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لا اعرف ما القصة لدي لكن ما استغربه انه كل سنه ونصف .... ممم لا اعرف ماذا اقول ... لكن المهم عدت بعد سنة ونصف لارد على هذا الموضوع !!

 

sayedf1

وعليكم السلام ورحمة الله

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

 

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

مستوى البرمجة لهذه اللعبة متدني جداً ... لا انصح احد بتحميل السورس :P

تم تعديل بواسطه the mmm
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

سعيد بك وانى اتوقع انك سوف تكون من مبرمجى الألعاب المتميزون

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .