جدول المحتويات:
- الخطوة 1: جميع الأجزاء
- الخطوة 2: كيفية توصيل الأجزاء بـ Arduino
- الخطوة 3: مخطط تدفق البرنامج
- الخطوة 4: برمجة جويستيك
- الخطوة 5: المستوى الأول
- الخطوة السادسة: كشف الاصطدام
- الخطوة 7: آخر مستويين
فيديو: إعادة إنشاء أصعب لعبة في العالم على Arduino: 7 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
يعتمد هذا المشروع على لعبة كمبيوتر يمكنك العثور عليها عبر الإنترنت. اسمها هو "أصعب لعبة في العالم". تمكنت من إعادة إنشائه على Arduino باستخدام أربع وحدات LED Matrix. في هذا الدليل ، أعلمك كيفية بناءه بنفسك. قبل الدخول في الكثير من التفاصيل ، أود أن أقدم نظرة عامة سريعة على الخطوات التي مررت بها لإنشاء هذه اللعبة.
- جمعت كل الأجزاء المطلوبة.
- لقد قمت بتوصيل الأجزاء معًا.
- لقد كتبت رسمًا تخطيطيًا يستخدم عصا التحكم لتحريك مؤشر LED للاعبين عبر جميع الوحدات.
- لقد صممت العقبات الأولى وأضفتها إلى الرسم التخطيطي بحيث قاموا بمحاكاة لعبة Worlds Hardest Game.
- ثم أضفت رمزًا لاكتشاف تصادم مع العوائق ، والذي سيعيد تشغيل اللعبة.
- ثم صممت مستويين آخرين من العقبات.
الخطوة 1: جميع الأجزاء
فيما يلي قائمة بجميع الأجزاء التي تحتاجها:
- موصل Arduino UNO و USB:
- أربع وحدات 8x8: مصفوفة LED
- عصا التحكم:
- 10 أسلاك من الذكور إلى الإناث: https://www.banggood.com/40pcs-20cm-Male-To-F Female …
الخطوة 2: كيفية توصيل الأجزاء بـ Arduino
كيفية توصيل مصفوفة LED بأردوينو
- يذهب GND إلى GND
- يذهب VCC إلى 5V
- ينتقل DataIn إلى الرقم الرقمي 12
- ينتقل CLK إلى الرقم الرقمي 11
- ينتقل CS أو LOAD إلى الرقم الرقمي 10
كيفية توصيل عصا التحكم
- يذهب GND إلى GND
- 5V يذهب إلى 5V
- يذهب VRx إلى الدبوس التناظري A0
- يذهب VRy إلى الدبوس التناظري A1
- لا يتم استخدام SW
تتصل البطارية بمقبس 9 فولت لمنح طاقة الأردوينو
الخطوة 3: مخطط تدفق البرنامج
يشير الشكل البيضاوي إلى بداية البرنامج.
الخطوة الأولى هي تحديد جميع العقبات.
تشير الخطوتان التاليتان إلى ضبط المتغيرات وتشغيل جميع الوحدات.
الخطوة التالية ، هي ضبط LED على المستوى الأول وأي متغيرات أخرى.
قم بعد ذلك بعرض المستوى الذي يوجد به المشغل حاليًا.
يشير المعين إلى قراءة عصا التحكم لمعرفة الاتجاه الذي يتم دفعه فيه.
ثم حرك اللاعب في أي اتجاه تم دفع عصا التحكم.
تحقق ومعرفة ما إذا كان اللاعب قد اصطدم بعائق.
إذا اصطدم اللاعب بعقبة ، عد إلى المستوى الأول. إن لم يكن تحقق لمعرفة ما إذا كان اللاعب قد وصل إلى نهاية المستوى.
إذا كان اللاعب في نهاية المستوى ، فاضبط المستوى التالي ثم ارجع إلى "عرض المستوى الحالي". إذا لم تكن في النهاية ، حرك العوائق وارجع إلى "قراءة جويستيك".
الخطوة 4: برمجة جويستيك
بالطبع من أجل تحريك النقطة الصغيرة التي هي اللاعب ، نحتاج إلى عصا تحكم. ومن أجل السماح لعصا التحكم بتحريك المشغل فعليًا ، نحتاج إلى ترميزه في Arduino IDE. تحتاج إلى تضمين مكتبة LedControl التي يمكنك العثور عليها من خلال الانتقال إلى قائمة الرسم> تضمين المكتبات> إدارة المكتبات ، والبحث عن LedControl. هذا ما يبدو عليه رمز عصا التحكم.
# تضمين "LedControl.h"
كثافة العمليات DataIn = 12 ؛ int CLK = 11 ؛ int DIN = 10 ؛ LedControl lc = LedControl (DataIn، CLK، DIN، 4) ؛ // ينشئ كائنًا لأربع وحدات int delaytime = 50 ؛ // السرعة التي تعمل بها اللعبة int joystick_RtLt، joystick_UpDn؛ عدد int players_x = 0 ؛ // وضع أفقي للاعبين من 0 إلى 31 int players_y = 3 ؛ // وضع عمودي للاعبين من 0 إلى 7 صف ، عمود ، وحدة ؛ إعداد باطل () {initialize_modules () ، // تشغيل وضبط كل الوحدات النمطية الأربعة} حلقة باطلة () {move_player () ؛ // بدء الحلقة بالتحقق مما إذا كان اللاعب يتحرك تأخير (وقت تأخير) ؛ } void initialize_modules () {lc.shutdown (0، false)؛ // يبدأ الوحدة النمطية 0 لتر كثافة المجموعة (0 ، 1) ؛ lc.shutdown (1 ، خطأ) ؛ // يبدأ الوحدة النمطية 1 لتر كثافة المجموعة (1 ، 1) ؛ lc.shutdown (2 ، خطأ) ؛ // يبدأ الوحدة النمطية 2 لتر كثافة المجموعة (2 ، 1) ؛ lc.shutdown (3 ، خطأ) ؛ // يبدأ الوحدة النمطية 3 لتر كثافة المجموعة (3 ، 1) ؛ lc.clearDisplay (0) ، // clears module 0} void move_player () {module = players_x / 8 ؛ // يحدد الوحدة التي يوجد بها اللاعب في العمود = players_x٪ 8؛ // يحدد العمود حيث يوجد اللاعب في صف الوحدة = players_y؛ lc.setLed (وحدة ، صف ، عمود ، خطأ) ؛ // إيقاف تشغيل الصمام في الوضع الحالي للاعب joystick_RtLt = analogRead (A0) / 204-2 ؛ // اقرأ X-joystick ونطاق الخريطة من 2 إلى -2 إذا كان (joystick_RtLt> 0) // عندما تكون عصا التحكم على المسار الصحيح players_x ++ ؛ // اذهب يمينًا إذا كان (joystick_RtLt 0) // إذا كانت عصا التحكم على اليسار وليس في البداية players_x-- ؛ // حرك ذراع التحكم الأيسر_UpDn = analogRead (A1) / 204-2 ؛ // قراءة Y-joystick ونطاق الخريطة من 2 إلى -2 إذا (جويستيك_تحديد 0) // إذا كان ذراع التحكم معطلاً ولم يكن اللاعب في الجزء السفلي player_y-- ؛ // تحرك لأسفل آخر إذا كان (joystick_UpDn> 0 && players_y <7) // إذا كان ذراع التحكم لأعلى ولم يكن اللاعب في أفضل players_y ++؛ // وحدة الصعود = players_x / 8 ؛ // تعيين وحدة للاعبين عمود المركز الجديد = players_x٪ 8 ؛ // تعيين العمود للاعبين صف المركز الجديد = players_y؛ // تعيين الصف للاعبين في المركز الجديد lc.setLed (وحدة ، صف ، عمود ، صحيح) ؛ // تشغيل الصمام في الموضع الجديد للاعب}
الآن بعد أن أضفت عصا التحكم ، فلنعمل على العقبة الأولى!
الخطوة 5: المستوى الأول
حسنًا ، حان الوقت الآن للدخول في الجزء الرئيسي من البرنامج ، العقبات! العقبات هي التي تجعل هذه اللعبة "أصعب لعبة في العالم". لذلك إذا كنت تريد أن تلعب اللعبة فعليًا ، فأنت بحاجة إلى إضافة هذا إلى التعليمات البرمجية الخاصة بك:
عقبة البايت [المستويات] [المشاهد] [الأعمدة] [الصفوف] = {// ثلاثة مستويات ، 8 مشاهد ، 8 مجموعات ، 8 صفوف
{{{1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، // المستوى الأول ، المشهد الأول {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 1 ، 1 ، 1 ، 1 ، 1 ، { 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المستوى الأول ، المشهد الثاني {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {1 ، 0 ، 0 ، 1 ، 1 ، 1 ، 1 } ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المستوى الأول ، الثالث المشهد {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{1 ، 1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // أولاً المستوى ، المشهد الرابع {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{1 ، 1 ، 0 ، 0 ، 1 ، 1 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المستوى الأول ، المشهد الخامس {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{1 ، 0 ، 0 ، 1 ، 1 ، 1 ، 1 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المستوى الأول ، المشهد السادس {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، { 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{0 ، 0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1} ، // المستوى الأول ، المشهد السابع {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 } ، {1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، // المستوى الأول ، الثامن المشهد {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}}} ، إعداد باطل () {initialize_modules () ؛ // قم بتشغيل وضبط كل الوحدات النمطية الأربعة start_level (0) ؛ حلقة باطلة () {move_player () ، // بدء الحلقة بالتحقق مما إذا كان اللاعب يتحرك إذا (التصادم ()) {// تحقق من مستوى التصادم = 0 ؛ // إذا كان الاصطدام صحيحًا ، فقم بإعادة تعيين مستوى start_level (المستوى) ؛ // إعادة تشغيل اللعبة} وإلا إذا (delay_count = 0 ؛ } else delay_count ++ ؛ تأخير (تأخير) ؛ // تأخير حسب سرعة اللعبة}
وهذه هي العقبة الأولى! إذا شعرت بالملل من هذا المستوى الأول ، فيمكنك دائمًا تغيير البايت ، فقط تذكر أنك بحاجة إلى ثمانية مشاهد مختلفة! دعنا ننتقل إلى الخطوة التالية ، اكتشاف الاصطدام!
الخطوة السادسة: كشف الاصطدام
هذه الخطوة هي جزء مهم آخر من اللعبة ، فبدونها لن يكون هناك الكثير من التحدي! يمكنك فقط شق طريقك عبر العقبات دون أي عواقب! هذا لن يكون ممتعًا كثيرًا ، أليس كذلك؟ لذلك دعونا نجعل اللعبة أكثر تحديًا (وأكثر إمتاعًا!) من خلال إضافة هذا القسم من البرنامج:
حلقة فارغة() {
لاعب الخطوة()؛ // بدء الحلقة بالتحقق مما إذا كان اللاعب يتحرك إذا (التصادم ()) {// تحقق من مستوى التصادم = 0 ؛ // إذا كان التصادم صحيحًا ، فقم بإعادة تعيين مستوى start_level (المستوى) ؛ // إعادة تشغيل اللعبة} وإلا إذا (delay_count = 0 ؛ } else delay_count ++ ؛ تأخير (تأخير) ؛ // delay by speed of game} int collision () {// تحقق مما إذا كان اللاعب قد اصطدم بعقبة في وحدة المشهد = players_x / 8؛ العمود = players_x٪ 8 ؛ row = players_y؛ إذا (وحدة> 0) إذا (عقبة [مستوى] [مشهد] [عمود] [صف] == 1) // إذا كان موضع اللاعب هو نفسه عودة العائق (1) ؛ // كشف الاصطدام عودة حقيقية (0) ؛ // لا يوجد تضارب عودة خاطئة}
وها أنت ذا! الآن يمكنك الاستمتاع باللعبة أكثر بكثير! الآن سأوضح لك كيفية برمجة آخر مستويين من اللعبة! لقد انتهيت تقريبًا من هذه التعليمات ، وأنا متأكد من استعدادك لتجربتها!
الخطوة 7: آخر مستويين
مع اقتراب نهاية التدريب ، فإن هذين المستويين الأخيرين هما كل ما تحتاجه لإنهاء هذه اللعبة. ثم يمكنك تجربتها بنفسك! ها هو الكود:
عقبة البايت [المستويات] [المشاهد] [الأعمدة] [الصفوف] = {// المستوى الثاني والثالث ، 8 مشاهد ، 8 أعمدة ، 8 صفوف
{{{1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1} ، // المستوى الثاني ، المشهد الأول {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0} ، { 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1}} ، {{1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1} ، // المستوى الثاني ، المشهد الثاني {0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0 ، {0 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0 } ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، {1 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 1}} ، {{0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المستوى الثاني ، المشهد الثالث {0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 1 ، 1 ، 0} ، {0 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 1 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0}} ، {{0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0} ، // المشهد الرابع من المستوى الثاني {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {0 ، 1 ، 1 ، 1 ، 1 ، 0 ، 1 ، 0} ، {0 ، 1 ، 0 ، 1 ، 1 ، 1 ، 1 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0}} ، {{0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0} ، // المستوى الثاني ، الفيفا المشهد الخامس {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 1 ، 0} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0}} ، {{0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، // المستوى الثاني ، المشهد السادس {0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 1 ، 1} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ،} ، {{0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، // المستوى الثاني ، المشهد السابع {0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {1 ، 1 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 1 ، 1} ، {0 ، 0، 1، 0، 0، 0، 0، 0}، {0، 0، 1، 0، 0، 0، 0، 0}}، {{0، 0، 0، 0، 0، 0، 1 ، 0} ، // المشهد الثامن من المستوى الثاني {1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 1 ، 1 ، 0 ، 0 ، 0 ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 1 ، 1} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{{0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد الأول {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0} } ، {{0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد الثاني {1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0}} ، {{0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد الثالث {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، { 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0}} ، {{0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد الرابع {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 } ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0}} ، {{0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد الخامس {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1} ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0}} ، {{0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، / المستوى الثالث ، المشهد السادس {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0}} ، {{0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، // المستوى الثالث ، المشهد السابع {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0}} ، {{0 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، // المستوى الثالث ، المشهد الثامن { 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 1 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0} ، {1 ، 0 ، 0 ، 1 ، 0 ، 0 ، 1 ، 0}}}} ؛
وهذا كل شيء! أنت جاهز تمامًا لمحاولة إكمال أصعب لعبة في العالم. كما تم إرفاق كود Arduino الكامل أدناه.
موصى به:
ESP8266 مراقبة درجة حرارة Nodemcu باستخدام DHT11 على خادم ويب محلي - احصل على درجة حرارة الغرفة ورطوبتها على متصفحك: 6 خطوات
ESP8266 مراقبة درجة حرارة Nodemcu باستخدام DHT11 على خادم ويب محلي | احصل على درجة حرارة الغرفة ورطوبتها على متصفحك: مرحبًا يا شباب اليوم سنصنع الرطوبة & amp؛ نظام مراقبة درجة الحرارة باستخدام ESP 8266 NODEMCU & amp؛ جهاز استشعار درجة الحرارة DHT11. سيتم الحصول على درجة الحرارة والرطوبة من مستشعر DHT11 & amp؛ يمكن رؤيته على متصفح أي صفحة ويب ستتم إدارتها
إعادة استخدام زينة عيد الميلاد LED القديمة عن طريق إعادة مزجها: 7 خطوات
إعادة استخدام زينة عيد الميلاد LED القديمة عن طريق إعادة مزجها: لقد اشتريت زينة عيد الميلاد البشعة إلى حد ما في متجر باوند (أي متجر بالدولار) خلال مبيعات ما بعد الموسم قبل ثلاث سنوات. لقد كان & quot؛ NOEL & quot؛ مخيبًا علامة مضاءة بعدد غير كافٍ من مصابيح LED التي تعمل بالبطارية
فليب إت! - أغبى لعبة في العالم: 7 خطوات (بالصور)
فليب إت! - أغبى لعبة في العالم ؟: الأصول: هذه لعبة قمت بتطويرها على مدار عامين 2018-2019 كانت تسمى في الأصل & quot؛ Stupid Flip & quot؛ وخرجت من اهتمامي بإنشاء ألعاب تفاعلية بسيطة وممتعة يمكن استخدامها أيضًا لتعليم الترميز. هذا ابو
TinyPi - أصغر جهاز ألعاب قائم على Raspberry Pi في العالم: 8 خطوات (مع صور)
TinyPi - أصغر جهاز ألعاب قائم على Raspberry Pi في العالم: لذلك كنت ألعب بصنع لوحات PCB مخصصة لـ Raspberry Pi منذ فترة ، وما بدأ على شكل مزحة أصبح تحديًا لمعرفة مدى صغر حجمه. ، يقوم على Raspberry Pi Zero ، ويتناسب تقريبًا مع sa
إعادة تعبئة SLA (بطارية الرصاص الحمضية المختومة) ، مثل إعادة تعبئة بطارية السيارة: 6 خطوات
إعادة تعبئة SLA (بطارية حمض الرصاص المختومة) ، مثل إعادة تعبئة بطارية السيارة: هل جفت أيًا من اتفاقيات SLA الخاصة بك؟ انسكاب حامض البطارية ، والإصابة ، وإغلاق اتفاقية مستوى الخدمة الجيدة وما إلى ذلك