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, Juli
Anonim
Matrica NeoPixels: Zmijska igra
Matrica NeoPixels: Zmijska igra

Sjećate li se još zmijske igre koju smo igrali na našoj kutiji za igre ili mobilnom uređaju u djetinjstvu? Danas ćemo naučiti kako napraviti igru zmija sa 8*8 NeoPixels Matrix. Odabrali smo Arduino uno kao kontrolni centar i Joystick modul za kontrolu zmije.

Korak 1: Lista 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 džojstika BKOUT_MD01

3 X Vodič

Softver:

Arduino IDE

Korak 2: Povezivanje hardvera

Povežite NeoPixels na pin D2.

"X" na Joystick modulu za probijanje povežite pin A0 na Arduino UNO ploči, "Y" spojite pin A1, "K" povežite pin A2.

Korak 3: Programiranje

P#include

#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; nepotpisani 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 znaka [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 znaka [8] = // Podesite riječ koja će se slati {{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 },}; neoznačeni char 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 Enabled; // Omogući ponovno pokretanje igre char sx [64]; // Koordinata zmijskog tijela char sy [64]; Adafruit_NeoPixel strip = 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) {// Tokom perioda kašnjenja 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 (xVrednost 950 && KEY! = 4) {K = 6; }} // Ovdje možete uporediti je li smjer tastature suprotan smjeru kretanja zmije. Ako je suprotno, odustanite od tastature. /************************************************* ************************************************ ************************************************ ************************************************ ********/ void gameover () {// Kada se program Gameover zaustavi, pritisnite centralno dugme za ponovno pokretanje igre. vrijednost nepotpisanog znaka, y; Boja [0] = slučajno (3, 18); // Postavite boju. Parametar je R G B, raspon 0-255. Boja [1] = slučajno (3, 18); Boja [2] = slučajno (3, 18); c = traka. Boja (Boja [1], Boja [0], Boja [2]); vrijednost = ocjena / 10; vrijednost = vrijednost * 4; y = 0; za (broj = vrijednost; broj <vrijednost+4; broj ++) {za (bezznačni okomiti okomiti = 0; okomiti <8; okomiti ++) {prikazuje ocjenu [y] [okomito] = znak [broj] [okomito]; } y ++; } vrijednost = rezultat % 10; vrijednost = vrijednost * 4; za (broj = vrijednost; broj <vrijednost+4; broj ++) {za (neoznačeni okomiti okomiti = 0; okomiti <8; okomiti++) {prikazuje ocjenu [y] [okomito] = znak [broj] [okomito]; } y ++; } za (bez znaka znak horizontalno = 0; vodoravno <8; horizontalno ++) {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; // Resetiranje 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 brzinu rezultata igreS = 400; // početna brzina zmije} void setup () {Serial.begin (9600); // Inicijalizacija biblioteke strip.begin (); // Slanje podataka. Zadana boja svake točke je 0. Dakle, svaka točka nije osvijetljena na početku. strip.show (); K = 0; // Resetiranje smjera Joystick -a 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); // Postavite boju. Parametar je R G B, raspon 0-255. Boja [1] = slučajno (3, 18); Boja [2] = slučajno (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 (); // proizvodimo hranu} 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) // Kretanje 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) // Kretanje zmije 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; } // Premjestite tijelo zmije pomoću dugmeta} void prikazuje () {for (broj = 0; broj <64; broj ++) // Očistite ekran {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čajno (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. display (); 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 dodirnula tijelo. Ako dodirnete, pređite 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 100ms. speedS = speedS - 50; if (speedS <150) // Donja granica je 200ms. Ako je brzina manja od 200 ms, brzina ostaje 200 ms. brzina S = 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čitavanja:

FreaksBot Bluetooth automobil

Osvijetlite prvu perlu na matrici 8*8 NeoPixels s Arduinom

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

Petak Post proizvoda: Komplet za lemljenje LED ekrana sa frekvencijom spektra

Upotrijebite ElecFreaks Micro: bit Tinker Kit za izradu pametnog svjetla

Preporučuje se: