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

שחזור המשחק הכי קשה בעולם בארדואינו: 7 שלבים
שחזור המשחק הכי קשה בעולם בארדואינו: 7 שלבים

וִידֵאוֹ: שחזור המשחק הכי קשה בעולם בארדואינו: 7 שלבים

וִידֵאוֹ: שחזור המשחק הכי קשה בעולם בארדואינו: 7 שלבים
וִידֵאוֹ: כריש תקף אותי בלב ים?! (הכי מפחיד עד היום!!) 2024, יולי
Anonim
Image
Image

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

  1. אספתי את כל החלקים הדרושים.
  2. חיברתי את החלקים ביחד.
  3. כתבתי שרטוט שהשתמש בג'ויסטיק כדי להזיז את ה LED של השחקנים על פני כל המודולים.
  4. עיצבתי את המכשולים הראשונים והוספתי אותם למערכון כך שהם חיקו את המשחק הכי קשה בעולם.
  5. לאחר מכן הוספתי קוד לאיתור התנגשות עם המכשולים, שיפעיל מחדש את המשחק.
  6. ואז עיצבתי עוד שתי רמות של מכשולים.

שלב 1: כל החלקים

כל החלקים
כל החלקים
כל החלקים
כל החלקים

להלן רשימה של כל החלקים הדרושים לך:

  1. מחבר UNO ו- USB של Arduino:
  2. ארבעה מודולים 8x8: מטריצת LED
  3. ג'ויסטיק:
  4. 10 חוטי זכר לנקבה:

שלב 2: כיצד לחבר את החלקים ל- Arduino

כיצד לחבר את החלקים ל- Arduino
כיצד לחבר את החלקים ל- Arduino

כיצד לחבר את מטריצת ה- LED ל- Arduino

  1. GND עובר ל- GND
  2. VCC עובר ל 5V
  3. DataIn עובר לפין דיגיטלי 12
  4. CLK עובר לסיכה דיגיטלית 11
  5. CS או LOAD עוברים לסיכה דיגיטלית 10

כיצד לחבר את הג'ויסטיק

  1. GND עובר ל- GND
  2. 5V עובר ל 5V
  3. VRx עובר לפין אנלוגי A0
  4. VRy עובר לסיכה אנלוגית A1
  5. SW אינו בשימוש

הסוללה מתחברת לשקע ה -9 וולט כדי להעניק לעוצמה של הארדואינו

שלב 3: תרשים זרימה של התוכנית

תרשים זרימה של התוכנית
תרשים זרימה של התוכנית

האליפסה מציינת את תחילת התוכנית.

השלב הראשון הוא להגדיר את כל המכשולים.

שני השלבים הבאים מצביעים על הגדרת המשתנים והפעלת כל המודולים.

השלב הבא הוא להגדיר את נוריות ה- LED לרמה הראשונה וכל משתנים אחרים.

הבא להציג את הרמה שבה השחקן נמצא כעת.

המעוין מציין את קריאת הג'ויסטיק כדי לראות לאיזה כיוון הוא נדחק.

לאחר מכן העבר את השחקן לכל כיוון שהג'ויסטיק נדחק.

בדוק ובדוק אם השחקן התנגש במכשול.

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

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

שלב 4: תכנות הג'ויסטיק

כמובן שכדי להזיז את הנקודה הקטנה שהיא השחקן, אנחנו צריכים ג'ויסטיק. וכדי לאפשר לג'ויסטיק להזיז את השחקן בפועל עלינו לקודדו ב- Arduino IDE. עליך לכלול את ספריית LedControl שתוכל למצוא על ידי מעבר לתפריט הסקיצות> כלול ספריות> ניהול ספריות, וחפש LedControl. כך נראה הקוד לג'ויסטיק.

#כלול "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // יוצר אובייקט לארבעה מודולים int delaytime = 50; // מהירות המשחק שבו פועל int joystick_RtLt, joystick_UpDn; int player_x = 0; // שחקן מיקום אופקי מ 0 עד 31 int players_y = 3; // מיקום אנכי של שחקנים מ- 0 עד 7 שורה int, עמודה, מודול; הגדרת void () {initialize_modules (); // הפעל והגדר את כל ארבעת המודולים לד} לולאת חלל () {move_player (); // התחל לולאה על ידי בדיקה אם השחקן מעביר עיכוב (זמן עיכוב); } void initialize_modules () {lc.shutdown (0, false); // מפעיל מודול 0 lc.setIntensity (0, 1); lc.shutdown (1, false); // מפעיל מודול 1 lc.setIntensity (1, 1); כיבוי lc. (2, שקר); // מפעיל מודול 2 lc.setIntensity (2, 1); כיבוי lc. (3, שקר); // מפעיל מודול 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // מנקה מודול 0} void move_player () {module = players_x/8; // מגדיר באיזה מודול השחקן נמצא בעמודה = players_x%8; // מגדיר את העמודה שבה השחקן נמצא בשורת המודולים = players_y; lc.setLed (מודול, שורה, עמודה, שקר); // כבה את הלייד במיקום הנוכחי של השחקן joystick_RtLt = analogRead (A0)/204 - 2; // קראו את ג'ויסטיק X ומפה בין 2 ל -2 אם (joystick_RtLt> 0) // כאשר הג'ויסטיק הוא לשחקנים_קס ++ הנכונים; // עבור ימינה אחרת אם (joystick_RtLt 0) // אם הג'ויסטיק נמצא שמאלה ולא בתחילת player_x--; // העבר שמאלה ג'ויסטיק_UpDn = analogRead (A1)/204 - 2; // קראו את ג'ויסטיק ה- Y והמפה בין 2 ל -2 אם (joystick_UpDn 0) // אם הג'ויסטיק למטה והשחקן אינו בתחתית player_y--; // הזז למטה אם (joystick_UpDn> 0 && players_y <7) // אם הג'ויסטיק למעלה והשחקן לא נמצא ב- player_y ++; // למעלה מודול = player_x/8; // הגדר מודול לעמודה עמדה חדשה = שחקנים_ x%8; // הגדר עמודה לשחקנים שורה חדשה = spelers_y; // להגדיר שורה לשחקנים עמדה חדשה lc.setLed (מודול, שורה, עמודה, true); // הדלק led במיקום החדש של השחקן}

עכשיו לאחר שהוספת את הג'ויסטיק בואו נעבוד על המכשול הראשון!

שלב 5: הרמה הראשונה

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

מכשול בתים [רמות] [סצנות] [עמודים] [ROWS] = {// שלוש רמות, 8 סצנות, 8 עמודים, 8 שורות

{{{1, 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}, {0, 0, 1, 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}}, {{1, 1, 1, 1, 1, 0, 0, 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}, {1, 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}}, {{1, 1, 1, 1, 0, 0, 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}, {1, 1, 0, 0, 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}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // first רמה, סצנה רביעית {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 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}}, {{1, 1, 0, 0, 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}, {1, 1, 1, 1, 0, 0, 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}}, {{1, 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}, { 1, 1, 1, 1, 1, 0, 0, 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, 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 }, {1, 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}}, {{0, 1, 1, 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}, {1, 1, 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}}}, הגדרת חלל () {initialize_modules (); // הפעל והגדר את כל ארבעת המודולים של led start_level (0); לולאת חלל () {move_player (); // התחל לולאה על ידי בדיקת אם השחקן זז אם (collision ()) {// לבדוק אם רמת ההתנגשות = 0; // אם ההתנגשות נכונה, אפס את רמת ההתחלה (רמה); // הפעל מחדש את המשחק} else if (delay_count == hinder_delay) {// אם אין התנגשות להזיז מכשול כל מכשיר עיכוב אחר (); delay_count = 0; } אחר delay_count ++; עיכוב (זמן עיכוב); // עיכוב במהירות המשחק}

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

שלב 6: זיהוי התנגשות

שלב זה הוא חלק חשוב נוסף במשחק, בלעדיו לא יהיה אתגר גדול! אתה יכול פשוט לטוות את דרכך במכשולים ללא השלכות! זה לא יהיה כיף נכון? אז בואו נעשה את המשחק מאתגר יותר (והרבה יותר משעשע!) על ידי הוספת קטע זה של התוכנית:

לולאת חלל () {

הזז שחקן(); // התחל לולאה על ידי בדיקת אם השחקן זז אם (collision ()) {// לבדוק אם רמת ההתנגשות = 0; // אם ההתנגשות נכונה, אפס את רמת ההתחלה (רמה); // הפעל מחדש את המשחק} else if (delay_count == hinder_delay) {// אם אין התנגשות להזיז מכשול כל מכשיר עיכוב אחר (); delay_count = 0; } אחר delay_count ++; עיכוב (זמן עיכוב); // עיכוב במהירות המשחק} התנגשות int () {// בדוק אם השחקן פגע במכשול במודול הסצנה = player_x/8; טור = שחקנים_ x%8; שורה = שחקנים_י; if (מודול> 0) if (מכשול [רמה] [סצנה] [טור] [שורה] == 1) // אם מיקום השחקן זהה להחזרת מכשולים (1); // זיהוי התנגשות החזרה אמיתית (0); // אין החזרת התנגשות שקר}

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

שלב 7: שתי הרמות האחרונות

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

מכשול בתים [רמות] [סצנות] [עמודים] [ROWS] = {// רמה שנייה ושלישית, 8 סצנות, 8 עמודות, 8 שורות

{{{1, 0, 0, 0, 0, 0, 0, 1}, // רמה שנייה, סצנה ראשונה {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, // רמה שנייה, סצנה שנייה {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, // רמה שנייה, סצנה שלישית {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // סצינה רביעית ברמה השנייה {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, // רמה שנייה, חמישה סצנה {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // רמה שנייה, סצנה שישית {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, // רמה שנייה, סצנה שביעית {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // סצינה שמינית ברמה השנייה {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, // רמה שלישית, סצנה ראשונה {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה שנייה {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה שלישית {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה רביעית {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה חמישית {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה שישית {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // רמה שלישית, סצנה שביעית {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // רמה שלישית, סצינה שמינית { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}}};

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

מוּמלָץ: