الشبكة العربية لمطوري الألعاب

خبير  مهند محمد علي مشاركة 1

اعمل حاليا في لعبة tic tac toe انتهيت من ال two player
لكن وقفت حايرا في خوارزمية لعب الكمبيوتر

فانا لا اريد اما ان يفوز الكمبيوتر  او نتعادل اريد ان تكون الحظوظ متساوية بين اللاعب والكمبيوتر والتعادل
علي فكره المحرك هو unity3D
منتظر الرد بفارغ الصبر

مبتدئ  إياد الجوابرة مشاركة 2

السلام عليكم
بداية أود التعليق على ما قلته -أو ما تنشده- من تساوي الحظوظ بين اللاعب والحاسب..
بالنسبة لمجال الذكاء الصنعي (وخصوصا في مجال الألعاب) عادة ما بكون المطلوب هو إيجاد الحل الأمثل. مثلا في الألعاب الاستراتيجية RTS (مثل Generals) يجب على الوحدات إيجاد أقصؤ طريق عندما يأمرها اللاعب بالتحرك إلى نقطة معينة. كما إنه من غير المقبول أن تتخذ هذه الوحدات طرقا طويلة وعندها ستقول إن الوحدات تتصرف بغباء أي لا تعرف الطريق الأفضل للوصول. وكذلك المثل في ألعاب محاكاة كرة القدم (FIFA WC مثلا) عدما يحصل الحاسب على فرصة ركلة جزاء مثلا، فإنه سيحاول حساب الزاوية والطاقة المثلى لضرب الكرة كي تدخل المرمى.
لكنك ستقول (والأمر واضح في لعبة فيفا) إمكانية تعديل مستوى الحاسب، فيمكناك أن تختار مستواه من الضعيف وحتى المحترف.
وكذلك الأمر بالنسبة للعبة الشطرنج.هنا يدخل مفهوم عمق البحث والتجريبية المستخدمة.
لنحاول تمثيل لاعب شطرنج: سيقوم الحاسب بتوقع أحد الحركات التالية للخصم ويناء عليها سيختار حركة جيدة تبعا ل معيار معين .
والسؤال: إذا حاول الحاسب توقع مستوى أخر من التحركات ألن يحصل على خيار أفضل؟ وماذا إذا حاول توقع مستوى ثالث؟إذا سيستمر الحاسب بتوقع مستويات التحركات حتى تنتهي اللعبة ويختار الحركة التالية بناء على الحركة التي تجعله يفوز.
ولكن مع الأسف لن يستطيع الحاسب فعل هذا إذ أنه سيستهلك حجم هائل من الذاكرة والوقت.
هنا يمكنك ربط مفهوم مستوى لعب الحاسب بعمق مستوى البحث. مثلا إذا كنت تلعب مع حاسب كمبتدئ سيقوم باختيار الحركة التالية بناء على البحث في خمسة مستويات. أما إذا كنت تلعب معه كمحترف سيقوم باختيار الحركة التالية بناء على البحث في عشرة مستويات.

أعتذر على الاطالة
أما بالنسبة للعبة مثل tic tac toe فإن البحث عن أفضل حل عملية سهلة جدا، يمكن البحث بداية عن فوز بحركة واحدة، ثم البحث عن فوز للخصم بحركة واحدة ووولذلك فإن محاولة إيجاد حظ متساو لن تجدي إلا باستخدام عامل عشوائي معين لاختيار الحركة التالية

ألق نظرة على الرابط التاليhttp://www.codeproject.com/KB/vbscript/RSM_TicTacToe.aspx

وها هي لعبة مشابهة لكن الفوز بخمس مربعاتhttp://gomoku.atspace.com/

أرجو أن تكون مشاركتي مفيدة
وأعتذر عن الاطالة

خبير  مهند محمد علي مشاركة 3

اولا  اشكرك جدا.
ثانياً:-
اذن لا بد من استخدم الرقم العشوائي
طيب.
استخدمت العامل العشوائي في جميع ادوار الكمبيوتر وقد نجح الامر .
لكن تحس ان الكمبيوتر _غبي جدا_ يختار عشوائي بطريقة مريعه بحث حتي لو ان اللاعب بقي له مربع واحد ويفوز فان الكمبيوتر يضع جميع الاحتمالات الاخري متساويه ولا يختاز المربع الذي هو من البديهي ان يختاره.

الان انا اري ان استخدم :-
المرحله الاولي: عامل عشوائي


المرحله الثاني : عامل عشوائي

المرحله الثالثه: يقوم باختبار احتمال الفوز اذا وجد مريع يضمن له الفور ويختاره.

المرحله الرابعة: يقوم باختبار احتمال الفوز اذا وجد مريع يضمن له الفور ويختاره.

وهكذا اضمن له التساوي علي الاقل مع مستوي اللاعب المتوسط
ما رايكم

مبتدئ  إياد الجوابرة مشاركة 4

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





لكن لا داعي للتعمق بمسائل البحث ولنحاول ترتيب الأفكار للحصول على تنيجة أفضل:

أولا: يقوم باختبار احتمال الفوز اذا وجد مريع يضمن له الفور ويختاره

ثانيا: يقوم باختبار احتمال الفوز للخصم  اذا وجد مريع يضمن له الفور ويختاره

ثالثا: عامل عشوائي

بهذا تكون قد حسنت قليلا من مستوى الحاسب.
من ناحية أخرى دعنا نحاول تصميم مستويات للعبة باستخدام العشوائية:
لدى الحاسب امكانية الاختيار الخيار الصحيح دوما (وهو ما حاولت تفاديه بطرحك السؤال)
 كما أن لديه امكانية اختيار خيار سيء بناء على عشوائية معينة أو ترتيب أو غير ذلك
لنقل أن الحاسب ذكي بنسبة 10 % أي أنه سيختار الخيار الصحيح بهذه النسبة
عندها نقوم بحساب عدد عشوائي وتقريبه إلى مجال معين (طول هذه المجال هو 10 % من المجال الكلي)
عندها سيكون الاحتمال هو 10 % وتتحكم بالمجال حسب المستوى المطلوب
هذا للتوضيح


x1 = 0
x2 = 10


float prob = getRandom(1, 100)
if (prob between x1 and x2)
{
choose best choice
}
else
{
choose fool choice
}




بالتوفيق

خبير  مهند محمد علي مشاركة 5

في 08 اكتوبر 2011 02:32 ص، عقد إياد الجوابرة حاجبيه بتفكير وقال:

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

+++++++++ شي اخير
استاذنك ان اضع thanks لاسمك  في صفحة about في اللعبه