المفروض لما يكون حرف ال X. كما هو في الصورة ينكسر اللوب و تنتهي اللعبة لكن هذا لايحدث و يبقى اللعب مستمر عادي رغم أني عملت الbreak
بحق كل عزيز عليك ساعدني …
اتوقع المشكله في ملف (pion) فى الداله (position) لانها بترجع احداثيات مش x,o فبتالي فى الداله (update_letters) انت بتضيف لـ(self.all_x_y_coordinates) احداثيات مش x,o . فإنت فى الملف الرئيسي لما تتحقق من ان x,o في (self.all_x_y_coordinates) حيقول لا لانها مفهاش x,o اصلا بل فيها احداثيات.
جرب تعدل عليها وقولى وصلت لايه .
آسف على التأخير في الرد
خلاص حليت هذه المشكله… المشكلة كانت في أني كان لازمني أعمل شرط يتحكم في كتابة X\O
أنا كنت عامله تصميم للدالة update_letters بأنها تأخذ الأحداثيات من عند الدالة onscreenclick
و تقوم مباشرة بطباعة ال X أو ال O … فلذلك كانت الطباعة تبقى مستمرة حتى لو فاز أحد اللاعبين
الحمد لله انتبهت لهذا و عملت شرط للطباعة… لو تحقق الشرط تتم الطباعة و لو لم يتحقق لا تتم الطباعة
أنا الأن عالقة عند لو كان احد اللاعبين روبوت صارلي يومين أحاول و لسه مالقيت طريقة
البرمجة ليست بتلك السهولة
من فضلك اشرحلي هذا الجزء, لم أفهمه
else :
open_locations = []
ننشأ قائمه لاحتواء الاماكن المتاحه
for x in range (9):
نصنع لوب يدور 9 مرات (عدد المربعات فى لعبه x,o )
if locations [x-1] != 'o' and locations [x-1] != 'x':
نرى اذا كانت قائمه locations بإنداكس ما قبل x بواحد (لان بايثون تعد من الصفر ليس من الواحد ) لا يساوي x او o
open_locations.append (x-1)
نضيف هذه الاحداثيات الى قائمه الاماكن المتاحه
if len (open_locations) == 8 and locations [4] == 'o':
نرى اذا ضغط المستخدم فى مكان واحده وكان ذالك المكان هو المنتصف (لان هناك طريقه سهله للفوز اذا ضغط المستخدم فى المنتصف ولم يضغط الكمبيوتر فى احد الزوايا)
angles = (0,2,6,8)
return choice (angles)
أُخبر الكمبيوتر بالزوايا ونرجع قيمه عشوائيه من تلك الزوايا
if open_locations :
return choice (open_locations)
اذا كانت قائمه «open_locations» ليست فارغه نرجع منها قيمه عشوائيه
else :
return 100
والا اذا كانت فارغه نرجع الرقم 100 كدليل على ان اللعبه قد انتهت (it’s a tie)
ملاحظه : انا كاتب شرح كل جزء من الكود تحته وليس فوقه
السلام عليكم ورحمة الله وبراكاته
هل هذا الكود كلة مما تعلمناه
ولا في حاجات متقدمة شوية احنا مش عارفنها
لان انا اخر اختبار عملتو كان الي بعد ال PING PONG
هذه هي الداله الوحيده الجديده :
شكرا جزيلا لحضرتك ،🩵🤍
عفوا اخي الكريم @IBRAHIMELSAYED
الله ينور عليك يا بطل مجهود جميل جداا منك
عاااش بجد
شكرا جزيلا لكلامك الجميل اخى
سامحني على فهمي الضعيف , أنا أعرف أن لغة البرمجة تبدأ العد من 0 وليس من 1 مثل البشر
ولكن أنت عندما كتبت
for x in range (9):
بأستعمالك ال range
أنت بالفعل بدأت العد من ال 0
أذا لمذا كتبت
if locations [x-1] != ‘o’ and locations [x-1] != ‘x’:
لمذا أنقصت ال1 من الx
بما أن قيمة الx
ستبدأ تلقائيا من عند ال0
أليس من الأولى أنك كنت استعملت الxبدون أن تنقئ منها ال1
اتوقع انى اتلخبط بس عادى لان اول مره x = 0 و 0 - 1 = -1 واللى هو الانداكس الاخير وتانى مره x=1 و 1-1=0 واللى هو الانداكس الاول وهاكذا الى النهايه ولاكن انتى ممكن تخليها من غير انقاص الواحد او به او بإنقاص اثنين او ثلاثه حتى التسعه وستكون النتيجة واحده
تمام … شكرا على الرد:+1:
العفو … (◉‿◉) (◉‿◉)
السلام عليكم ورحمه الله وبركاته كيف حالك يا اخي
انا حاولت اعمل العبة لاكن وقفت عند شي ال هوا
انو انا لما اضغط علي الماوس كيف اعرف المكان الي هوا فيه عشان اكتب في x
وعليكم السلام ورحمة الله وبركاته الحمدُلله بخير
تقدر تعرف مكان الضغط عن طريق if
العاديه لأن اكس تكون متغير فتستطيع ان تتحقق باكثر من طريقه مثل :
if x in range (100,350)
if 350 > x > 100
if x > 100 and x < 350
وكذالك مع متغير الواي مثل :
if y in range (100,350)
if 350 > y > 100
if y > 100 and y < 350
كما انا فعلت فى هذا الجزء من الكود لتحديد هل كنت ستلعب مع صديق ام ستلعب مع روبوت :
def choi (x,y):
if -250 < y < -150:
write.clear ()
window.bgcolor ('indian red')
create_screen (write)
window.onscreenclick (play_with_robot)
elif -400 < y < -300 :
write.clear ()
window.bgcolor ('indian red')
create_screen (write)
window.onscreenclick (play_with_friend)
انشاء الله تكون فهمت
اذا في شيئ انت ما فهمته قولي
سامحني هتعبك معي ممكن توضح اكثر
الي انا مش فاهمو
انو انا اعرف هوا في x وي y كيف بس
يعني انتا في الفانكشن واخد 2 معلومة الي هوا مكان الماوس الي ضغط فيه
كيف حصلت عليهم