فهرست مطالب:

بازی NeoPixels Matrix : Snake: 4 Step
بازی NeoPixels Matrix : Snake: 4 Step

تصویری: بازی NeoPixels Matrix : Snake: 4 Step

تصویری: بازی NeoPixels Matrix : Snake: 4 Step
تصویری: ТАКОВ МОЙ ПУТЬ В L4D2 2024, نوامبر
Anonim
NeoPixels Matrix : Snake Game
NeoPixels Matrix : Snake Game

آیا هنوز بازی مار را که در دوران کودکی روی جعبه یا موبایل بازی می کردیم به خاطر دارید؟ امروز ما قصد داریم نحوه ساخت بازی مار با ماتریس NeoPixels 8*8 را بیاموزیم. ما Arduino uno را به عنوان مرکز کنترل و ماژول شکست Joystick را برای کنترل مار انتخاب می کنیم.

مرحله 1: فهرست اجزاء:

سخت افزار:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexible 64 RGB LED 8*8 NeoPixels Matrix

1 X ماژول شکست Joystick BKOUT_MD01

3 X راهنمای خط

نرم افزار:

آردوینو IDE

مرحله 2: اتصال سخت افزار

NeoPixels را به پین D2 وصل کنید.

"X" در ماژول شکست Joystick پین A0 را روی برد Arduino UNO وصل کنید ، "Y" پین A1 ، "K" پین A2 را وصل کنید.

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

P#شامل

#تعریف پین 2 // پین خروجی #تعریف MAX_LED 64 // مقدار مهره uint32_t c؛ int a = 0 ، شماره ؛ کاراکتر بدون امضا huan = 0 ، ci = 0؛ char بدون امضا u = 40؛ // اندازه فونت گروه کلمات unsigned char x = 0؛ رنگ بدون علامت رنگ [3]؛ char charged = {2، 3، 4، 5، 9، 14، 17، 20، 22، 26، 27، 29، 34، 35، 36، 37، 41، 46، 49، 54، 58، 59 ، 60 ، 61} ؛ // 24 چراغ بدون علامت بدون علامت [8] [8] = {{0، 1، 2، 3، 4، 5، 6، 7}، {15، 14، 13، 12، 11، 10، 9، 8}، {16، 17، 18، 19، 20، 21، 22، 23}، {31، 30، 29، 28، 27، 26، 25، 24}، {32، 33، 34، 35، 36، 37، 38 ، 39}، {47، 46، 45، 44، 43، 42، 41، 40}، {48، 49، 50، 51، 52، 53، 54، 55}، {63، 62، 61، 60، 59 ، 58 ، 57 ، 56} ،} ؛ کاراکتر unsigned char [8] = // کلمه ارسال شده را تنظیم کنید {{0، 1، 1، 1، 1، 1، 0، 0}، {0، 1، 0، 0، 0، 1، 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، 0، 0}، // 1 {0، 1، 1، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 0، 1، 1، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0 ، 0}، // 2 {0، 1، 1، 1، 0، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 0، 1، 0، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0، 0}، // 3 {0، 1، 1، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 1، 1، 0، 0، 0، 0}، {0، 0، 0، 1، 0، 0، 0 ، 0}، // 4 {0، 1، 1، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 1، 1، 0، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0، 0}، // 5 {0، 1، 0، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 1، 1، 1، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0 ، 0}، // 6 {0، 1، 0، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 0، 0، 0، 0، 0، 0}، {0، 1، 0، 0، 0، 0، 0، 0}، // 7 {0، 1، 1، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 1، 1، 1، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0 ، 0} ، // 8 {0 ، 1 ، 1 ، 1 ، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0}، {0، 1، 1، 1، 0، 1، 0، 0}، {0، 1، 0، 1، 0، 1، 0، 0}، // 9 {0، 1، 1، 1، 1، 1، 0، 0}، {0، 0، 0، 0، 0، 0، 0، 0، 0 } ،} ؛ نمایشگر char بدون علامت [8] [8]؛ int intS = 400 ؛ // سرعت اولیه مار int int؛ // امتیاز بازی int xValue؛ // JoyStick-X int yValue ؛ // JoyStick-Y int zValue ؛ // JoyStick-Z int FX، FY؛ // مختصات غذا int SX، SY؛ // مختصات سر مار int KEY، K؛ int فعال شده است ؛ // فعال کردن راه اندازی مجدد بازی char sx [64] ؛ // مختصات بدن مار char sy [64]؛ نوار Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED ، PIN ، NEO_RGB + NEO_KHZ800) ؛ void RANDOM () {A: FX = تصادفی (0 ، 7) ؛ FY = تصادفی (0 ، 7) ؛ for (int i = 0؛ i <3+score؛ i ++) // جلوگیری از نمایش غذا روی بدن مار {if (FX == sx && FY == sy ) goto A؛ }} void myDelay (unsigned int Time) {// در طول مدت تأخیر حرکت مار ، ما باید کاری مانند درخشش غذا انجام دهیم و جهت Joystick را برای (int t = 1؛ t 950 && KEY! = 5) {بخوانیم { K = 8 ؛ } else if (yValue <50 && KEY! = 8) {K = 5؛ } else if (xValue 950 && KEY! = 4) {K = 6؛ }} // در اینجا می توانید مقایسه کنید که آیا جهت صفحه کلید خلاف جهت حرکت مار است یا خیر. اگر مخالف است ، صفحه کلید را رها کنید. /********************************************* ************************************************ ************************************************* ************************************************* ********/ void gameover () {// هنگامی که برنامه Gameover متوقف شد ، دکمه مرکزی را برای راه اندازی مجدد بازی فشار دهید. مقدار char بدون علامت ، y ؛ رنگ [0] = تصادفی (3 ، 18) ؛ // تنظیم رنگ. پارامتر R G B است ، محدوده 0-255. رنگ [1] = تصادفی (3 ، 18) ؛ رنگ [2] = تصادفی (3 ، 18) ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ ارزش = امتیاز / 10 ؛ ارزش = ارزش * 4 ؛ y = 0 ؛ for (number = value؛ number <value+4؛ number ++) {for (unsigned char vertical = 0؛ vertical <8؛ vertical ++) {displayscore [y] [vertical] = character [number] [vertical]؛ } y ++ ؛ } ارزش = نمره٪ 10 ؛ ارزش = ارزش * 4 ؛ for (number = value؛ number <value+4؛ number ++) {for (unsigned char vertical = 0؛ vertical <8؛ vertical ++) {displayscore [y] [vertical] = character [number] [vertical]؛ } y ++ ؛ } برای (کاراکتر بدون علامت افقی = 0 ؛ افقی <8 ؛ افقی ++) {برای (کاراکتر بدون علامت عمودی = 0 ؛ عمودی <8 ؛ عمودی ++) {if (نمایشگر [افقی] [عمودی] == 1) // قضاوت کنید که آیا نور روشن است {strip.setPixelColor (نور [افقی] [عمودی] ، ج) ؛ } else strip.setPixelColor (نور [افقی] [عمودی] ، 0) ؛ }} strip.show ()؛ // ارسال تاخیر داده (5000) ؛ K = 0 ؛ // بازنشانی جهت جوی استیک sx [0] = 2؛ sx [1] = 1؛ sx [2] = 0 ؛ sy [0] = 1 ؛ sy [1] = 1 ؛ sy [2] = 1 ؛ // بازنشانی امتیاز مختصات مار = 0 ؛ // بازنشانی سرعت امتیاز بازی = 400؛ // سرعت اولیه مار} void setup () {Serial.begin (9600)؛ // راه اندازی کتابخانه strip.begin ()؛ // ارسال داده ها رنگ هر نقطه را به صورت پیش فرض 0 قرار دهید. بنابراین هر نقطه در ابتدا روشن نمی شود. strip.show ()؛ K = 0 ؛ // جهت Joystick sx [0] = 2 را بازنشانی کنید؛ sx [1] = 1؛ sx [2] = 0 ؛ sy [0] = 1 ؛ sy [1] = 1 ؛ sy [2] = 1 ؛ // بازنشانی امتیاز مختصات مار = 0 ؛ // بازنشانی نمره بازی رنگ [0] = تصادفی (3 ، 18) ؛ // تنظیم رنگ. پارامتر R G B است ، محدوده 0-255. رنگ [1] = تصادفی (3 ، 18) ؛ رنگ [2] = تصادفی (3 ، 18) ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ // سبز قرمز آبی // تنظیم رنگ برای (number = 0؛ number <24؛ number ++) {strip.setPixelColor (go [number]، c)؛ } strip.show ()؛ // ارسال تاخیر داده (2000) ؛ تصادفی()؛ // تولید غذا} void mobile () {KEY = K؛ // هر حرکت مار برای یکبار تغییر جهت می دهد. if (KEY == 8) // حرکت مار به سمت بالا {برای (int i = 2 + نمره ؛ i> 0 ؛ i--) {sx = sx [i-1] ؛ sy = sy [i - 1] ؛ } sy [0] = sy [0] - 1 ؛ if (sy [0] <0) // از مرز خارج شوید و در طرف دیگر sy [0] = 7 ادامه دهید؛ } else if (KEY == 5) // حرکت مار به سمت پایین {برای (int i = 2 + نمره ؛ i> 0 ؛ i--) {sx = sx [i-1] ؛ sy = sy [i - 1] ؛ } sy [0] = sy [0] + 1 ؛ if (sy [0]> 7) // از مرز فراتر رفته و در طرف دیگر sy [0] = 0 را ادامه دهید ؛ } else if (KEY == 4) // حرکت مار به چپ {برای (int i = 2 + نمره ؛ i> 0 ؛ i--) {sx = sx [i-1] ؛ sy = sy [i - 1] ؛ } sx [0] = sx [0] - 1 ؛ if (sx [0] <0) // از مرز خارج شوید و در طرف دیگر ادامه دهید sx [0] = 7؛ } else if (KEY == 6) // حرکت مار درست {برای (int i = 2 + نمره ؛ i> 0 ؛ i--) {sx = sx [i-1] ؛ sy = sy [i - 1] ؛ } sx [0] = sx [0] + 1؛ if (sx [0]> 7) // از مرز خارج شوید و در طرف دیگر ادامه دهید sx [0] = 0؛ } // بدن مار را با دکمه حرکت دهید} void displays () {for (number = 0؛ number <64؛ number ++) // Clear the screen {strip.setPixelColor (number، 0)؛ } strip.show ()؛ رنگ [0] = 40 ؛ // تنظیم رنگ. پارامتر R G B ، محدوده 0-255 است. رنگ [1] = 0 ؛ رنگ [2] = 0 ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ // سبز قرمز آبی // تنظیم رنگ x = روشن [FX] [FY] ؛ // نمایش strip.setPixelColor (x ، c) ؛ رنگ [0] = تصادفی (3 ، 18) ؛ // تنظیم رنگ. پارامتر R G B ، محدوده 0-255 است. رنگ [1] = تصادفی (3 ، 18) ؛ رنگ [2] = تصادفی (3 ، 18) ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ // سبز قرمز آبی // تنظیم رنگ برای (int i = 2 + score ؛ i> 0؛ i--) // نمایش بدن مار {x = light [sx [sy ؛ strip.setPixelColor (x ، c) ؛ } رنگ [0] = 0 ؛ // تنظیم رنگ. پارامتر R G B ، محدوده 0-255 است. رنگ [1] = 40 ؛ رنگ [2] = 0 ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ // سبز قرمز آبی // تنظیم رنگ x = روشن [sx [0] [sy [0] ؛ // نمایش نوار سر مار. setPixelColor (x، c)؛ strip.show ()؛ // ارسال داده} حلقه void () {mobile ()؛ myDelay (speedS) ؛ // درون () زمان تاخیر است. نمایش ()؛ SX = sx [0] ؛ SY = sy [0] ؛ // مختصات سر مار را برای (int i = 1 ؛ i <= 2+نمره ؛ i ++) {if (SX == sx && SY == sy ) gameover () دریافت کنید. } // قضاوت کنید که آیا سر مار به بدن او برخورد کرده است یا خیر. اگر لمس شد ، سپس به GameOver منتقل کنید. if (SY == FY && SX == FX) {RANDOM ()؛ نمره ++ ؛ رنگ [0] = 40 ؛ // تنظیم رنگ. پارامتر R G B ، محدوده 0-255 است. رنگ [1] = 0 ؛ رنگ [2] = 0 ؛ c = نوار. رنگ (رنگ [1] ، رنگ [0] ، رنگ [2]) ؛ // سبز قرمز آبی // تنظیم رنگ x = روشن [FX] [FY] ؛ // نمایش strip.setPixelColor (x ، c) ؛ strip.show ()؛ // ارسال داده اگر (! (نمره٪ 5)) {// سرعت مار را مطابق نمره بدست آورید. هر 5 غذای خورده شده ، 100 میلی متر جمع کنید. speedS = speedS - 50 ؛ if (speedS <150) // حد پایین 200 میلی ثانیه است. اگر سرعت کمتر از 200 میلی ثانیه باشد ، سرعت 200 میلی متر باقی می ماند. speedS = 150؛ }} // در مورد خوردن غذا قضاوت کنید. اگر مار غذا می خورد ، به علاوه نمره می دهد و غذا را به طور تصادفی بازسازی می کند. }

نتیجه آزمایش

مرحله 4: نتیجه آزمایش

خواندن نسبی:

ماشین بلوتوث FreaksBot

اولین مهره را روی ماتریس NeoPixels 8*8 با آردوینو روشن کنید

Micro: bit Experiment 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

جمعه پست محصول: کیت لحیم کاری نمایش طیف فرکانس موسیقی LED

برای ایجاد یک نور هوشمند از ElecFreaks Micro: bit Tinker Kit استفاده کنید

توصیه شده: