جدول المحتويات:

غزاة الفضاء في Micropython على Micro: بت: 5 خطوات
غزاة الفضاء في Micropython على Micro: بت: 5 خطوات

فيديو: غزاة الفضاء في Micropython على Micro: بت: 5 خطوات

فيديو: غزاة الفضاء في Micropython على Micro: بت: 5 خطوات
فيديو: Button Masher Game with Microbit Python (MicroPython) 2024, يوليو
Anonim
Image
Image

في مقالاتنا السابقة ، استكشفنا صناعة الألعاب على GameGo ، وهي وحدة تحكم ألعاب قديمة محمولة تم تطويرها بواسطة TinkerGen education. الألعاب التي صنعناها تذكرنا بألعاب نينتندو القديمة. في مقال اليوم ، سنعود خطوة إلى الوراء ، إلى العصر الذهبي لألعاب الأركيد. سنقوم بإعادة إنشاء لعبة Space Invaders في Micropython على متحكم دقيق Micro: bit - وكتطور ، سنستخدم أيضًا امتداد BitPlayer Micro: bit ، والذي يتيح لنا ممارسة اللعبة بشكل أكثر ملاءمة.

نظرًا لأن هذا البرنامج التعليمي يتعلق بترميز اللعبة في Micropython ، فبدلاً من التسلسل التقليدي لكل مرحلة الذي استخدمناه من قبل في دروس البرمجة الرسومية ، سننتقل إلى كتلة التعليمات البرمجية بلوك - ونتناول الوظائف المهمة والفئات والأساسية حلقة. يمكنك تنزيل الكود الكامل في مستودع GitHub لهذا المشروع. اربط حزام الأمان ودعنا نبدأ!

اللوازم

TinkerGen BitPlayer

بي بي سي مايكرو: بت

الخطوة 1: الحلقة الرئيسية

جويستيك
جويستيك

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

ندخل الحلقة الرئيسية مع

أثناء عدم تجاوز اللعبة:

شرط. في الداخل نحصل على عدد الغزاة وفرصة ظهورهم والعدد المطلوب للوصول إلى المستوى التالي من قاموس المستويات. بعد ذلك ، نتحقق من الحركة من اليسار إلى اليمين باستخدام طرق مثيل Listen_Dir لمثيل الفئة JoyStick. إذا تم تقييم أحد الشروط على أنه صحيح ، فإننا نقوم بزيادة / تقليل قيمة x لشخصيتنا القابلة للعب. نحن نقيدها بـ [-2 ، 2] بشرطين شرط. ثم نقوم بتهيئة مثيل لفئة DisplayBuffer والتحقق من ضغطات الزر "shield" أو "fire bullet". نستخدم طريقة DisplayBuffer.set () لتعيين الكائنات لعرضها لاحقًا. لتقديم الدرع ، نستخدم DisplayBuffer.set () مباشرة ، ولكن بالنسبة للرصاص والغزاة ، نضيفهم إلى قائمتهم الخاصة ونقوم بتعيينهم واحدًا تلو الآخر في حلقة for مع الكود التالي لتقديمه لاحقًا باستخدام DispBuffer.render ():

بالنسبة إلى b بالرصاص: b.render (dispBuf) لـ v in vaders: v.render (dispBuf)

يتم عرض جميع الغزاة والرصاص والدرع مرة واحدة في كل حلقة تكرار رئيسية

dispBuf.render ()

قبل نهاية الحلقة الرئيسية ، نتحقق مما إذا كان أي من رصاصات الغزاة قد وصل إلى نهاية الشاشة ، وإذا كان الأمر كذلك ، فإننا نحذفهم من القوائم الخاصة بهم.

الخطوة 2: عصا التحكم

جويستيك
جويستيك

يسهل حمل BitPlayer واستخدامه ، مع عصا تحكم ثنائية المحاور مثل وحدات تحكم Gameboy أو PSP ، كما أنه يتضمن 6 أزرار أخرى قابلة للبرمجة تحمل أسماء L و R و A و B و C و D. للحصول على تجربة غامرة وتفاعلية ، فإن BitPlayer تتميز نفسها بجرس ومحرك اهتزاز ومنفذ Grove I2C لتوصيل الأجهزة الطرفية الإضافية مثل شاشة OLED.

نحن نستخدم فقط زر الروك الأيمن والأيسر لعصا التحكم لهذه اللعبة ، على سبيل المثال الكامل على استخدام جميع أزرار BitPlayer ، يمكنك إلقاء نظرة على joystick_example.py في مستودع GitHub لهذا المشروع. عند إنشاء مثيل فئة JoyStick ، نتحقق من القراءة الافتراضية لمحور X وتخزين هذه القيمة في self. ثم في الوظيفة Listen_Dir ، نتحقق مما إذا كان الانحراف عن هذه القيمة الافتراضية أعلى من متغير الحساسية (حاول تعديله بنفسك ، إذا كنت تشعر أن JoyStick حساس للغاية) وقم بإرجاع True of False وفقًا للاتجاه المكتشف.

دعنا نلقي نظرة على مثال ملموس لكيفية عمل ذلك:

لنفترض أن القراءة الافتراضية لمحور X هي 0. ثم ، إذا حركنا عصا التحكم إلى اليمين:

New_X = JoyStick_X.read_analog () # New_X = 200

اليمين = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200

ثم عندما نتحقق من الاتجاه:

الدقة = 150if Right> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: # -200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] إذا Dir == Get_Rocker: إرجاع True else: return False

الخطوة 3: عرض المخزن المؤقت

عرض العازلة
عرض العازلة

فئة DisplayBuf هي المسؤولة عن التحكم في شاشة LED. يتم ذلك باستخدام طريقتين ، set () و render (). set () طريقة تغيير القيم المقابلة لبكسل شاشة LED. قد تتذكر أن وحدات البكسل الموجودة على شاشة Micro: bit LED يمكن التعبير عنها كسلسلة أو قائمة - "00000: 00000: 00000: 00000: 00000" شاشة فارغة. "00000: 00000: 00000: 00000: 00100" عبارة عن شاشة بها بكسلات ذات إضاءة خافتة في وسط الصف السفلي.

00000:

00000

:00000

:00000:

00100"

قد يكون هذا الترميز أسهل في المعالجة:)

لذلك ، ما نقوم به خلال الحلقة الرئيسية هو طريقة () call set من DisplayBuf لتعيين جميع كائناتنا التي يجب عرضها على الشاشة. ثم نستخدم طريقة render () لعرضها جميعًا على الشاشة في وقت واحد.

الخطوة 4: الغزاة والرصاص واللاعب

الغزاة والرصاص واللاعب
الغزاة والرصاص واللاعب

ينتمي الرصاص والغزاة إلى فئة المحرك. مثيلات فئة المحرك لها مواقع x و y وسرعتها بالإضافة إلى السطوع. فئة المحرك لها طريقتان للمثال ، تعيين () ونقل (). تستدعي طريقة set () طريقة DisplayBuf set () مع إحداثيات محدثة لحفظها لعرضها لاحقًا على مصفوفة LED. تحرك () تحديثات الطريقة تنسق مثيلها وفقًا لسرعة المثيل - والتي تأتي مفيدة لاحقًا ، عندما نحتاج إلى تغيير سرعة الغزاة مع تقدم المستويات.

تعتبر Class Bullet و class Invader فئات فرعية من فئة المحرك. هنا نستخدم ما يسمى بالوراثة. تسمح لنا وظيفة super () باستدعاء طرق الطبقة الفائقة في الفئة الفرعية ، دون الحاجة إلى تكرار الكود.

الخطوة 5: اصنعها بنفسك

جعله خاصا بك
جعله خاصا بك

تهانينا! لقد قمت للتو بإعادة إنشاء لعبة Space Invaders الكلاسيكية على Micro: bit باستخدام بعض أجهزة الألعاب الرائعة. بالطبع ، يمكنك تحسين رمز اللعبة من هنا - على سبيل المثال ، حتى الآن ، تحتوي اللعبة على مستوى واحد فقط - يمكنك إضافة المزيد من المستويات الصعبة. أيضًا ، كما قد تتذكر ، تحتوي اللعبة الأصلية على صخور تطفو أمام اللاعب ، والتي يمكنك إضافتها أيضًا.

إذا قمت بعمل نسخة محسنة من اللعبة ، فشاركها في التعليقات أدناه! لمزيد من المعلومات حول BitPlayer والأجهزة الأخرى للصانعين ومعلمي العلوم والتكنولوجيا والهندسة والرياضيات ، قم بزيارة موقعنا على الإنترنت ، https://tinkergen.com/ والاشتراك في رسالتنا الإخبارية.

أنشأت TinkerGen مؤخرًا حملة Kickstarter لـ MARK (Make A Robot Kit) ، وهي مجموعة روبوت لتعليم الترميز والروبوتات والذكاء الاصطناعي!

تم تغيير كود Micropython الأصلي من hexkcd / micro-vaders ، للعمل مع TinkerGen BitPlayer.

موصى به: