عندما نضع شرط التصادم في اللوب while نحن وضعنا شرط عندما يكون اقل من ١٠ بين الرأس والجسم يخسر لكن بلعبة الثعبان يمكن للرأس اذا كان اتجاهه بالاعلى أن ينزل إلى الأسفل دون الالتفاف وعند ضعط على النزول إلى الأسفل سوف تصبح المسافة بين الرأس والجسد اقل من ١٠ وهو لم يصدم لكن سوف يفعل الشرط ويضع game over هل نضيف شرط داخل الشرط المسافة أو ماذا
نعم كلامك صحيح عندما يكون راس الثعبان متجه لاعلى فيمكن انزاله الى اسفل بدون اي التفاف ابدا وهكذا ستخسر بستضام الراس بالقطعة التي اسفله ولذلك قمت بحل المشكلة في اللعبة خاصتي لان المستر على ما اظن لم ينتبه ربما الى هذا الامر فجعلت الكود انه اذا كان راس الثعبان متجه لاعلى واراد المستخدم ان يوجهه الى اسفل فيتجاهل الكود هذا الامر لانه سيصبح تعارض وسيخسر المستخدم
ساشاركك الكود لكي تنتفع به وتصلح هذا الخطا في اللعبة اليك الكود
def up(self):
if self.head.heading() == 270:
pass
else:
self.head.setheading(90)
def down(self):
if self.head.heading() == 90:
pass
else:
self.head.setheading(270)
def rghit(self):
if self.head.heading() == 180:
pass
else:
self.head.setheading(0)
def left(self):
if self.head.heading() == 0:
pass
else:
self.head.setheading(180)
فكما سترى في الفانكشن لكل اتجاه انه اذا كان يريد المستخدم وليكن ضغط على السهم اعلى فسترى في فانكشن up انه اذا كان اتجاه راس الثعبان الى اسفل فليتجاهل الكود باستخدام pass والا فليوجه راس الثعبان لاعلى وهكذا طبقها على كل الفانكشن المخصصة للاتجاهات وستحل المشكلة باذن الله
أيوه، في الحالة دي، علشان تحل المشكلة دي وتتفادى التفعيل الخاطئ لشرط التصادم، محتاج تضيف شرط إضافي يتحقق من اتجاه حركة الرأس بالنسبة للجسم.
ممكن تضيف شرط بحيث يتأكد إن الرأس لا تتجه في الاتجاه المعاكس مباشرة لحركتها الحالية. على سبيل المثال، لو الثعبان بيتحرك لأعلى، لا تسمح له يتحرك لأسفل مباشرة. بنفس الطريقة، لو بيتحرك لليمين، لا تسمح له يتحرك لليسار مباشرة.
ممكن تضيف الكود ده داخل شرط التصادم، فبدل ما تعتمد بس على المسافة بين الرأس والجسم، تضيف كمان شرط بيتأكد من اتجاه الحركة. مثلا:
if abs(مسافة_بين_الرأس_والجسم) < 10 and not (اتجاه_الرأس == "up" and اتجاه_الجسم == "down") and not (اتجاه_الرأس == "left" and اتجاه_الجسم == "right"):
game_over()
بكده هتتفادى تفعيل شرط التصادم في الحالات اللي الثعبان فيها بيتحرك بطريقة مش طبيعية زي اللي أنت وصفته.
اللهم بارك
حلول مبتكرة
نفع الله بكم
وجزاكم الله خيرا
تفكير منطقي لكن نفذت هذا قمت بتجارب ع كل قطعة من الجسد وبالتجارب ع قبل اخر قطع من الجسد ومقارنتها مع رأس الثعبان عندما يكون الرأس للأعلى والجسد للأسفل أو بالعكس نفذ continue ومع ذالك يتفعل شرط التصادم
بدل ما تعتمد على مقارنة اتجاه الرأس والجسم قبل آخر قطعة فقط، ممكن تستخدم مفهوم “التحقق من الاتجاه السابق”. الفكرة هنا إنك تخزن الاتجاه السابق للرأس، وبعدين لما تجي تتحقق من التصادم، تتحقق من الاتجاه الحالي مع الاتجاه السابق، وتمنع الاتجاه المعاكس المباشر.
قمت بفعل ذالك بالفعل حزنت اتجاه السابق وقارنته لكن القائمة في كل مرة اقوم ب افراغها لا تفرغ حتى اقارن النتيجة الثانية قمت مرة اخرى ووضع المقارنة ب اخر عنصر لكن لم تعمل ما بعرف السبب بس نفذت ها حقا
اجع كود تحديث الاتجاه
هذا الكود لا يسمح للثعبان بان يتجه اتجاه معاكس