Obsah:

Matice NeoPixels, hadí hra: 4 kroky
Matice NeoPixels, hadí hra: 4 kroky

Video: Matice NeoPixels, hadí hra: 4 kroky

Video: Matice NeoPixels, hadí hra: 4 kroky
Video: LIGHT EFFECT by WS2812B NEOPIXEL ESP32 DIY MATRIX 16x16 ide ARDUINO 2024, Červenec
Anonim
NeoPixels Matrix, hadí hra
NeoPixels Matrix, hadí hra

Pamatujete si ještě hadí hru, kterou jsme v dětství hráli na našem herním boxu nebo mobilu? Dnes se naučíme, jak vytvořit hadí hru s maticí 8*8 NeoPixels. Jako ovládací centrum jsme zvolili Arduino uno a pro ovládání hada modul Breakout Breakout.

Krok 1: Seznam součástí:

Hardware:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexibilní 64 RGB LED 8*8 NeoPixels Matrix

1 X Joystick vylamovací modul BKOUT_MD01

3 X Vodicí linie

Software:

Arduino IDE

Krok 2: Hardwarové připojení

Připojte NeoPixels na pin D2.

„X“na odpojovacím modulu joysticku připojte pin A0 na desce Arduino UNO, „Y“připojte pin A1, „K“připojte pin A2.

Krok 3: Programování

P#zahrnout

#define PIN 2 // Výstupní pin #define MAX_LED 64 // Množství korálků uint32_t c; int a = 0, číslo; nepodepsaný char huan = 0, ci = 0; znak bez znaménka u = 40; // Velikost písma skupiny slov bez znaménka char x = 0; nepodepsaný znak Barva [3]; znak bez znaménka = {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 znak bez znaménka [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},}; znak bez znaménka [8] = // Nastavení odesílaného slova {{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} 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, 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, 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, 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, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0 },}; unsigned char displayscore [8] [8]; int rychlostS = 400; // Počáteční rychlost int skóre snake; // Skóre hry int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Souřadnice jídla int SX, SY; // Souřadnice hadí hlavy int KEY, K; int Povoleno; // Povolit restartování hry char sx [64]; // Souřadnice znaku hadího těla [64]; Proužek Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); neplatné NÁHODNÉ () {A: FX = náhodné (0, 7); FY = náhodný (0, 7); for (int i = 0; i <3+score; i ++) // Zabraňte zobrazení jídla na těle hada {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Během zpoždění pohybu hada musíme udělat něco jako lesk jídla a přečíst směr Joysticku pro (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; }} // Zde můžete porovnat, zda je směr klávesnice opačný než směr pohybu hada. Pokud je to naopak, vzdejte se klávesnice. /******************************************************** ******************************************************* ****************************************************** ******************************************************* ********/ void gameover () {// Jakmile se program Gameover zastaví, restartujte hru stisknutím centrálního tlačítka. hodnota znaku bez znaménka, y; Barva [0] = náhodná (3, 18); // Nastav barvu. Parametr je R G B, rozsah 0-255. Barva [1] = náhodný (3, 18); Barva [2] = náhodné (3, 18); c = pruh. Barva (Barva [1], Barva [0], Barva [2]); hodnota = skóre / 10; hodnota = hodnota * 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 ++; } hodnota = skóre % 10; hodnota = hodnota * 4; for (number = value; number <value+4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // Posoudit, zda světlo je zapnuto {strip.setPixelColor (světlo [horizontální] [vertikální], c); } else strip.setPixelColor (světlo [horizontální] [vertikální], 0); }} strip.show (); // Zpoždění odeslání dat (5000); K = 0; // Reset směru joysticku sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Reset skóre souřadnic hada = 0; // Reset rychlosti skóre hry S = 400; // Počáteční rychlost hada} neplatné nastavení () {Serial.begin (9600); // Inicializace knihovny strip.begin (); // Odeslání dat. Výchozí barva každého bodu je 0. Každý bod tedy není na začátku osvětlen. strip.show (); K = 0; // Reset směru joysticku sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Reset skóre souřadnic hada = 0; // Reset skóre hry Barva [0] = náhodný (3, 18); // Nastav barvu. Parametr je R G B, rozsah 0-255. Barva [1] = náhodný (3, 18); Barva [2] = náhodné (3, 18); c = pruh. Barva (Barva [1], Barva [0], Barva [2]); // Zelená Červená Modrá // Nastavit barvu pro (číslo = 0; číslo <24; číslo ++) {strip.setPixelColor (go [číslo], c); } strip.show (); // Zpoždění odeslání dat (2000); NÁHODNÝ(); // Produkce potravin} void mobile () {KEY = K; // Každý pohyb hada jednou změní směr. if (KEY == 8) // Pohyb nahoru hadem {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Přejděte za hranici a pokračujte na druhé straně sy [0] = 7; } else if (KEY == 5) // Pohyb hada dolů {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; if (sy [0]> 7) // Přejděte za hranici a pokračujte na druhé straně sy [0] = 0; } else if (KEY == 4) // Snake left move {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; if (sx [0] <0) // Přejděte za hranici a pokračujte na druhé straně sx [0] = 7; } else if (KEY == 6) // Snake right move {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // Přejděte za hranici a pokračujte na druhé straně sx [0] = 0; } // Přesun těla hada tlačítkem} neplatné zobrazení () {for (číslo = 0; číslo <64; číslo ++) // Vymazání obrazovky {strip.setPixelColor (číslo, 0); } strip.show (); Barva [0] = 40; // Nastavit barvu. Parametr je R G B, rozsah 0-255. Barva [1] = 0; Barva [2] = 0; c = proužek. Barva (Barva [1], Barva [0], Barva [2]); // Zelená Červená Modrá // Nastavit barvu x = světlo [FX] [FY]; // Zobrazení potravinového proužku.setPixelColor (x, c); Barva [0] = náhodná (3, 18); // Nastavit barvu. Parametr je R G B, rozsah 0-255. Barva [1] = náhodný (3, 18); Barva [2] = náhodné (3, 18); c = pruh. Barva (Barva [1], Barva [0], Barva [2]); // Zelená Červená Modrá // Nastavit barvu pro (int i = 2 + skóre; i> 0; i--) // Zobrazit tělo hada {x = světlo [sx [sy ; strip.setPixelColor (x, c); } Barva [0] = 0; // Nastavit barvu. Parametr je R G B, rozsah 0-255. Barva [1] = 40; Barva [2] = 0; c = pruh. Barva (Barva [1], Barva [0], Barva [2]); // Zelená Červená Modrá // Nastavit barvu x = světlo [sx [0] [sy [0]; // Zobrazení pruhu hadí hlavy.setPixelColor (x, c); strip.show (); // Odeslat data} void loop () {mobile (); myDelay (speedS); // Do () je doba zpoždění. zobrazí (); SX = sx [0]; SY = sy [0]; // Získejte souřadnice hadí hlavy pro (int i = 1; i <= 2+skóre; i ++) {if (SX == sx && SY == sy ) gameover (); } // Posuďte, zda se hadí hlava dotkla jejího těla. Pokud se dotknete, přepošlete na GameOver. if (SY == FY && SX == FX) {RANDOM (); skóre ++; Barva [0] = 40; // Nastavit barvu. Parametr je R G B, rozsah 0-255. Barva [1] = 0; Barva [2] = 0; c = pruh. Barva (Barva [1], Barva [0], Barva [2]); // Zelená Červená Modrá // Nastavit barvu x = světlo [FX] [FY]; // Zobrazení potravinového proužku.setPixelColor (x, c); strip.show (); // Odesílání dat if (! (skóre % 5)) {// Zvýšení rychlosti hada podle skóre. Každých 5 snědených potravin zdůrazněte 100 ms. speedS = speedS - 50; if (speedS <150) // Dolní limit je 200ms. Pokud je rychlost nižší než 200 ms, rychlost zůstane 200 ms. rychlost S = 150; }} // Posuďte, zda se jídlo jí. Pokud had jedl jídlo, pak plus skóruje a regeneruje jídlo náhodně. }

Výsledek experimentu

Krok 4: Výsledek experimentu

Relativní hodnoty:

FreaksBot Bluetooth auto

Zapalte první kuličku na 8*8 NeoPixels Matrix s Arduino

Micro: bit Experiment 05: RGB LED - Elecfreaks Mirco: Kurz bitové startovací sady

Páteční produktový příspěvek: Sada pro pájení displeje LED s frekvenčním spektrem hudby

Použijte ElecFreaks Micro: bit Tinker Kit k vytvoření chytrého světla

Doporučuje: