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

משחק ארקייד לד ציקלון: 4 שלבים
משחק ארקייד לד ציקלון: 4 שלבים

וִידֵאוֹ: משחק ארקייד לד ציקלון: 4 שלבים

וִידֵאוֹ: משחק ארקייד לד ציקלון: 4 שלבים
וִידֵאוֹ: ASPHALT 9 LEGENDS CRAZY GIRL DRIVER 2024, סֶפּטֶמבֶּר
Anonim
Image
Image
התקן במתקן
התקן במתקן

מטרת הפרויקט הייתה ליצור משחק פשוט באמצעות Arduino שיהיה אינטראקטיבי ומשעשע לילדים. אני זוכר שמשחק הארקייד של ציקלון היה אחד ממשחקי הארקייד האהובים עלי כשהייתי צעיר יותר, אז החלטתי לשחזר אותו. זהו פרויקט פשוט מאוד המורכב מארדואינו, מחרוזת נוריות ניתנות להתייחסות בנפרד ולחצן לחיצה.

מטרת המשחק היא לעצור את אור הרכיבה כשהוא מגיע לנורית (האדומה) המצוינת. אם יצליח, רמת הקושי תעלה. אם לא הצליח, מחזור האור יופעל מחדש ברמת הקושי הנוכחית.

מדריך זה היה משאב עצום לליבת הקידוד שלי.

שלב 1: אסוף חומרים מתכלים

  • רכיבים עיקריים:

    • ארדואינו (השתמשתי ב- UNO)
    • מחרוזת נוריות ניתנות להתייחסות בנפרד (השתמשתי בקישור)
    • כפתור לחיצה (השתמשתי בקישור)
    • מעגל מודפס (PCB) או קרש לחם
    • ספק כוח (השתמשתי בשני ספקי כוח נפרדים, אתה יכול לברוח עם אחד אם אתה יצירתי)

      • 5V 3A עבור נוריות LED
      • 9V 1A עבור Arduino
  • מִסגֶרֶת:

    • דיור אלקטרוניקה (שיניתי גוף מנורות עץ מרצון טוב)
    • דיור LED (שיניתי את שעון הקיר הסטנדרטי שלך ונקדחנו חורים באמצעות מזהי הדקות כסימון חורים. השתמש בשעון עץ אם אפשר כדי להקל על הקידוח.)
    • בית כפתורים (השתמשתי בצינור PVC במרפק)
  • כלים / חומרים אחרים:

    • חיווט חילוף למעגל שלך
    • נגדים 10K (הנגישה הנפתחת למתג) ו -470 אוהם (לחוט נתונים על נוריות)
    • מקדחה ליצירת חורים המאכלסים את נוריות הלד שלך ואת כל החורים הדרושים במתקן שלך כדי להעביר חוטים
    • מלחם להלחמת המעגל שלך ל- PCB
    • אקדח דבק חם לאבטחת הלדים למתקן שלך
    • סקוטש או אמצעי כלשהו לאבטחת המסגרת יחד
    • אטמים אופציונליים עבור חורים שנקדחו בכדי לחוטים לעבור

שלב 2: העלאת קוד

הקפד להוריד ולהוסיף את ספריית "FastLED"

ליבת הקוד (לולאת חלל) מורכבת משתי מצבים: כפתור לחיצה גבוה (סוף המשחק) וכפתור לחיצה נמוך (משחק). ברגע שהמשתמש לוחץ על הכפתור, כתובת ה- LED שהנורה הופסקה בה מושווה לכתובת הנורית המרכזית. אם הם אינם זהים, כל הנורות מהבהבות פעמיים באדום והרמה הנוכחית מופעלת מחדש. אם הם זהים, הציליון (סקריפט ספריית FastLED) פועל פעמיים, רמת הקושי עולה והמשחק מתחדש. ברגע שהשחקן מנצח את הרמה האחרונה, סילון רץ בפעם השמינית והמשחק מתחיל מחדש ברמה 1.

// משחק ציקלון

#כלול "FastLED.h" // עד 50 #הגדר NUM_LEDS 40 #הגדר CENTER_LED 21 #הגדר DATA_PIN 7 #הגדר LED_TYPE WS2811 #הגדר COLOR_ORDER RGB // טווח 0-64 #הגדר BRIGHTNESS 50 // הגדרת רמות קושי #הגדרה EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // קושי התחלתי בקושי = 1; // הגדירו את מערך ה- leds CRED leds [NUM_LEDS]; // האם השחקן ניצח את הסיבוב הזה? תג זה משמש לפרמטרים של קושי. bool wonThisRound = false; // מיקום התחלה של אור האופניים int LEDaddress = 0; // האם המשחק פועל? בול משחק = נכון; // האם זה הניצחון הראשון? bool CycleEnded = true; // פרטי לחצן const int buttonPin = 9; int buttonState = 0; // אתחל את ספריית ה- LED ואת פונקציות ה- arduino בהגדרת החלל () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (בהירות); pinMode (buttonPin, INPUT); Serial.begin (9600); } // הבשר ותפוחי האדמה // שני מצבים - לולאת חלל משחק וסיום משחק () {// END GAME buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // המשתמש לחץ על הכפתור, והנורית עצרה על הכתובת המנצחת. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: שחור; } leds [CENTER_LED] = CRGB:: אדום; leds [LEDaddress] = CRGB:: ירוק; FastLED.show (); אם (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // מוצא את המרחק בין הלייט המואר לבין הלייד המרכזי אם (diff == 0) {wonThisRound = true; // השחקן ניצח את הרמה בהצלחה אם (קושי! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (קושי == MISSION_IMPOSSIBLE) {עבור (int i = 0; i <8; i ++) {cylon (); } קושי = 0; } להגדיל קושי (); wonThisRound = false; } אחר {עיכוב (1000); עבור (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } כתובת LED = 0; עיכוב (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }}} // משחק אם (משחק) {עבור (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: שחור; // מכבה את כל הנורות} leds [CENTER_LED] = CRGB:: אדום; // קובע את הצבע המוביל במרכז ללדים ירוקים [LEDaddress] = CRGB:: ירוק; // קובע את צבע הוביל גליל לאדום FastLED.show (); // מאתחל מחזור אור LEDaddress ++; // מגדיר את מחזור האור לדלק אחד בכל פעם אם (LEDaddress == NUM_LEDS) {LEDaddress = 0; } עיכוב (getTime (קושי)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}}} // פרמטרי רמה int getTime (int diff) // מחזירה עיכוב זמן עבור בסיס תנועה לד על קושי {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; לשבור; מקרה MEDIUM: timeValue = 80; לשבור; מקרה HARD: timeValue = 60; לשבור; מקרה ON_SPEED: timeValue = 40; לשבור; מקרה SONIC_SPEED: timeValue = 30; לשבור; מקרה ROCKET_SPEED: timeValue = 20; לשבור; מקרה LIGHT_SPEED: timeValue = 13; לשבור; מקרה MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // החזירו את סכום העיכוב} // קושי זכייה הגדילו פרמטרים void להגדיל קושי () {if (קושי! = MISSION_IMPOSSIBLE && wonThisRound) {קושי ++; }}} // אבוד LED הצג הבזק חלל () {fill_solid (leds, NUM_LEDS, CRGB:: אדום); FastLED.show (); עיכוב (500); fill_solid (leds, NUM_LEDS, CRGB:: שחור); FastLED.show (); עיכוב (500); } // זכה LED הצג void fadeall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} voyd cylon () {static uint8_t hue = 0; Serial.print ("x"); // תחילה החלק את הנורית בכיוון אחד עבור (int i = 0; i = 0; i--) {// הגדר את ה- led הבין לנורות אדומות = CHSV (hue ++, 255, 255); // הצג את נוריות ה- FastLED.show (); // עכשיו לאחר שהצגנו את הנורות, אפס את ה- I הוביל לשחור // leds = CRGB:: Black; fadeall (); // המתן מעט לפני שנסתובב ונעשה זאת שוב עיכוב (10); }}

שלב 3: התקן במתקן

התקן במתקן
התקן במתקן
התקן במתקן
התקן במתקן

אינני מתכוון להיכנס לפרטים בסעיף זה. ישנן אלף דרכים שונות ללכת על החלק הזה ואני חושב שאתה צריך להיות יצירתי כדי לגרום לזה להיראות איך שאתה אוהב את זה. עם זאת, השעון היה די נוח לשימוש לדיור הנוריות מכיוון שהיו בו אינדיקטורים דקים שהצלחתי להשתמש בהם כסימון מקדחה. כמו כן, מכסה הזכוכית מאפשר לי להשתמש בזה כשולחן.

הוולקרו היה שימושי מאוד גם לאבטחת גוף המתקן למתקן הדיור האלקטרוניקה. השתמשתי גם בוולקרו בארדואינו. זה עשה את זה מאוד נוח למשוך את Arduino החוצה אם אי פעם רוצה לשנות את הקוד.

מוּמלָץ: