الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كورس برمجة الالعاب

مغلق
بدأه احمد صالح في 2 أبريل 2005 · 32 رد · 8,964 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله ،

هذه محاضرتان كنت كاتبها من اخر عيد و سوف ازدها .

المحاضرة 1 .

سوف نعرض العلم و نظرياته ولن نتطرق إلي شرح برامج صناعة الالعاب العقيمة مثل Game Maker و ما شابهه و لكن سوف محاضراتنا سوف تركز علي كيفية صناعة مثل هذه البرامج التي سوف تساعدك في صناعة الالعاب .

مستوي المحاضرات سوف يكون من " مبتدىء – متوسط " في مجال علوم الحاسب و يجب ان ارعي المتقدمين لان هناك مقالات سوف تنشر باللغة الانجليزية للغرب .

سوف تحتاج خبرة لا بأس بها في لغتي السى ، السى ++ في مواضيعنا هذا ..

اهداف المقالات :

برمجة الالعاب باستخدام تكنولوجيا دايركت اكس .

ما هي الالعاب ؟!

بالطبع كلنا نعرف ما هي الالعاب و لكن سوف نعرف الالعاب بنظرة برمجية ..

الالعاب في بداية المقال من اصعب البرامج software في صنعها ; لانها تتطلب الكثير من الاشياء و منها 1. برمجة الرسومات 2. برمجة الصوت 3. برمجة الشبكات .. الخ

إنما البرامج العادية علي سبيل المثال ميكروسوفت ورد لا يتطلب كل هذه الاجراءات ..

لنعرف الالعاب برمجياً ،عندما نقوم بتشغيل أى لعبة علي الحاسب مثلاً فاننا نمر بحلقة أو دورة غير منتهية اى " تلف تلف " من الاحداث و التي بدورها تقوم برسم الصور و فعل الاحداث . تقوم الالعاب برسم الصور و فعل الاحداث في معدل معين نحن نفرضه و هو 30 و معني 30 أي انه في كل ثانية نجعل اللعبة ترسم 30 اطار و يسمي هذا المعدل بعدد الاطارات لكل ثانية Frames Per Second (FPS) ، بعض الالعاب الحديثة الان مبنية علي معدل 60 اطار لكل ثانية . تصورها كانك تخرج فيلم .. فالفيلم يتتابع احداثه و لكن بمعدل "بتغير ".

ملحوظة : غالباً كلمة " معدل " تدل علي التغير في الشىء و في موضوعنا هذا " احداث اللعبة تتغير ب 30 اطار لك ثانية و معدل تغير سرعة السيارة مثلاً في لعبة ثنائية الابعاد يعبر عنه بتفاضل دالة المسافة كما سنري في الفيزياء الميكانيكيه الكلاسيكيه .

احداث الالعاب

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

1. Initiali(s/z)ation حدث الاعداد .

هو الحدث الاول التي يحدث بعد الضغط علي الملف التنفيذي و غالباً يشمل التالي

1.حجز ذاكرة كافية للعبة " غالباً النظام يقوم بعمل هذه العملية " .

2. تحميل ملفات اللعبة ( من الممكن ان يكون في اول اللعبة او في وسطها )

3. أي شىء تريده يبداً مثلاً تريد ان تسجل مفتاح في ملفات التسجيل register .

4. كشف إن كانت السى دي موجودة في القرص ام لا .... و هناك العديد من الاحداث

نعبر عن حداث الاعداد في السى بالدالة Init(); .

بعد انتهاء هذا الحدث ندخل علي دالةFunction اخري و هي دالة main() .

2. Main loop

و هنا ما يأتي مجري الاحداث و التفاعل في اللعبة .. فإن كنت برمجت من قبل علي مترجمات الدوس للسى ، السى ++ فستلاحظ ان مجري عمليات البرنامج يدخل في الدالة main ! و هنا نفس الفكرة موضوعة .

3. Releasing

غالباً ليس المصطلح العلمي لها Finish و هو الحدث الذي ينتهي في البرنامج " اللعبة " و لكن المصطلح الصحيح هو Release ;

لان في هذا الحدث نقوم "بتحرير" كل الذاكرة التي قمنا بحجزها في بداية البرنامج من مثلا تحميل الملفات ففي هذا الحدث نقوم بقفلها و

نقوم مثلاً بتحرير جميع المؤشرات pointers التي قمنا بحجز جزء ذاكرة لديها في بداية البرنامج .

ملحوظة :

المؤشرات pointers هي احدي موضوعات السى ، السى ++ التي لها اهمية خاصة و يجب ان تفهما جيداً لكي تكمل المشوار في برمجة الالعاب .

image002.jpg

مخطط لاحداث لعبة علي سبيل المثال .

تم تعديل هذه المشاركة بواسطة احمد صالح في 2 أبريل 2005 في 03:26

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#2

المحاضرة 2 .

داخل الألعاب

أحمد صالح

في المحاضرة السابقة تكلمنا علي الألعاب و الأحداث و قلنا أنها تختلف عن البرامج العادية مثل الورد .. الخ في أن مثل هذه البرامج لا تدخل حلقة متكرر مثل الألعاب و لكن هي برامج تعتمد علي تسويق الأحداث و هذا النوع من برمجة هذه البرامج يسمي ب البرمجة بتسويق الأحداث Events Driven Programming . و كمثال لذلك هو عندما نضغط بالماوس علي " ملف" في برنامج الورد فهنا قمنا بتسويق حدث النقر بالماوس .

هذا الأسلوب تسلكه البرامج العادية .

في هذه المحاضرة من المفروض أن نقوم بتحميل نافذة ، اعتقد أن الإكواد سوف تتكلم اكثر من الشرح العادي اليوم .

الألعاب مثل البرامج في الشكل المظهري بحيث أنها نافذة عادية جداً و لكن لها خصائص معينة سوف نحددها و نحن ننشأ النافذة .

سوف نضع كيفية برمجة نافذة في محاضرة أخرى; لأنها طويلة حقاً و لكن سهلة فهي تتعلق بكيف نظام الويندوز يدير النوافذ المنفذة و كيف يستقبل الرسائل و كيف ينفذها .

ملحوظة : و هنا يأتي اختلاف نظام التشغيل ويندوز علي نظام تشغيل الدوس في الإدارة فنظام دوس ليس متعدد المهام MultiTask علي عكس الويندوز المتعدد المهام ...

ألان

افتح برنامج الفيجول سي ++ 6 و اتبع آلاتي " يمكنك استخدام المترجم الذي يعجبك “.

قم بتنزيل ملف المشروع لهذا الدرس من الرابط التالي :

قم بتشغيل الملف Lecture_2.dsw .

قم بالضغط علي Compile .. علامة الاستفهام الحمراء لتشغيل البرنامج و ترجمة الاكواد الي ملف تنفيذي " ستجده في مجلد Debug داخل ملفات المشروع " .

Lect-1.JPG

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

بعد ترجمة الملف سوف تظهر هذه النافذة !

Lect-2.JPG

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

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

بأذن الله المحاضرات القادمة ستكون اكثر إثارة و ستكون طويلة نوعاً ما فكل هذا هو مقدمة فقط ..

أتمني أن يكون التعليق في الكود جيد ... و صدقني لن تجد مثل الشرح في المواقع الاجنبية و العربية ..

بقي لنا شرح هيكل كود عمل النافذة و لكن سوف نضع له محاضرة خاصة ..

المحاضرة القادمة ستكون عن الدايركت اكس .

قم بتنزيل ملف المشروع لهذا الدرس من الرابط التالي

Download_Lecture 2 Code

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#3

رائع.. درس مفهوم ... وتنظيم رائع.. المزيد......

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

المحاضر 3 " مهمة " *****

Finite State Machines

الالات محدده الخطوات و الالعاب .

لقد عرفنا في المحاضرات السابقة عدد من الاحداث التي غالباً أي لعبة تمر بها التنقل بين الاحداث هذه له اليه تسمي " ألية الخطوات المعرفه مسبقاً " Finite State Machinery .

هذا النموذج له عدد من الاهميات ، فهو يدرس مثلاً في الرياضيات المجرده Discrete Mathematics في كليات الحاسبات و المعلومات و لكن تطبيقاته عديده ...

علي حد ما استخدمته فيها 1 . الالعاب .. في " التحويل بين الاحداث بين اللعبه "

2. الذكاء الصناعي في " التحويل بين حالات الشخصيات و اساليبهم .

3. الالكترونيات و نظم الاجهزة " استخدمته منذ 5 ايام في التحويل بين حالات الانسان الالي الروبوت .

لنري كيف علي سبيل المثال نحاكي التحول بين احداث اللعبة فمثلاً تريد اسلوب اخراج مثل هذا

1. قم بتحميل فيديو اللعبة

2. بعد 10 ثوان

3. قم بتحميل صورة لوجو الشركة

4. بعد 30 ثانية

5. قم بالدخول إلي قائمة اللعبة Main Menu

6. إن ضغت علي New_Game

7. إذهب إلي حدث المرحلة الاولي .

// A Algorithm For Finite State Machines In Games 
// States In The Game
#define State_In_Video 0 
#define State_In_Logo  1
#define State_In_Menu  2
#define Statet_In_Game 3 

int state=State_In_Video;

if (state==State_In_Video)    // THAT'S TRUE !
{
// then Play the Video 
play_video("Demo.avi").
Sleep(300);   // WAIT SOME SECS 
state=State_In_Logo;         // HEY GO TO LOGO's STATE NOW !!!
}
else if ( state==State_In_Logo)
{
draw_my_Logo();  ارسم اللوجو حالاً

Sleep(5000) // اظبر بعض الملي ثواني

state=State_In_Menu;  // روح علي الحالة اللي بعديها فوراً

}

else If ( state==State_In_Menu)
{

 Draw_Buttons();  ارسم الزراير 
 // العمليات داخل المنيو في محاضره اخري
}

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

طبعاً هذا الاسلوب في كتابة الكود للمبتدئين هناك بعض التحسينات له لمن يحب

للمتوسطين :

بدل كتابة الثوابت النصية #defines

يمكن استخدام الكلمة enum

enum game_state { State_In_Video, State_In_Logo,_State_In_Menu,State_In_Game };

مع العلم

ان كلمة المتغيرات المعرفه بداخلها تأخذ ارقام من 0 إلي اخر عدد تلقائياً

اي هنا

State_In_Video ستكون 0

State_In_Logo هيكون 1 ... الخ

تحسين اخر لدوال If - Else

يمكن استخدام الدالة Switch

للمتقدمين

بدل من هذا الكلام يمكن استخدام مكدس Stack يقوم بعمل Push - Pop للاحداث

بحيث ان حدث دخل تقوم بعمل Pop له " اي اظهاره " .

طبعاً هذا الطريقة احبذها للمتقدمين .

انتهت المحاضرة . :D

إن شاء الله اجد فراغ و اكتب مقدمة الدايركت اكس .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#5

هذا

مثال

لتنزيل لتوالي الاحداث بسيط

و لكن يعطي الفكره

http://www.d-maxteam.com/upload/uploading/..._To_The_Moo.zip

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#6

اسلوب مبدع وعمل خلاق جزاك الله خيرا ياخ احمد صالح

#7

معلومات لم اجدها حتى في اعتى المواقع العالمية!!!!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

لقد قررت إيقاف الكورس ..

لا فائدة .

و السلام ـــــــ

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#9

لقد حرمت من نوط MVP لمساعدة العرب ......

لو ساعدت الاجانب لكنت حصلت عليه ...

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#10

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

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

وجزاك الله الف خير وسدد الله خطاك.........

#11

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

اعتذر لك عن عدم التفاعل.. لكن انت الان لم تدخل في الدايركت اكس اعتقد لو واصلت لوجدت التفاعل ... صحيح الوضع محبط واحس في ذلك

لكن نحن كعرب .. لايوجد عندنا نوط تكريمي.. يكيفيك تسلم من التجريح :(

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

اتمنىان تواصل في هذا الموضوع.. او (وهو المهم لا تنقطع عن المنتدى) ومشكور على المحاضرتين القيمتين.... ( وانا في انتظارك)

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12

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

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

والله يعطيك العافيه على كل ما تقدمه من معلومات وان شاء الله ترجع وتواصل الكورس.

وجزاك الله الف خير.......

#13

حراااااااااااااااااااااااااااااااااااااااام عليك يا أخ أحمد :(

تعشم الناس بالدروس ثم تقوم بإلغاء كل شىء فى لحظة غضب :(

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

الشمرى لم نقوم بالضغط عليك إذا كنت مصر وشكراً على الثلاث محاضرات :unsure:

#14

ممتاز ممتاز ممتاز ممتاز ممتاز

اقتباس

آسف الدخول متقطع هذه القتره

اقتباس

[يمين]

.[/يمين]

A7med_prof-4-2007.jpg

اخر مواضيعي 2007

االمثال مطبق على موقع بورصه سعودي

.

.

مواضيع مهمه ومطلوبه بكثره VB6

.

بــرامج ومشــاريع عربيه كامــله {HnHn} والمزيد في قسم برامج الاعضاء || ربط قواعد بيانات اكسس مع الفيجوال بيسك, مادة دراسية كاملة {بنت اليمن}|| المرجع الشامل لجمل SQL ا {GENIUS-IT} || كيفية التعامل مع مكتبة الـ DAO, في الوصول إلى قاعدة بيانات {رمضان} || مثال ريط Visaul Basic 6.0 مع SQL SERVER ا || العمليات التي تجرى على قاعدة البيانات, مثال كامل {بنت اليمن} || تصدير البيانات من الاكسل الي الاكسس بالفيجوال بيسك {HnHn} || البحث في قاعدة البيانات {MANSUR} || قواعد البيانات العلائقية وتقنيات الوصول إليها {عبد الله فتحي} || كيفية أظهار بيانات جدولين بواسطة التاريخ ,,,,,,,

.

أخي ربما سؤالك اجابته في أحدى هذه المواضيع فإن لم تجد قم بالبحث وان لم تجد اطرح سؤالك مع وضع عنوان مناسب بحيث ان يكون هذا العنوان دال على محتوى الموضوع فغير ذلك من أكبر الكبائر في المنتدى وسيؤدي الى غلق او حذف موضوعك .

.

</
#15

يا خي واصل الدوره الا يكفيك انه موضوعك تصفحه اكثر من 300 شخص الا يعني هذا ان الناس مهتمون بالموضوع

#16

!!!!!!!!!

يا ليت تواصل وتعتبر اللي مضى مضى... ( درسين عالماشي ;) )

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#17

للرفع

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#18

دعنا نرى كمان درسين

موقعي :- www.gamesdevteam.com

#19

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

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

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

محمد وليد - عرب 48 - Admirer4@Gmail.com

مهندس كهرباء والكترونيكا (B.Sc)- متخصص بقنوات الاتصال عن بعد , والدوائر الكهربائيه المعقده VLSI .

محترف برمجه(B.A) في لغه باسكال , سي , ...

#20

بالراحة ياMohammed27 .. بالنسبة لدروس الباسكال ,, اقول لك وش السبب من عدم التفاعل ..... اغلب الموجودين السي - البيسك-الشارب .

حتى الدلفي .. المتطورة .. لايوجد من يستخدمها في برمجة الالعاب الا عروة .. وممكن الاخ محمد نسمان >ان شاء الله كتبت الاسم صح .

Mohammed27 .... يحسب لك .. حبك للمساعدة .. واتمنى انك تفيد المنتدى .. بامور اخرى .. مفيدة ايضا .. اعتقد لديك كم من المعلومات

--------

بالنسبة للدروس يا احمد .... ستجد من يستفيد .. لكن للاسف اغلبهم من الزوار :P

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#21

احمد ما رايك ان تكمل هذا الكورس وتجعله دوره ضخمه ,

يمكنني مساعدتك :D

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

تم تعديل هذه المشاركة بواسطة عامر علاء في 16 سبتمبر 2005 في 19:03

#22

موافق ـ تابع معي القائمة علي الخاص

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#23

لقد ارسلت لك رساله وارجو ان ترد عليها

#24

وينك يا احمد

:o

على فكره , انا لدي مسنجر ويمكنني اضافتك اذا لا تملك مشكله

تم تعديل هذه المشاركة بواسطة عامر علاء في 17 سبتمبر 2005 في 17:30

#25

شكراً ولكن إن كنت تستطيع عمل المحاضرات بصوت وصورة او pdf

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

my new site click here

هذا الموضوع مغلق.

مواضيع مشابهة