جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-23 12:53
في مقالاتنا السابقة ، استكشفنا صناعة الألعاب على 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.
موصى به:
وحدة تحكم الألعاب المحمولة من ليغو مع غزاة الفضاء: 4 خطوات
Lego Portable Gaming Console مع Space Invaders: هل فكرت يومًا في أن تكون مطور ألعاب وأن تبني وحدة تحكم ألعاب خاصة بك يمكنك لعبها أثناء التنقل؟ كل ما تحتاجه هو القليل من الوقت ، أجهزة Lego bricksa Mini-Calliope (يمكن طلبها على هذا الموقع https://calliope.cc/en) وبعض المهارات
الحبر الإلكتروني: القمر / محطة الفضاء الدولية / الناس في الفضاء : 6 خطوات
الحبر الإلكتروني: القمر / محطة الفضاء الدولية / الناس في الفضاء …: كان لدي قبعة راسبيري وورق إلكتروني وأردت استخدامه لإظهار معلومات مثل مكان محطة الفضاء الدولية أو عدد الأشخاص الموجودين الآن في الفضاء .. صرحت للبحث عما إذا كانت هناك واجهات برمجة تطبيقات على الإنترنت للحصول على هذه البيانات ، ووجدتها. حسنًا ، مسكتك !!!! انتظر
ساعة كوزمو - يتغير لونها في كل مرة يدخل فيها رائد الفضاء الفضاء: 8 خطوات (بالصور)
ساعة كوزمو - يتغير لونها في كل مرة يدخل فيها رائد الفضاء الفضاء: مرحبًا! هل أنت من عشاق الفضاء؟ إذا كانت الإجابة بنعم ، ثم مرحبا فاي! احب الفضاء وعلم الفلك. من الواضح أنني لست رائد فضاء للذهاب إلى هناك وإلقاء نظرة فاحصة على الكون. لكن في كل مرة أكتشف فيها أن شخصًا من الأرض قد سافر إلى السماء ، أستلهم
غزاة شاشات الكريستال السائل: لعبة مثل غزاة الفضاء على شاشة عرض أحرف LCD مقاس 16 × 2: 7 خطوات
غزاة LCD: لعبة تشبه لعبة Space Invaders على شاشة LCD مقاس 16 × 2: ليست هناك حاجة لتقديم لعبة "Space Invaders" الأسطورية. الميزة الأكثر إثارة للاهتمام في هذا المشروع هي أنه يستخدم عرض النص للإخراج الرسومي. يتم تحقيق ذلك من خلال تنفيذ 8 أحرف مخصصة. يمكنك تنزيل Arduino كامل
غزاة صندوق الأحذية المفقود: 4 خطوات
غزاة صندوق الحذاء المفقود: هذا مشروع اردوينو متوسط المستوى لأولئك الذين بدأوا للتو! بعد إجراء عدد قليل من البرامج التعليمية ، توصلت إلى هذا المشروع لربط العديد من مهارات ترميز اردوينو الأساسية التي تمت تغطيتها في الدورات التمهيدية. و BON