Բովանդակություն:

NeoPixels Matrix : Snake խաղ. 4 քայլ
NeoPixels Matrix : Snake խաղ. 4 քայլ

Video: NeoPixels Matrix : Snake խաղ. 4 քայլ

Video: NeoPixels Matrix : Snake խաղ. 4 քայլ
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Նոյեմբեր
Anonim
NeoPixels Matrix : Օձի խաղ
NeoPixels Matrix : Օձի խաղ

Դեռ հիշու՞մ եք օձերի խաղերը, որոնք մենք խաղում էինք մեր մանկության տարիներին մեր խաղատուփի կամ բջջայինի վրա: Այսօր մենք սովորելու ենք, թե ինչպես պատրաստել օձերի խաղ 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- ը

Խորհուրդ ենք տալիս: