** تحدي سباق السلاحف --مهم جدا

جربت كود الأساذ الفاضل ولكن هناك بعض النقاط التي يجب تعديلها…ركز معي ستتعلم الكثير كما فعلت أنا…

معطيات: الابعاد 1200 عرض 800 طول.
ترتيب القائمة احمر اخضر و ازرق.
خط النهاية هو 540

بالنسبة لدالة تحريك السلاحف…تعيين الفائز بهذه الطريقة قد يكون غير دقيق كفاية؟؟
ركز فقط على دالة تحريك السلاحف.

…تقوم حلقة فورلوب بتحريك السلاحف تبعا لترتيبها في القائمة..اول من يتجاوز 540 هو الفائز
ويتم كسر حلقة وايل..
وبالتالي لن يتم النظر في قيم بقية السلاحف…

تخيل معي ماذا لو ان اخر سلحفاة في القائمة مثلا حصلت على 550
واول سلحفاة حصلت على 543
يتم مباشرة أخذ اول قيمة في القاىمة التي وصلت للنهاية ثم تطبع النتائج.

منطقيا من له اكبر عدد من الخطوات فهذا يعني انه اول من وصل الى النهاية صح؟
لو حركنا السلاحف بطريقة ما في نفس الوقت تماما…بالطبع ان صاحب 10 خطوات سيسبق صاحب 3 خطوات؟
مهما كانت سرعة فورلوب فانها ستحرك العناصر في القائمة كما قلنا تبعا لترتيبها …

وبالتالي هذا الكود ليس افضل حل. للتحقق من كلامي قم بطباعة قيم اكس لكل السلاحف عند نهاية السباق وسترى الفرق في النتائج…
لاحظ في هذا المثال الحي..
انا راهنت على الأزرق -اخر عنصر في القائمة- حصلت على 550 بينما الأخضر - العنصر الثاني في القائمة- حصل على 544 وهو اللي ربح السباق رغم انني اتفوق عليه في الخطوات وهذا ببساطة لأنه سبقني في ترتيبه في القائمة.

الحل.. قمت بتعديل بسيط على مستوى دالة تحريك السلاحف..كل من يتجاوز 540 يتم إضافة قيم إكس الى قائمة الفائزين ثم ترد لي اعلى قيمة والتي تعبر عن اول من عبر خط النهاية.
ثم بعدها اتحقق من صاحب القيمة العليا هذه واقارنها بتخمين اللاعب واطبع النتائج في دالة منفصلة…


نفس الرهان السابق..بعد التعديلات..لاحظ النتيجة؟ خسرت الرهان لأن الأخضر يفوقني في الخطوات

والدليل لاحظ في هذه الحالة راهنت على الأحمر ورغم انني الأول في القائمة الا انني خسرت لان الاخضر يفوقوني في الخطوات

في النهاية هذه التعديلات تجعل من التحكيم أكثر دقة وعدلا وتجعل اللعبة منطقية أكثر…بالنسبة لي تعلمت الكثير من هذه المسائل والبحث والمشاكل التي واجهتها وهذا جيد.
انصحك بعدم الإكتفاء بحل التحدي فقط . بل ابحث عن الجديد وحاول تطوير الحل وابتكار افكار جديدة عندها فقط انتقل الى الوحدة التالية.

إعجاب واحد (1)

في هذا الكود أيضا يحتوي على حالات استثنائية يجب توضيحها. لاحظ في الحالة أدناه؟؟؟

راهنت على الاحمر ولكني خسرت رغم انني اعلى قيمة 542؟ الأخضر هو الفائز541. كذلك لاحظ أن القائمة تحتوي على قيمة واحدة فقط؟؟ لماذا ؟؟
حسنا لنقرا ما يحدث خلف الكواليس…

حلقة وايل قبل الأخيرة:
تحرك أحمر فحصل على كذا نقاط.
ثم تحرك الاخضر فحصل على 541
ثم تحرك أزرق فحصل على كذا نقاط.ش
حلقة وايل الأخيرة:
تحرك احمر فحصل على 542.
أما الأخضر فقد تجاوز 540 وهنا يتم كسر حلقة وايل وإضافة قيمة أخضر - والوحيدة- الى القائمة.
بعدها يتحرك أزرق فيحصل على 503.

عند انتهاء فورلوب تحتوي القائمة على قيمة واحدة..لم يحن الدور لإضافة قيمة أحمر 542 ولهذا السبب الاخضر هو الفائز 541.

والان لننتقل الى حالة أخرى…

الأمر مشابه للحالة الاولى فقط أن أول من تجاوز 540 هو أزرق وعند تشغيل حلقة وايل الاخيرة حصل كل من أحمر وأخضر على القيم 544 - 542 على التوالي…لكن تم إضافة قيمة أزرق فقط…وكان هو الفائز.

إعجابَين (2)