مدونة انس

شارك الغير بما تعرفه، حتى تتمكن من التقدم

نظام الحالات(States system) : مقدمة

السلام عليكم.

 

سنتطرق اليوم الى موضوع مهم، يتداوله معظم مبرمجي الالعاب، و المعروف باسم : نظام الحالات(States system).

 

قبل الخوض في الموضوع، من الافضل ان نبدأ أولا، بتعريف مصطلح "الحالات" و اعطاء امثلة عن استخدامها في الالعاب.

 

تعريف مصطلح الحالة : هي تغيرات تطرأ على خصائص كائن ما، في ظروف معينة. مثلا : حالة : الوقوف، حالة المشي، حالة الركض...الخ.

ملاحظة : هذا التعريف، ليس لغويا، بل اصطلاحي، كما انه تعريف مقترح وليس متفق عليه.

 

و حتى نبسط الفكرة، و نوضحها، في مايلي صور تمثل بعض الحالات التي يخضع لها شخصيات الالعاب :

 

 

       

 

 

 

 

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

قبل الشروع في الموضوع البرمجي، ساقوم باستعمال لغة السي شارب، لكن المفهوم يبقى قائما و قابلا للتطبيق في اي لغة اخرى.

 

 

الطريقة "البسيطة" :

 

تعتمد هذه الطريقة، على استعمال خاصية التعداد في لغات البرمجة (enumeration)، مثلا :

public enum PlayerStates{

Stand = 0,

WalkRight,

WalkLeft,

Run,

Jump

}

بعدها، يتم كتابة اجراء لكل حالة : 

 

void Stand();

void Walk();

void Run(); void Jump();

و اخيرا، يتم في كل مرة، التحقق من طبيعة الحالة الحالية، و منادات الدالة التي توافقها :

private PlayerStates CurrentState ;

// in update function

switch(CurrentState){

case Stand :

Stand();

break;

case WalkLeft:

case WalkRight :

Walk();

break;


case Run :

Run();

break;


case Jump:

Jump();

break;


}

هذه الطريقة، تعمل بشكل جيد، لكنها تعاني من عدة عيوب، لنناقش بعضها:

أولا : هذه الطريقة ليست مرنة. لنفرض اننا في مرحلة ما من اللعبة اردنا اضافة حلات جديدة، يجب علينا في هذه الحالة اضافة اسم جديد في تعداد الحالات، ثم اضافة دالة جديدة، ثم اضافتها في اختبار الشرط(Switch).

هذا عمل مرهق خصوصا عندما يكبر المشروع، و يتعقد معه البرنامج.

ثانيا : هذه الطريقة، تزيد من "تبعية الكود"(depandency). أي ان انه من الصعب فصل كود الحالات عن كود منطق اللعبة، و ايضا يصعب معه اضفاء خاصية برمجة الحالات باستعمال لغة بريمجات (Scripte).

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

 

للتخلص من هذه العيوب، توجد هنالك عدة طرق اخرى، ساتكلم عن طريقة الكائنات (نموذج تصميم الحالة) في تدوينة اخرى ان شاء الله.

 

اتمنى ان يكون هذا المقال البسيط مفيدا، و الى موضوع اخر انشاء الله.

 

سلام

 

التعليقات (1) -

  • كرم

    29/05/2013 11:38:49 م | الرد

    شكرا على المواضيع القيمة

أضف تعليقاً

Loading