حلقة اللعبة الأساسية The Game Loop
الالات محدده الخطوات و الالعاب .
لقد عرفنا في المحاضرات السابقة عدد من الاحداث التي غالباً أي لعبة تمر بها التنقل بين الاحداث هذه له اليه تسمي " ألية الخطوات المعرفه مسبقاً " Finite State Machinery .
هذا النموذج له عدد من الاهميات ، فهو يدرس مثلاً في الرياضيات المجرده Discrete Mathematics في كليات الحاسبات و المعلومات و لكن تطبيقاته عديده ...
علي حد ما استخدمته فيها 1 . الالعاب .. في " التحويل بين الاحداث بين اللعبه " 2. الذكاء الصناعي في " التحويل بين حالات الشخصيات و اساليبهم . 3. الالكترونيات و نظم الاجهزة " استخدمته منذ 5 ايام في التحويل بين حالات الانسان الالي الروبوت .
لنري كيف علي سبيل المثال نحاكي التحول بين احداث اللعبة فمثلاً تريد اسلوب اخراج مثل هذا 1. قم بتحميل فيديو اللعبة 2. بعد 10 ثوان 3. قم بتحميل صورة لوجو الشركة 4. بعد 30 ثانية 5. قم بالدخول إلي قائمة اللعبة Main Menu 6. إن ضغت علي New_Game 7. إذهب إلي حدث المرحلة الاولي . CODE // 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 له " اي اظهاره " . طبعاً هذا الطريقة احبذها للمتقدمين .