Съдържание:

Матрица на NeoPixels: Игра на змия: 4 стъпки
Матрица на NeoPixels: Игра на змия: 4 стъпки

Видео: Матрица на NeoPixels: Игра на змия: 4 стъпки

Видео: Матрица на NeoPixels: Игра на змия: 4 стъпки
Видео: Игра змейка на Arduino и матрице WS2812B 2024, Юли
Anonim
Матрица на NeoPixels: Игра на змия
Матрица на NeoPixels: Игра на змия

Помните ли още играта на змия, която играехме на нашата игрална кутия или мобилен през нашето детство? Днес ще се научим как да правим игра на змия с 8*8 NeoPixels Matrix. Избираме Arduino uno като контролен център и модул за пробиване на джойстика за управление на змията.

Стъпка 1: Списък на компонентите:

Хардуер:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X Гъвкава 64 RGB LED 8*8 NeoPixels матрица

1 X модул за пробиване на джойстика BKOUT_MD01

3 X Водеща линия

Софтуер:

Arduino IDE

Стъпка 2: Хардуерна връзка

Свържете NeoPixels към щифт D2.

"X" на модула за прекъсване на джойстика, свържете щифт A0 на платката Arduino UNO, "Y" свържете щифт A1, "K" свържете щифт A2.

Стъпка 3: Програмиране

P#включва

#define PIN 2 // Изходен пин #define MAX_LED 64 // Количество на мъниста uint32_t c; int a = 0, число; без знак char huan = 0, ci = 0; беззнаков char u = 40; // Размерът на шрифта на групата думи без знак char x = 0; беззнаков char Color [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},}; беззнаков знак [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 },}; неподписан знак показва резултат [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 strip = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = случаен (0, 7); FY = случаен (0, 7); for (int i = 0; i <3+score; i ++) // Предотвратяване на показването на храна върху змийското тяло {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// По време на периода на забавяне на движението на змията, трябва да направим нещо като блясък на храна и да прочетем посоката на джойстика за (int t = 1; t 950 && KEY! = 5) { К = 8; } иначе ако (yValue <50 && KEY! = 8) {K = 5; } иначе ако (xValue 950 && KEY! = 4) {K = 6; }} // Тук можете да сравните дали посоката на клавиатурата е противоположна на посоката на движение на змията. Ако е обратно, откажете се от клавиатурата. /************************************************* ************************************************** ************************************************ ************************************************** ********/ void gameover () {// След като програмата Gameover спре, натиснете централния бутон, за да рестартирате играта. стойност без знак, y; Цвят [0] = случаен (3, 18); // Задайте цвят. Параметърът е R G B, диапазон 0-255. Цвят [1] = случаен (3, 18); Цвят [2] = случаен (3, 18); c = лента. Цвет (Цвят [1], Цвят [0], Цвят [2]); стойност = оценка / 10; стойност = стойност * 4; y = 0; за (число = стойност; число <стойност+4; число ++) {за (беззнаков символ вертикален = 0; вертикален <8; вертикален ++) {показва резултат [y] [вертикален] = символ [номер] [вертикален]; } y ++; } стойност = резултат % 10; стойност = стойност * 4; за (число = стойност; число <стойност+4; число ++) {за (беззнаков символ вертикален = 0; вертикален <8; вертикален ++) {показва резултат [y] [вертикален] = символ [номер] [вертикален]; } y ++; } for (unsigned char horizontal = 0; horizontal <8; horizontal ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displaycore [horizontal] [vertical] == 1) // Преценете дали светлината е включено. {strip.setPixelColor (светло [хоризонтално] [вертикално], в); } else strip.setPixelColor (светлина [хоризонтално] [вертикално], 0); }} strip.show (); // Изпращане на данни за забавяне (5000); K = 0; // Нулиране на посоката на джойстика 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; // Нулиране на посоката на джойстика 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]); // Зелено Червено Синьо // Задайте цвят за (номер = 0; номер <24; номер ++) {strip.setPixelColor (go [номер], c); } strip.show (); // Изпращане на данни за забавяне (2000); RANDOM (); // Производство на храна} void mobile () {KEY = K; // Всяко движение на змия кара посоката да се променя веднъж. if (KEY == 8) // Змийско движение нагоре {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) // Излезте извън границата и продължете от другата страна sy [0] = 7; } else if (KEY == 5) // Движение на змия надолу {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) // Излезте извън границата и продължете от другата страна 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; if (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; if (sx [0]> 7) // Излезте извън границата и продължете от другата страна sx [0] = 0; } // Преместване на змийско тяло с бутон} void display () {for (number = 0; number <64; number ++) // Изчистване на екрана {strip.setPixelColor (number, 0); } strip.show (); Цвят [0] = 40; // Задаване на цвят. Параметърът е R G B, диапазон 0-255. Цвят [1] = 0; Цвят [2] = 0; c = лента. Цвет (Цвят [1], Цвят [0], Цвят [2]); // Зелено Червено Синьо // Задайте цвят x = светло [FX] [FY]; // Показване на лента за храна.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--) // Покажете змийско тяло {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]; // Показване на лента за змийска глава.setPixelColor (x, c); strip.show (); // Изпращане на данни} void loop () {mobile (); myDelay (speedS); // В рамките на () е времето за забавяне. дисплеи (); SX = sx [0]; SY = sy [0]; // Получаваме координати на змийска глава за (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Преценете дали змийската глава е докоснала тялото й. Ако бъде докоснато, препратете към GameOver. if (SY == FY && SX == FX) {RANDOM (); оценка ++; Цвят [0] = 40; // Задаване на цвят. Параметърът е R G B, диапазон 0-255. Цвят [1] = 0; Цвят [2] = 0; c = лента. Цвет (Цвят [1], Цвят [0], Цвят [2]); // Зелено Червено Синьо // Задайте цвят x = светло [FX] [FY]; // Показване на лента за храна.setPixelColor (x, c); strip.show (); // Изпращане на данни if (! (score % 5)) {// Увеличаване на скоростта на змията според резултата. На всеки 5 изядени храни ускорете 100 мс. speedS = speedS - 50; if (speedS <150) // Долната граница е 200ms. Ако скоростта е по -ниска от 200 мс, скоростта остава 200 мс. скоростS = 150; }} // Преценете дали се яде храна. Ако змията яде храна, тогава добавете резултати и регенерирайте храната на случаен принцип. }

Резултат от експеримента

Стъпка 4: Резултат от експеримента

Относителни показания:

FreaksBot Bluetooth автомобил

Запалете първото мънисто на 8*8 NeoPixels Matrix с Arduino

Микро: битов експеримент 05: RGB LED - Elecfreaks Mirco: битов курс за начален комплект

Петък Продуктова публикация: Комплект за запояване на LED музикален честотен спектър

Използвайте ElecFreaks Micro: bit Tinker Kit, за да направите интелигентна светлина

Препоръчано: