0 من 15 يومًا نسبة الإنجاز: 0%
الأسبوع الثاني - اليوم العاشر

مشروع مصغر: لعبة المتاهة

⏱ ساعة واحدة ⚙ عملي
مخرجات التعلم
  • تصميم خلفية متاهة مخصصة بمسارات واضحة وألوان محددة للحدود.
  • برمجة أزرار تحكم سريعة الاستجابة لتحريك كائن اللاعب باستخدام لوحة المفاتيح.
  • تطبيق الشروط والاستشعار لبرمجة تفاعل الكائن مع جدران المتاهة ومنع اختراقها.
  • بناء حلقة تكرارية مركزية للتحقق المستمر من شروط الفوز أو الخسارة طوال اللعبة.

1. تصميم خلفية ومسارات مخصصة للمتاهة

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

يضمن التخطيط الجيد للتصميم إمكانية اللعب بشكل سلس. إذا كان المسار أضيق من حجم الكائن (مربع الإحاطة)، فسوف يعلق الكائن بشكل دائم في الجدران. لذا، فإن تصغير حجم كائن اللاعب أو رسم ممرات أوسع يمنع مشاكل الحركة والملاحة.

Maze Coordinate Mapping Guide
الشكل 10.1: التخطيط الإحداثي لمتاهة مخصصة يوضح نقطة البداية، مسارات الحركة، ومربع الهدف.

2. برمجة تحكم سلس وسريع الاستجابة بلوحة المفاتيح

للحصول على حركة سلسة للاعب، يمكنك وضع الشروط التي تتحقق من ضغط المفاتيح داخل حلقة كرِّر باستمرار بدلاً من استخدام لبنات أحداث منفصلة لكل مفتاح. المقطع البرمجي الذي يتحقق باستمرار إذا <مفتاح [السهم الأيمن] مضغوط؟> إذن [غيّر الموضع س بمقدار 4] يعمل بشكل أسرع بكثير وأكثر سلاسة، مما يوفر استجابة فورية وتحكماً دقيقاً.

تمنع هذه الطريقة تأخر الاستجابة (Input Lag). فلبنات أحداث الضغط المنفصلة (مثل "عند ضغط مفتاح المسافة") تتسبب في توقف مؤقت بسيط قبل تكرار الحركة. بينما يؤدي تداخل لبنات الاستشعار داخل حلقة لا نهائية إلى التخلص من هذا التأخير، مما يمنح اللاعب تحكماً فورياً واحترافياً.

Wall Collision Undo Script
الشكل 10.2: مجموعة اللبنات البرمجية التي توضح آلية التراجع عن خطوة الحركة عند الاصطدام بالجدار.

3. منع الكائن من اختراق الجدران (خدعة التراجع)

لمنع اللاعب من السير عبر الجدران، يمكنك استخدام خدعة رياضية بسيطة: عندما يتم الضغط على مفتاح الحركة، يتحرك الكائن للأمام خطوة. يتحقق المقطع البرمجي فوراً مما إذا كان الكائن يلامس لون الجدار. إذا كان الأمر كذلك، فإن الكائن يتراجع خطوة إلى الوراء (على سبيل المثال، التحرك بمقدار -4)، ملغياً الحركة قبل أن تظهر على الشاشة فعلياً. تمنع هذه البرمجة الكائن من العبور عبر الجدران.

يحاكي منطق التراجع هذا الصلابة الفيزيائية. ومن خلال حساب وحل التصادم في نفس الإطار (Frame)، لا يرى اللاعب الكائن يتداخل مع الجدار أبداً، مما يخلق تأثيراً ممتازاً لحدود صلبة لا يمكن اختراقها.

Central Game Loop Checks
الشكل 10.3: مخطط الحلقة التكرارية المركزية للعبة، والذي يتحقق من شروط الفوز والتصادم باستمرار.

4. بناء حلقة مركزية للتحقق من الفوز

تحتاج لعبة المتاهة إلى مراقبة حالة اللاعب باستمرار. باستخدام حلقة كرِّر باستمرار مركزية، يقوم البرنامج بالتحقق بشكل مستمر من شرطين: إذا لامس الكائن لون الجدار، فإنه يعكس حركته ويمنع العبور. وإذا لامس الكائن لون الهدف، فإنه يُظهر رسالة الفوز ويوقف جميع المقاطع البرمجية.

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

نشاط عملي

إنشاء لعبة عبور المتاهة

  1. حدد كائن "الكرة" (Ball) ليكون شخصية اللاعب. اضبط حجمه على 50%. ارسم أو اختر خلفية تحتوي على جدران متاهة باللون الأسود ومربع هدف باللون الأصفر في نهايتها.
  2. قم بإنشاء المقطع البرمجي للتهيئة: [عند النقر على العلم الأخضر]، [اذهب إلى الموضع س: -200 ص: 140] (مدخل المتاهة).
  3. أضف حلقة [كرِّر باستمرار]. بداخلها، برمج عناصر التحكم للأسهم الأربعة: السهم العلوي (غيّر الموضع ص بمقدار 4)، السهم السفلي (غيّر الموضع ص بمقدار -4)، السهم الأيمن (غيّر الموضع س بمقدار 4)، والسهم الأيسر (غيّر الموضع س بمقدار -4).
  4. أسفل كل أمر تغيير إحداثيات (داخل شروط الأسهم)، أضف شرطاً للتحقق من التصادم: إذا <ملامس للون [الأسود]؟> إذن، تراجع عن هذه الخطوة (أي غيّر الإحداثيات بالقيمة المعاكسة).
  5. في نهاية حلقة "كرِّر باستمرار"، أضف شرط الهدف: إذا <ملامس للون [الأصفر]؟> إذن، قل [لقد فزت!] لمدة 2 ثانية، ثم أضف لبنة أوقف [الكل].
شرح المقطع البرمجي النموذجي
  1. تعيين نقطة البداية: [عند النقر على العلم الأخضر] -> [اذهب إلى الموضع س: (-200) ص: (140)].
  2. إنشاء حلقة التحكم الأساسية: أضف حلقة -> [كرِّر باستمرار] (من فئة التحكم).
  3. برمجة السهم الأيمن (مع الجدار): [إذا <مفتاح (السهم الأيمن) مضغوط؟> إذن] -> [غيّر الموضع س بمقدار (4)] -> [إذا <ملامس للون (الأسود)؟> إذن] -> [غيّر الموضع س بمقدار (-4)] (من فئة الحركة).
  4. برمجة السهم الأيسر (مع الجدار): [إذا <مفتاح (السهم الأيسر) مضغوط؟> إذن] -> [غيّر الموضع س بمقدار (-4)] -> [إذا <ملامس للون (الأسود)؟> إذن] -> [غيّر الموضع س بمقدار (4)] (من فئة الحركة).
  5. برمجة السهم العلوي (مع الجدار): [إذا <مفتاح (السهم العلوي) مضغوط؟> إذن] -> [غيّر الموضع ص بمقدار (4)] -> [إذا <ملامس للون (الأسود)؟> إذن] -> [غيّر الموضع ص بمقدار (-4)] (من فئة الحركة).
  6. برمجة السهم السفلي (مع الجدار): [إذا <مفتاح (السهم السفلي) مضغوط؟> إذن] -> [غيّر الموضع ص بمقدار (-4)] -> [إذا <ملامس للون (الأسود)؟> إذن] -> [غيّر الموضع ص بمقدار (4)] (من فئة الحركة).
  7. التحقق من الفوز (نهاية الحلقة): [إذا <ملامس للون (الأصفر)؟> إذن] -> [قل (لقد نجحت!) لمدة (2) ثانية] -> [أوقف (الكل)] (من فئة التحكم).