Բովանդակություն:
- Քայլ 1: Բաղադրիչների ցուցակ
- Քայլ 2: Սարքաշարի միացում
- Քայլ 3: Programրագրավորում
- Քայլ 4: Փորձի արդյունք
Video: NeoPixels Matrix : Snake խաղ. 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Դեռ հիշու՞մ եք օձերի խաղերը, որոնք մենք խաղում էինք մեր մանկության տարիներին մեր խաղատուփի կամ բջջայինի վրա: Այսօր մենք սովորելու ենք, թե ինչպես պատրաստել օձերի խաղ 8*8 NeoPixels մատրիցով: Մենք ընտրում ենք Arduino uno- ն որպես վերահսկման կենտրոն և Joystick breakout մոդուլը `օձին վերահսկելու համար:
Քայլ 1: Բաղադրիչների ցուցակ
Սարքավորումներ:
1 X Freaduino UNO Rev2.2 MB_EFUNO
1 X ibleկուն 64 RGB LED 8*8 NeoPixels մատրիցա
1 X Joystick բեկման մոդուլ BKOUT_MD01
3 X ուղեցույց գիծ
Softwareրագրային ապահովում:
Arduino IDE
Քայլ 2: Սարքաշարի միացում
NeoPixels- ը միացրեք D2 կապին:
Joystick breakout մոդուլի վրա «X» - ը Arduino UNO- ի տախտակին միացրեք կապը, «A» - ն ՝ A1, «K» - ն ՝ A2 կապը:
Քայլ 3: Programրագրավորում
P#ներառել
#սահմանել PIN 2 // Ելքի պին #սահմանել MAX_LED 64 // ուլունքների քանակը uint32_t c; int a = 0, թիվ; անստորագիր char huan = 0, ci = 0; անստորագիր char u = 40; // Բառախմբի տառատեսակի չափը անստորագիր char x = 0; անստորագիր նշան Գույն [3]; անստորագիր char go = {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},}; անստորագիր 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 },}; անստորագիր նշանի ցուցադրում [8] [8]; int արագությունS = 400; // Օձի սկզբնական արագություն 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); դատարկ RANDOM () {A: FX = պատահական (0, 7); ՏՏ = պատահական (0, 7); (int i = 0; i <3+հաշիվ; 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 ++; } համար (unsigned char հորիզոնական = 0; հորիզոնական <8; հորիզոնական ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Դատեք, թե արդյոք լույսը միացված է {strip.setPixelColor (թեթև [հորիզոնական] [ուղղահայաց], գ); } else strip.setPixelColor (թեթև [հորիզոնական] [ուղղահայաց], 0); }} strip.show (); // Տվյալների ուշացում ուղարկելը (5000); K = 0; // Վերակայել Joystick ուղղությունը sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Վերականգնել օձի կոորդինատային հաշիվ = 0; // Վերականգնել խաղի հաշիվների արագությունը S = 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); Պատահական (); // Արտադրել սնունդ} դատարկ բջջային հեռախոս () {KEY = K; // Օձի յուրաքանչյուր շարժում մեկ անգամ է փոխում ուղղությունը: եթե (KEY == 8) // Օձի վերև շարժում {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; եթե (sy [0] <0) // Գնացեք սահմանից այն կողմ և շարունակեք մյուս կողմից sy [0] = 7; } else if (KEY == 5) // Snake downward move {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; եթե (sy [0]> 7) // Գնացեք սահմանից այն կողմ և շարունակեք մյուս կողմից sy [0] = 0; } else if (KEY == 4) // Օձի ձախ շարժում {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; եթե (sx [0] <0) // Գնացեք սահմանից այն կողմ և շարունակեք մյուս կողմից sx [0] = 7; } else if (KEY == 6) // Օձի աջ շարժում {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; եթե (sx [0]> 7) // Գնացեք սահմանից այն կողմ և շարունակեք մյուս կողմից sx [0] = 0; } // Օձի մարմինը տեղափոխել կոճակով} անվավեր ցուցադրումներ () {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]; // foodուցադրել սննդի ժապավենը: setPixelColor (x, c); Գույն [0] = պատահական (3, 18); // Սահմանել գույնը: Պարամետրը R G B է, միջակայքը `0-255: Գույն [1] = պատահական (3, 18); Գույն [2] = պատահական (3, 18); c = շերտ. Գույն (Գույն [1], Գույն [0], Գույն [2]); // Կանաչ կարմիր կապույտ // Գույն սահմանել (int i = 2 + միավոր; i> 0; i--) // Displayուցադրել օձի մարմինը {x = լույս [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]; // Displayուցադրել օձի գլուխը strip.setPixelColor (x, c); strip.show (); // Data send} void loop () {mobile (); myDelay (speedS); // Within շրջանակներում) ուշացման ժամանակն է: ցուցադրում (); SX = sx [0]; SY = sy [0]; // Ստացեք օձի գլխի կոորդինատ (int i = 1; i <= 2+հաշիվ; i ++) {if (SX == sx && SY == sy ) խաղի համար (); } // Դատեք ՝ օձի գլուխը դիպե՞լ է նրա մարմնին: Եթե դիպչեք, ապա առաջ GameOver- ին: եթե (SY == FY && SX == FX) {RANDOM (); հաշիվ ++; Գույն [0] = 40; // Սահմանել գույնը: Պարամետրը R G B է, միջակայքը `0-255: Գույն [1] = 0; Գույն [2] = 0; c = շերտ. Գույն (Գույն [1], Գույն [0], Գույն [2]); // Կանաչ Կապույտ // Սահմանել գույնը x = բաց [FX] [FY]; // foodուցադրել սննդի ժապավենը: setPixelColor (x, c); strip.show (); // Ուղարկեք տվյալներ, եթե (! (միավոր % 5)) {// Հաշվարկեք օձի արագությունը ըստ հաշվի: Ուտած յուրաքանչյուր 5 սննդամթերք ՝ 100 մկմ: speedS = speedS - 50; if (speedS <150) // Ստորին սահմանը 200ms է: Եթե 200 մ -ից ցածր արագություն կա, ապա արագությունը մնում է 200 մ: արագությունS = 150; }} // Դատեք, թե արդյոք սնունդ են ուտում: Եթե օձը կերել է սնունդ, ապա գումարած հաշիվը գնահատել և վերածնել սնունդը պատահականորեն: }
Փորձի արդյունք
Քայլ 4: Փորձի արդյունք
Հարաբերական ընթերցումներ
FreaksBot Bluetooth մեքենա
Լուսավորեք առաջին բշտիկը 8*8 NeoPixels մատրիցով Arduino- ի հետ
Micro: bit Փորձ 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Դասընթաց
Ուրբաթ Ապրանքի գրառում. LED երաժշտության հաճախականության սպեկտրի ցուցադրման զոդման հավաքածու
Խելացի լույս ստեղծելու համար օգտագործեք ElecFreaks Micro: bit Tinker Kit- ը
Խորհուրդ ենք տալիս:
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels) ՝ 7 քայլ (նկարներով)
DIY SMART LED MATRIX (ESP8266 + WS2812 / NeoPixels). Ահա իմ ներդրումը մի նախագծի, որը ես շատ ոգևորված եմ ձեզ ցույց տալու: Խոսքը DIY Smart LED մատրիցի մասին է, որը թույլ կտա ձեզ ցույց տալ դրա վրա տվյալները, ինչպիսիք են YouTube վիճակագրությունը, ձեր խելացի տնային վիճակագրությունը, քանի որ ջերմաստիճանը, խոնավությունը կարող են լինել պարզ ժամացույց, կամ պարզապես դիտել
Էլեկտրոնային խաղ Tic-Tac-Toe խաղ փայտե տուփի մեջ. 5 քայլ
Էլեկտրոնային խաղ Tic-Tac-Toe- ը փայտե տուփի մեջ
Aruduino LED խաղ Արագ կտտացնելով երկու խաղացողի խաղ. 8 քայլ
Aruduino LED խաղ Արագ սեղմում երկու խաղացողի խաղ. Այս նախագիծը ոգեշնչված է @HassonAlkeim- ից: Եթե պատրաստ եք խորը հայացք նետել, այստեղ կա մի հղում, որը կարող եք ստուգել https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/: Այս խաղը Alkeim's- ի կատարելագործված տարբերակն է: Դա է
Arduino OLED Snake խաղ. 3 քայլ
Arduino OLED Snake Game. Ողջույն, բարի գալուստ, մեր հրահանգներին, թե ինչպես պատրաստել և arduino OLED խաղ, այս նախագիծը հայտնվեց այն ժամանակ, երբ մենք փորձում էինք մեր առաջին խաղը կատարել arduino- ով, այնպես որ, մենք մտածեցինք, թե որտեղից ավելի լավ է սկսել, քան Nokia- ն: դասական օձ (դե առնվազն
8x16 LED Matrix Pong խաղ (2 թիակ խաղացողի տարբերակով) ՝ 3 քայլ
8x16 LED Matrix Pong խաղ (2 թիակ յուրաքանչյուր խաղացողի համար). Ինձ ոգեշնչել է Arduino- ում կիրառվող դասական պոնգ խաղի բազմաթիվ տատանումներ `օգտագործելով 8x8 LED մատրից: Այս ուսանելիում ես ձեզ ցույց կտամ, թե ինչպես կարելի է կառուցել իմ սիրած պոնգի տարբերակը, որն ունի երկու թիավար ՝ հարձակվող և դարպասապահ ՝ յուրաքանչյուր խաղացողի համար: