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

الدرس الأول: Fsm

بدأه hunterxhunter في 25 أغسطس 2008 · 10 رد · 7,031 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

المحتوى

س1- ماهو finite state machines؟

س2- مما يتكون FSM ؟

محاكات بعض التطبيقات الموحجوده في الألعاب بإستخدام FSM

س1- ماهو finite state machines؟

التعريف مقتبس من Wikipedia

FSM is a model of behavior composed of a finite number of states, transitions between those states, and actions.

الترجمه

FSM هي نمودج من السلوك يتكون من عدد محدود من الstates

ومن transitions بين هذه states

و actions

س2- مما يتكون FSM ؟

كما هو واضح من التعريف فهو يتكون من

1-States

مثل : نوم,إستيقاض ,هجوم , دفاع , هروب ,إلخ ...

2- transitions

وهي الوصلات بين States

مثل الوصله بين حالة النوم وحالة الإستيقاض

أو الوصله بين حالة القتال وحالة الهروب

كل و transition تحتوي على condition

وهو الشرط الأنتقال من state إلى أخرى

3-action

يحتوي على

Entry action

وهو الحدث الذي سيطبق عندما تدخل ال state

Exit action

وهو الحدث الذي سيطبق عندما تخرج من ال state

Input action

وهو الحدث الذي سيطبق على حسب المدخلات state

Transition action

هو الحدث اللذي سيطبق في طريق الإنتقال من state إلى أخرى

محاكات بعض التطبيقات الموحجوده في الألعاب بإستخدام FSM

المثال

اللعبه the sims

المثال سيحاكي إستيقاض النائم وهو منزعج عند مشاهدت شخص آخر التلفاز

الشروط :أن يكون التلفاز في نفس غرفة النوم

المتغيرات: مقدار الإنزعاج وهو من 0 إلى 10

وإذا كان أكثر من 5 فإن الشخص سينزعج وسيتيقض من نومه

سنستخدم نمودجين FSM

الأول للشخص النائم

وسيحنوي على حالتين(states)

1- النوم

2- الإستيقاض

شرط الإنتقال من حالة النوم إلى الإستيقاض هو أن يكون مقدار الإنزعاج أكبر من 5

النموذج الثاني فهو للتلفاز

وسيحتوي على حالتين

1- التشغيل

2- الإقفال

أحد الأحداث التي ستطبق طوال فتره تشغيل التلفاز زياده مقدار الإنزعاج بمقدار معين (مثلا 0.2 لكل ثانيه)

ولكن بشرط أن يكون الشخص النائم في نفس الغرفه

تستطيع تطبيق السابق عن طريق إستخدام العبارات الشرطيه بسهوله

if and switch لمبرمجين c++

أرجوا منكم إثراء الموضوع بخبرتكم

#2

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

بارك الله فيك ,, موضوع جميل .

- حقيقة لم أكن أعرف ان هذا يوصف بأنه ذكاء اصطناعي , الا بعد قراءة أحد المقالات .

- أفضل طريقة لتطبيق هذا المفهوم في برمجة الألعاب , هو الاستعانة بما يسمّى بال enum :

لنأخذ على سبيل المثال ,, الحراس في لعبة Metal Gear 4 .. هل لعبتموها :D ..

- نائم , ميت , مستيقظ , يقاتل , الخ .

enum CharacterState
{
STATE_SLEEP, 
STATE_AWAKE,
STATE_FIGHTING
STATE_DEAD
};

ويمكن تعميم الفكرة على اللعبة كاملة .. حالة اللعبة .. البداية - القائمة الرئيسية - المرحلة الأولى - الجزء كذا من المرحلة الأولى ,, وبالتالي يسهل تتبع اللعبة والتحكم بها بشكل كامل ,,

شكرا لك أخي مرة أخرى ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

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

متابعين معك .. بارك الله فيك ,,

هذا كتاب عن الذكاء الاصطناعي باللغة العربية

تأليف: آلان بونيه

ترجمة: علي صبري فرغلي

Araic_AI.pdf

تم تعديل هذه المشاركة بواسطة الكون في 26 أغسطس 2008 في 00:30

#4

استخدام الEnum ليس كافياً فهو لا يمثل الا اسم الState و في الواقع الState هي Object يحوي كما قال الأخ العزيز Hunterxhunter على شروط للدخول و شروط للخروج و عمليات و غيرها من المعلومات

و هذا مثال بسيط على كود بسيط للState

  1. public delegate IList<State> StateAction(State s);
  2.  
  3. public abstract class State
  4. {
  5. StateAction _onPreConditionsSatisfied;
  6.  
  7. public State(StateAction action, IList<ICondition> preconditions)
  8. {
  9. _preConditions = preconditions;
  10. _onPreConditionsSatisfied = action;
  11. }
  12.  
  13. private string _name;
  14.  
  15. public string Name
  16. {
  17. get { return _name; }
  18. set { _name = value; }
  19. }
  20.  
  21. private IList<ICondition> _preConditions;
  22.  
  23. public IList<ICondition> Preconditions
  24. {
  25. get { return _preConditions; }
  26. }
  27.  
  28. private IList<State> _nextAvailableStates;
  29.  
  30. public IList<State> NextAvailableStates
  31. {
  32. get { return _nextAvailableStates; }
  33. }
  34.  
  35. public virtual void Run()
  36. {
  37. if (_preConditions == null || _preConditions.Count == 0)
  38. {
  39. _nextAvailableStates = _onPreConditionsSatisfied(this);
  40. return;
  41. }
  42. foreach (ICondition condition in _preConditions)
  43. {
  44. if (!condition.IsSatisfied())
  45. break;
  46. }
  47. _onPreConditionsSatisfied(this);
  48. }
  49. }
  50.  
  51. public interface ICondition
  52. {
  53.  
  54. string Name{ get; }
  55. bool IsSatisfied();
  56. }
  57.  
  58.  
  59.  

تم تعديل هذه المشاركة بواسطة bashmohandes في 26 أغسطس 2008 في 09:33

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#5
اقتباس
وعليكم السلام

متابعين معك .. بارك الله فيك ,,

هذا كتاب عن الذكاء الاصطناعي باللغة العربية

تأليف: آلان بونيه

ترجمة: علي صبري فرغلي

رائع أخي ,, لم اقرأ الكتاب ,, لكن تنسيقه رائع وهذا مهم أيضا :D ..

سأدرس مادة الذكاء بعد فصلين من الان .. متشوق جدا لهذه المادة .. وأتمنى أن أتعرّف على الأساسيات على يد أخونا عبدالله ( hunter ) ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

شرح رائع اخي hunterxhunter

كان عندي فكره عن ال FSM درستها في مادة الذكاء الإصطناعي , لكني لم اكن اعرف تطبيقها في مبدأ الألعاب يتم بهذه الطريقة الجميله

مشكور بارك الله فيك

متابعين معك ان شاء الله ...

#7

السلام عليكم

شكرا لكل أخواني على إثراء الموضوع

الآن لكم الخيار

هل ننتقل إلى موضوع اللي بعده

أم نعمل له تطبيق في منتدى الورش

طبعا التطبيق مفتوح المصدر أيضا سيكون بأكثر من لغه برمجه يعني بنفس فكرة التطبيقات اللي في موقع Nehe

أي بلغة C++ ,C# ,vb ,...

أنتضر آراكم

#8

برأيي مازال الوقت مبكرا قليلا على التطبيق , ربما بعد الدرس القادم إن شاء الله

#9

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

والله أعلم .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#10

السلام عليكم

مشكور اخي عبدالله علي الشرح

ومشكورين علي الكتاب

اخي bashmohandes اتمني لو تعطينا ولو مثال بسيط عن الكود الذي حضرتك وضعته لتمثيل ال States

كنت من زمان قرأت في كتاب

وأود ان انقل لكم الاتي

يمكننا ان نتعامل مع ال states باستخدام ال switch case statements والشكل الافتراضي كالاتي


[DEFAULT ACTIONS]
[CONDITION EVALUATION]
if (TRANSITION)
state=destination state;
(...)
break;
case [NAME OF STATE]:

حيث يجب لكل state ان نحدد لها ثلاثة اشياء علي الاقل

1- اسم ال state

2- ال action الافتراضي الذي يجب تطبيقه في هذه ال state

3- العمليات التي يجب تطبيقها للانتقال للحالة التالية next state

انظر الصورة الاتيه والتي تمثل finite state machine بسيطة لحارس او جندي

post-67547-1219777575_thumb.jpg

من المهم جدا وصف ال FSM برسم بياني حيث ان الامور سيزيد تعقيدها فيما بعد خصوصا لو حاولت كتابة كود لـ FSM كبيرة نوعا ما

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

Ahmed Ezz

Software Engineer

ezzelden.ahmed@yahoo.com

http://ahmedezz.110mb.com/

انما عمرك بأعمالك ، فكم تريد أن تعيش؟

#11

السلام عليكم

شكرا أخي aeamg2005 على الإضافه

أيضا هناك طريقه أخرى لتمثيل states في جدول وهي State Transition Table

بالنسبه إلى المرحله البرمجيه فهي تكون كالتالي :

التعريف عن ال states

إما عن طريق enum (كما أوضح أخي عبدالله)

أو بال #define

هذا لمستخدمين c++

أما النواه البرمجيه لل FSM فتكون مثل ما أوضح أخي bashmohandes

وأيضا الأخ aeamg2005

أي أن النواه تكون عباره عن if أو switch أو كلاهما(الفرق فقط في التنضيم)

إذا سننتقل إلى search methods

وسأشرح إن شاء الله أربع خوارزميات

1-DFS

2-BFS

3-A*

4-Dijkstra

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