Sadržaj:

NeoPixels Matrix : Igra zmija: 4 koraka
NeoPixels Matrix : Igra zmija: 4 koraka

Video: NeoPixels Matrix : Igra zmija: 4 koraka

Video: NeoPixels Matrix : Igra zmija: 4 koraka
Video: Как Должен Был Закончиться Тор:Рагнарёк #shorts 2024, Studeni
Anonim
Matrica NeoPixels: Zmijska igra
Matrica NeoPixels: Zmijska igra

Sjećate li se još zmijske igre koju smo igrali na našoj kutiji za igru ili mobilnom tijekom našeg djetinjstva? Danas ćemo naučiti kako napraviti igru zmija s 8*8 NeoPixels Matrix. Odabiremo Arduino uno kao kontrolni centar i Joystick modul za probijanje zmije.

Korak 1: Popis komponenti:

Hardver:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Fleksibilna 64 RGB LED 8*8 NeoPixels matrica

1 X Modul za probijanje upravljačke palice BKOUT_MD01

3 X Vodič

Softver:

Arduino IDE

Korak 2: Povezivanje hardvera

Spojite NeoPixels na pin D2.

"X" na upravljačkom modulu za probijanje spojite pin A0 na Arduino UNO ploči, "Y" spojite pin A1, "K" spojite pin A2.

Korak 3: Programiranje

P#uključi

#define PIN 2 // Izlazni pin #define MAX_LED 64 // Količina zrna uint32_t c; int a = 0, broj; nepotpisani char huan = 0, ci = 0; nepotpisani znak u = 40; // Veličina fonta grupe riječi unsigned char x = 0; neoznačeni char Boja [3]; nepotpisani 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 svjetla bez potpisa char [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},}; bezznakovni znak char [8] = // Postavite riječ koja se šalje {{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 },}; nepotpisani znak prikazuje rezultat [8] [8]; int brzinaS = 400; // Početna brzina zmijskog int score -a; // rezultat igre int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // Koordinata hrane int SX, SY; // Koordinata zmijske glave int KEY, K; int Omogućeno; // Omogući ponovno pokretanje igre char sx [64]; // Koordinata zmijskog tijela char sy [64]; Adafruit_NeoPixel traka = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = slučajno (0, 7); FY = slučajno (0, 7); for (int i = 0; i <3+score; i ++) // Sprječavanje prikaza hrane na tijelu zmije {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Tijekom razdoblja odgode kretanja zmija, moramo učiniti nešto poput svjetlucanja hrane i pročitati smjer joystick -a za (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yValue <50 && KEY! = 8) {K = 5; } else if (xVrijednost 950 && KEY! = 4) {K = 6; }} // Ovdje možete usporediti je li smjer tipkovnice suprotan smjeru kretanja zmije. Ako je suprotno, odustanite od tipkovnice. /*********************************************** ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Nakon zaustavljanja programa Gameover, pritisnite središnju tipku za ponovno pokretanje igre. vrijednost bez znaka, y; Boja [0] = slučajno (3, 18); // Postavljena boja. Parametar je R G B, raspon 0-255. Boja [1] = slučajno (3, 18); Boja [2] = slučajni (3, 18); c = traka. Boja (Boja [1], Boja [0], Boja [2]); vrijednost = rezultat / 10; vrijednost = vrijednost * 4; y = 0; za (broj = vrijednost; broj <vrijednost+4; broj ++) {za (bez znaka okomita okomita = 0; okomita <8; okomita++) {prikazuje ocjenu [y] [okomito] = znak [broj] [okomito]; } y ++; } vrijednost = rezultat % 10; vrijednost = vrijednost * 4; za (broj = vrijednost; broj <vrijednost+4; broj ++) {za (bez znaka okomita okomita = 0; okomita <8; okomita++) {prikazuje ocjenu [y] [okomito] = znak [broj] [okomito]; } y ++; } za (bez znaka znak vodoravno = 0; vodoravno <8; vodoravno ++) {za (bez znaka okomito okomito = 0; okomito <8; okomito ++) {if (prikazuje ocjenu [vodoravno] [okomito] == 1) // Procijenite je li svjetlo je uključeno. {strip.setPixelColor (svjetlo [vodoravno] [okomito], c); } else strip.setPixelColor (svjetlo [vodoravno] [okomito], 0); }} strip.show (); // Kašnjenje slanja podataka (5000); K = 0; // Poništavanje smjera upravljačke palice sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Poništi koordinatni rezultat zmije = 0; // Poništi brzinu rezultata igreS = 400; // Početna brzina zmije} void setup () {Serial.begin (9600); // Pokretanje knjižnice strip.begin (); // Slanje podataka. Zadana boja svake točke je 0. Dakle, svaka točka nije osvijetljena na početku. strip.show (); K = 0; // Poništavanje smjera upravljačke palice sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Poništi rezultat koordinate zmije = 0; // Poništi rezultat igre Boja [0] = slučajno (3, 18); // Postavljena boja. Parametar je R G B, raspon 0-255. Boja [1] = slučajno (3, 18); Boja [2] = slučajni (3, 18); c = traka. Boja (Boja [1], Boja [0], Boja [2]); // Zelena Crvena Plava // Postavi boju za (broj = 0; broj <24; broj ++) {strip.setPixelColor (idi [broj], c); } strip.show (); // Kašnjenje slanja podataka (2000); SLUČAJNO (); // Proizvodnja hrane} void mobile () {KEY = K; // Svaki pokret zmije jednom promijeni smjer. if (KEY == 8) // Kretanje zmije prema gore {for (int i = 2 + rezultat; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (sy [0] <0) // Idite izvan granice i nastavite s druge strane sy [0] = 7; } else if (KEY == 5) // Kretanje zmije prema dolje {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) // Idite izvan granice i nastavite s druge strane sy [0] = 0; } else if (KEY == 4) // Pokret zmije ulijevo {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) // Idite izvan granice i nastavite s druge strane sx [0] = 7; } else if (KEY == 6) // Zmijsko kretanje udesno {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) // Idite izvan granice i nastavite s druge strane sx [0] = 0; } // Pomicanje tijela zmije s gumbom} void prikazuje () {for (broj = 0; broj <64; broj ++) // Očisti zaslon {strip.setPixelColor (broj, 0); } strip.show (); Boja [0] = 40; // Postavljanje boje. Parametar je R G B, raspon 0-255. Boja [1] = 0; Boja [2] = 0; c = traka. Boja (Boja [1], Boja [0], Boja [2]); // Zelena Crvena Plava // Postavljena boja x = svjetlo [FX] [FY]; // Prikaz trake za hranu.setPixelColor (x, c); Boja [0] = slučajno (3, 18); // Postavljanje boje. Parametar je R G B, raspon 0-255. Boja [1] = slučajno (3, 18); Boja [2] = slučajni (3, 18); c = traka. Boja (Boja [1], Boja [0], Boja [2]); // Zelena Crvena Plava // Postavljanje boje za (int i = 2 + rezultat; i> 0; i--) // Prikaz zmijskog tijela {x = svjetlo [sx [sy ; strip.setPixelColor (x, c); } Boja [0] = 0; // Postavljanje boje. Parametar je R G B, raspon 0-255. Boja [1] = 40; Boja [2] = 0; c = traka. Boja (Boja [1], Boja [0], Boja [2]); // Zelena Crvena Plava // Postavite boju x = svjetlo [sx [0] [sy [0]; // Prikaz trake zmijske glave.setPixelColor (x, c); strip.show (); // Slanje podataka} void loop () {mobile (); myDelay (speedS); // Unutar () je vrijeme kašnjenja. prikazuje (); SX = sx [0]; SY = sy [0]; // Dobijte koordinatu zmijske glave za (int i = 1; i <= 2+rezultat; i ++) {if (SX == sx && SY == sy ) gameover (); } // Procijenite je li zmijska glava dotakla tijelo. Ako dodirnete, premjestite na GameOver. if (SY == FY && SX == FX) {RANDOM (); rezultat ++; Boja [0] = 40; // Postavljanje boje. Parametar je R G B, raspon 0-255. Boja [1] = 0; Boja [2] = 0; c = traka. Boja (Boja [1], Boja [0], Boja [2]); // Zelena Crvena Plava // Postavljena boja x = svjetlo [FX] [FY]; // Prikaz trake za hranu.setPixelColor (x, c); strip.show (); // Pošaljite podatke if (! (rezultat % 5)) {// Ubrzajte brzinu zmije prema rezultatu. Svakih 5 pojedenih namirnica ubrzajte 100 ms. brzinaS = brzinaS - 50; if (speedS <150) // Donja granica je 200 ms. Ako je brzina manja od 200 ms, brzina ostaje 200 ms. brzinaS = 150; }} // Procijenite jede li se hrana. Ako je zmija jela hranu, onda plus bodove i nasumično regenerira hranu. }

Rezultat eksperimenta

Korak 4: Rezultat eksperimenta

Relativna očitanja:

Automobil FreaksBot Bluetooth

Osvijetlite prvu perlu na matrici 8*8 NeoPixels s Arduinom

Micro: bit Eksperiment 05: RGB LED - Elecfreaks Mirco: tečaj za početni komplet bitova

Petak Post proizvoda: Komplet za lemljenje LED glazbenog frekvencijskog spektra

Upotrijebite ElecFreaks Micro: bit Tinker Kit za izradu pametnog svjetla

Preporučeni: