תוכן עניינים:

NeoPixels Matrix : משחק נחש: 4 שלבים
NeoPixels Matrix : משחק נחש: 4 שלבים

וִידֵאוֹ: NeoPixels Matrix : משחק נחש: 4 שלבים

וִידֵאוֹ: NeoPixels Matrix : משחק נחש: 4 שלבים
וִידֵאוֹ: LIGHT EFFECT by WS2812B NEOPIXEL ESP32 DIY MATRIX 16x16 ide ARDUINO 2024, נוֹבֶמבֶּר
Anonim
NeoPixels Matrix: משחק נחש
NeoPixels Matrix: משחק נחש

אתה עדיין זוכר את משחק הנחש ששיחקנו על קופסת המשחקים או הנייד שלנו בילדותנו? היום נלמד כיצד להכין משחק נחש עם מטריצה 8*8 NeoPixels. אנו בוחרים ב- 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 בלוח UNO של Arduino, פין חיבור "Y", סיכה A2 "K".

שלב 3: תכנות

P#כולל

#הגדר PIN 2 // סיכת פלט #הגדר MAX_LED 64 // כמות חרוז uint32_t c; int a = 0, מספר; char huan = 0, ci = 0; סימן u חתום 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 charged [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]; מהירות intS = 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); void RANDOM () {A: FX = אקראי (0, 7); FY = אקראי (0, 7); for (int i = 0; i <3+ציון; i ++) // מנע הצגת מזון על גוף הנחש {if (FX == sx && FY == sy ) הלך A; }} void myDelay (ללא זמן חתום int) {// במהלך עיכוב תנועת הנחש, עלינו לעשות משהו כמו נצנצים באוכל ולקרוא את כיוון הג'ויסטיק עבור (int t = 1; t 950 && KEY! = 5) { K = 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]); value = ציון / 10; ערך = ערך * 4; y = 0; עבור (מספר = ערך; מספר <ערך+4; מספר ++) {עבור (תו char vertical = 0; אנכי <8; אנכי ++) {displayscore [y] [vertical] = תו [מספר] [אנכי]; } y ++; } value = ציון % 10; ערך = ערך * 4; עבור (מספר = ערך; מספר <ערך+4; מספר ++) {עבור (תו char vertical = 0; אנכי <8; אנכי ++) {displayscore [y] [vertical] = תו [מספר] [אנכי]; } y ++; } עבור (סימנים לא חתומים אופקי = 0; אופקי <8; אופקי ++) {עבור (סימנים לא חתומים אנכיים = 0; אנכי <8; אנכי ++) {אם (מציג ציון [אופקי] [אנכי] == 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; // המהירות הראשונית של נחש} הגדרת חלל () {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 (עבור [מספר], ג); } strip.show (); // שליחת עיכוב נתונים (2000); אַקרַאִי(); // לייצר מזון} void mobile () {KEY = K; // כל תנועת נחש גורמת לשינוי הכיוון פעם אחת. אם (KEY == 8) // תנועת נחש כלפי מעלה {for (int i = 2 + ציון; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; אם (sy [0] <0) // מעבר לגבול והמשך בצד השני sy [0] = 7; } אחרת אם (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; } אחרת אם (KEY == 4) // תנועת שמאל נחש {עבור (int i = 2 + ציון; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; אם (sx [0] <0) // מעבר אל הגבול והמשך בצד השני sx [0] = 7; } אחרת אם (KEY == 6) // תנועה ימינה של נחש {עבור (int i = 2 + ציון; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; if (sx [0]> 7) // מעבר אל הגבול והמשך בצד השני sx [0] = 0; } // הזז גוף נחש עם כפתור} תצוגות חלל () {עבור (מספר = 0; מספר <64; מספר ++) // נקה את המסך {strip.setPixelColor (מספר, 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 (); // שלח נתונים} לולאת חלל () {mobile (); myDelay (speedS); // בתוך () הוא זמן עיכוב. מציג (); SX = sx [0]; SY = sy [0]; // קבל קואורדינטות של ראש הנחש עבור (int i = 1; i <= 2+ציון; i ++) {if (SX == sx && SY == sy ) gameover (); } // לשפוט אם ראש נחש נגע בגופו. אם נוגעים בך, המשך ל- GameOver. אם (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 (); // שלח נתונים אם (! (ציון % 5)) {// צבר מהירות נחש לפי הציון. כל 5 מאכלים נאכלים, צבר 100 ms. speedS = speedS - 50; if (speedS <150) // הגבול התחתון הוא 200ms. אם המהירות נמוכה מ- 200ms, המהירות נשארת 200ms. מהירות S = 150; }}} // לשפוט אם אוכלים אוכל. אם נחש אכל מזון, אז פלוס ציונים ותחדש מזון באופן אקראי. }

תוצאת הניסוי

שלב 4: תוצאת הניסוי

קריאות יחסיות:

מכונית Bluetooth FreaksBot

הדליקו את החרוז הראשון על מטריקס 8*8 NeoPixels עם Arduino

ניסוי מיקרו: ביט 05: RGB LED - Elecfreaks Mirco: קורס ערכת התחלה של ביט

הודעת מוצר ביום שישי: ערכת הלחמה לתצוגת תדר מוסיקה ספקטרום

השתמש ב- ElecFreaks Micro: bit Tinker Kit ליצירת אור חכם

מוּמלָץ: