فهرست مطالب:

بازآفرینی سخت ترین بازی جهان بر روی آردوینو: 7 مرحله
بازآفرینی سخت ترین بازی جهان بر روی آردوینو: 7 مرحله

تصویری: بازآفرینی سخت ترین بازی جهان بر روی آردوینو: 7 مرحله

تصویری: بازآفرینی سخت ترین بازی جهان بر روی آردوینو: 7 مرحله
تصویری: میگن این سخت ترین بازی روی استیمه 💥 EASY 2024, جولای
Anonim
Image
Image

این پروژه بر اساس یک بازی رایانه ای است که می توانید آنلاین پیدا کنید. نام آن "سخت ترین بازی جهان" است. من توانستم آن را با استفاده از یک ماتریس LED چهار ماژول در Arduino ایجاد کنم. در این مقاله آموزشی به شما می آموزم که چگونه خودتان آن را بسازید. قبل از پرداختن به جزئیات زیاد ، می خواهم مروری سریع بر مراحل انجام این بازی داشته باشم.

  1. تمام قطعات مورد نیاز را جمع آوری کردم.
  2. قطعات را به هم وصل کردم.
  3. من طرحی نوشتم که از جوی استیک برای حرکت LED پخش کننده در همه ماژول ها استفاده می کرد.
  4. من اولین موانع را طراحی کردم و به طرح اضافه کردم تا آنها از سخت ترین بازی جهان تقلید کنند.
  5. سپس کد را برای تشخیص برخورد با موانع اضافه کردم که باعث راه اندازی مجدد بازی می شود.
  6. و سپس دو سطح دیگر از موانع را طراحی کردم.

مرحله 1: همه قسمت ها

همه قطعات
همه قطعات
همه قطعات
همه قطعات

در اینجا لیستی از تمام قطعات مورد نیاز شما آمده است:

  1. اتصال Arduino UNO و usb:
  2. چهار ماژول 8x8: ماتریس LED
  3. جوی استیک:
  4. 10 سیم نر به زن:

مرحله 2: نحوه اتصال قطعات به آردوینو

نحوه اتصال قطعات به آردوینو
نحوه اتصال قطعات به آردوینو

نحوه اتصال ماتریس LED به آردوینو

  1. GND به GND می رود
  2. VCC به 5V می رود
  3. DataIn به پین دیجیتال 12 می رود
  4. CLK به پین دیجیتال 11 می رود
  5. CS یا LOAD به پین دیجیتال 10 می رود

نحوه اتصال جوی استیک

  1. GND به GND می رود
  2. 5 ولت به 5 ولت می رود
  3. VRx به پین آنالوگ A0 می رود
  4. VRy به پین آنالوگ A1 می رود
  5. SW استفاده نمی شود

باتری به جک 9 ولت متصل می شود تا به آردوینو قدرت دهد

مرحله 3: نمودار جریان برنامه

نمودار جریان برنامه
نمودار جریان برنامه

بیضی شکل نشان دهنده شروع برنامه است.

اولین قدم این است که همه موانع را مشخص کنید.

دو مرحله بعدی تنظیم متغیرها و روشن کردن همه ماژول ها را نشان می دهد.

مرحله بعدی ، تنظیم LED ها در سطح اول و سایر متغیرها است.

بعد سطح پخش کننده فعلی را نمایش دهید.

لوزی نشان می دهد که جوی استیک را می خوانید تا ببینید به چه سمتی هدایت می شود.

سپس بازیکن را در هر جهتی که Joystick تحت فشار قرار گرفته است حرکت دهید.

بررسی کنید و ببینید آیا بازیکن با مانعی برخورد کرده است یا خیر.

اگر بازیکن به مانعی برخورد کرد ، به سطح اول بازگردید. در غیر اینصورت بررسی کنید که آیا بازیکن به پایان سطح رسیده است یا خیر.

اگر پخش کننده در انتهای سطح است ، روی سطح بعدی تنظیم کنید و به "نمایش سطح فعلی" بازگردید. اگر آنها در انتها نیستند ، موانع را جابجا کرده و به "خواندن جوی استیک" برگردید.

مرحله 4: برنامه نویسی Joystick

البته برای حرکت دادن نقطه کوچکی که پخش کننده است ، به یک جوی استیک نیاز داریم. و برای اینکه جوی استیک بتواند پخش کننده را حرکت دهد ، باید آن را در Arduino IDE کدگذاری کنیم. شما باید کتابخانه LedControl را که می توانید با رفتن به منوی طرح> شامل کتابخانه ها> مدیریت کتابخانه ها و جستجوی LedControl پیدا کنید ، قرار دهید. در اینجا کد جوی استیک به نظر می رسد.

#شامل "LedControl.h"

int 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 ردیف int ، ستون ، ماژول ؛ void setup () {initialize_modules ()؛ // روشن و تنظیم هر چهار ماژول led} void loop () {move_player ()؛ // شروع حلقه با بررسی اینکه آیا بازیکن با تاخیر حرکت می کند (تاخیر)؛ } void initialize_modules () {lc.shutdown (0 ، false) ؛ // راه اندازی ماژول 0 lc.setIntensity (0 ، 1) ؛ lc. خاموش (1 ، غلط) ؛ // راه اندازی ماژول 1 lc.setIntensity (1 ، 1) ؛ lc. خاموش (2 ، غلط) ؛ // راه اندازی ماژول 2 lc.setIntensity (2 ، 1) ؛ lc. خاموش (3 ، غلط) ؛ // راه اندازی ماژول 3 lc.setIntensity (3 ، 1) ؛ lc.clearDisplay (0) ؛ // ماژول 0} void move_player () {module = players_x/8 را پاک می کند ؛ // تعریف می کند که دستگاه در ستون = players_x٪ 8 در کدام ماژول قرار دارد. // ستونی را که پخش کننده در ردیف ماژول قرار دارد = players_y؛ lc.setLed (ماژول ، سطر ، ستون ، false) ؛ // خاموش کردن led در موقعیت فعلی بازیکن joystick_RtLt = analogRead (A0)/204 - 2؛ // خواندن X -joystick و محدوده نقشه از 2 تا -2 if (joystick_RtLt> 0) // هنگامی که joystick به بازیکنان مناسب_x ++ است ؛ // اگر راست است (joystick_RtLt 0) // اگر جوی استیک سمت چپ است و در ابتدا players_x-- نیست ؛ // حرکت joystick_UpDn = analogRead (A1)/204 - 2 سمت چپ ؛ // خواندن Y-joystick و محدوده نقشه از 2 تا -2 if (joystick_UpDn 0) // اگر joystick پایین است و پخش کننده در پایین player_y-- نیست ؛ // اگر (joystick_UpDn> 0 && players_y <7) // اگر جوی استیک بالا باشد و پخش کننده در سطح بالا قرار نگیرد ، player_y ++؛ // بالا رفتن از ماژول = players_x/8؛ // تنظیم ماژول روی بازیکن ستون موقعیت جدید = players_x٪ 8؛ // ستون را روی بازیکن تنظیم کنید موقعیت جدید row = players_y؛ // تنظیم ردیف به بازیکنان موقعیت جدید lc.setLed (ماژول ، سطر ، ستون ، true) ؛ // روشن شدن led در موقعیت جدید بازیکن}

حالا که جوی استیک را اضافه کرده اید اجازه دهید روی اولین مانع کار کنیم!

مرحله 5: سطح اول

خوب ، اکنون وقت آن است که وارد قسمت اصلی برنامه ، موانع ، شویم! موانع آن چیزی است که واقعاً این بازی را "سخت ترین بازی جهان" کرده است. بنابراین اگر می خواهید بازی را انجام دهید ، باید این را به کد خود اضافه کنید:

بایت مانع [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// سه سطح ، 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، 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}}، {{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، 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، 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، 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، 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}}، {{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}، {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}}}، void setup () {initialize_modules ()؛ // روشن و تنظیم هر چهار ماژول led start_level (0) ؛ void loop () {move_player ()؛ // شروع حلقه با بررسی اینکه آیا بازیکن حرکت می کند اگر (برخورد ()) {// بررسی سطح برخورد = 0 ؛ // اگر برخورد صحیح باشد ، سطح start_level (سطح) را بازنشانی کنید ؛ // راه اندازی مجدد بازی} else if (تاخیر_شمارش == مانع_ تاخیر) {// در صورت عدم برخورد موانع هرگونه تاخیر moveobstacle دیگر ()؛ delay_count = 0؛ } else delay_count ++؛ تاخیر (زمان تاخیر) ؛ // تاخیر در سرعت بازی}

و این اولین مانع است! اگر از این به عنوان سطح اول خود خسته شده اید ، همیشه می توانید بایت ها را تغییر دهید ، فقط به یاد داشته باشید که باید هشت صحنه مختلف داشته باشید! بیایید به مرحله بعدی ، تشخیص برخورد ادامه دهیم!

مرحله 6: تشخیص برخورد

این مرحله یکی دیگر از بخشهای مهم بازی است ، بدون آن چالش چندانی نخواهد بود! شما فقط می توانید راه خود را از طریق موانع بدون هیچ گونه عواقبی ببافید! این خیلی سرگرم کننده نخواهد بود بنابراین اجازه دهید بازی را با افزودن این بخش از برنامه چالش برانگیزتر (و بسیار سرگرم کننده تر!) کنیم.

حلقه خالی () {

move_player ()؛ // شروع حلقه با بررسی اینکه آیا بازیکن حرکت می کند اگر (برخورد ()) {// بررسی سطح برخورد = 0 ؛ // اگر برخورد صحیح باشد ، سطح start_level (سطح) را بازنشانی کنید ؛ // راه اندازی مجدد بازی} else if (delay_count == pengje_delay) {// در صورت عدم برخورد موانع هرگونه تاخیر moveobstacle دیگر ()؛ delay_count = 0؛ } else delay_count ++؛ تاخیر (زمان تاخیر) ؛ // تأخیر با سرعت بازی} int collision () {// بررسی کنید که آیا بازیکن در مانژول صحنه به مانعی برخورد کرده است = players_x/8 ؛ ستون = players_x٪ 8؛ row = players_y؛ if (ماژول> 0) if (مانع [سطح] [صحنه] [ستون] [ردیف] == 1) // اگر موقعیت بازیکن همان بازگشت موانع است (1) ؛ // برخورد شناسایی بازگشت واقعی بازگشت (0)؛ // بدون برخورد بازگشت false}

و شما برو! در حال حاضر شما می توانید بازی بسیار بیشتر لذت ببرید! حالا من به شما نشان می دهم که چگونه دو سطح آخر بازی را برنامه ریزی کنید! کار شما تقریباً با این دستورالعمل انجام شده است ، و من مطمئن هستم که آماده امتحان کردن آن هستید!

مرحله 7: دو سطح آخر

در انتهای دوره آموزشی ، این دو سطح آخر تنها چیزی است که شما برای پایان این بازی نیاز دارید. سپس می توانید خودتان آن را امتحان کنید! اینجا کد است:

بایت مانع [LEVELS] [SCENES] [COLUMNS] [ROWS] = {// سطح دوم و سوم ، 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، 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، 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، 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، 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، 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}}}} ؛

و بس! شما آماده هستید تا سخت ترین بازی جهان را تکمیل کنید. همچنین کد کامل آردوینو در زیر پیوست شده است.

توصیه شده: