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

פולשי החלל במיקרופיתון במיקרו: ביט: 5 שלבים
פולשי החלל במיקרופיתון במיקרו: ביט: 5 שלבים

וִידֵאוֹ: פולשי החלל במיקרופיתון במיקרו: ביט: 5 שלבים

וִידֵאוֹ: פולשי החלל במיקרופיתון במיקרו: ביט: 5 שלבים
וִידֵאוֹ: פולשי החלל - הסרט 2024, יולי
Anonim
Image
Image

במאמרים הקודמים שלנו חקרנו יצירת משחקים ב- GameGo, קונסולת משחקי רטרו ניידת שפותחה על ידי חינוך TinkerGen. המשחקים שיצרנו הזכירו משחקי נינטנדו ישנים. במאמר של היום, אנחנו הולכים לקחת צעד אחורה, לתור הזהב של משחקי ארקייד. ניצור מחדש את המשחק Space Invaders ב- Micropython ב- Micro: bit microcontroller - ובתור טוויסט, נשתמש גם בתוסף BitPlayer Micro: bit, המאפשר לנו לשחק משחק בצורה נוחה יותר.

מכיוון שהדרכה זו עוסקת בקידוד המשחק במיקרופיתון, במקום רצף שלב אחר שלב מסורתי שהשתמשנו בו בעבר בהדרכות תכנות גרפיות, אנחנו הולכים לעבור על קובץ בלוק אחר בלוק-עוברים על פונקציות חשובות, מחלקות והעיקריות העיקריות. לוּלָאָה. אתה יכול להוריד את הקוד המלא במאגר GitHub של הפרויקט הזה. תתכופף ונתחיל!

אספקה

TinkerGen BitPlayer

BBC Micro: קצת

שלב 1: לולאה ראשית

מַקֵל נוֹעַם
מַקֵל נוֹעַם

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

אנו נכנסים ללולאה הראשית עם

אמנם לא game_over:

מַצָב. בפנים אנו מקבלים את מספר הפולשים, את הסיכוי להופעתם ואת המספר הדרוש כדי להגיע לשלב הבא ממילון רמות. לאחר מכן אנו בודקים אם יש תנועת שמאל-ימין באמצעות שיטות מופע Listen_Dir של מופע מחלקה JoyStick. אם אחד התנאים מוערך כנכון, אנו מגדילים/מפחיתים ערך x של הדמות שלנו הניתנת לשחק. אנו מגבילים אותו ל [-2, 2] עם שני תנאים אם. לאחר מכן אנו מאתחלים מופע של מחלקת DisplayBuffer ובודקים אם לוחצים על כפתור "מגן" או "כדור אש". אנו משתמשים בשיטה DisplayBuffer.set () כדי להגדיר אובייקטים לעיבוד מאוחר יותר. לצורך עיבוד המגן אנו משתמשים DisplayBuffer.set () ישירות, אך עבור כדורים ופולשים אנו מוסיפים אותם לרשימה המתאימה שלהם ומגדירים () אותם אחד אחד ללולאה עם הקוד הבא לטיוח מאוחר יותר עם DispBuffer.render ():

עבור b בכדורים: b.render (dispBuf) עבור v in vaders: v.render (dispBuf)

כל הפולשים, הכדורים והמגן מוצגים בתצוגה פעם אחת בכל איטרציה של לולאה ראשית

dispBuf.render ()

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

שלב 2: ג'ויסטיק

מַקֵל נוֹעַם
מַקֵל נוֹעַם

BitPlayer קל לאחיזה ושימוש, עם ג'ויסטיק דו-ציר כמו בקרי Gameboy או PSP, הוא כולל גם עוד 6 כפתורים הניתנים לתכנות המסומנים כ- L, R, A, B, C ו- D. לחוויה סוחפת ואינטראקטיבית, ה- BitPlayer עצמו כולל זמזם, מנוע רטט ויציאת Grove I2C לחיבור ציוד היקפי נוסף כמו צג OLED.

אנו משתמשים רק בכפתור שמאל-ימין של הג'ויסטיק למשחק זה, לדוגמא מלאה על השימוש בכל לחצני BitPlayer תוכל להציץ ב- joystick_example.py במאגר GitHub של הפרויקט. בעת יצירת המופע של מחלקת JoyStick אנו בודקים קריאת ברירת מחדל של ציר ה- X ושומרים את הערך הזה ב- self. Read_X. ואז בפונקציה Listen_Dir, אנו בודקים אם החריגה מערך ברירת המחדל הגבוהה יותר ממשתנה הרגישות (נסה לשנות את זה בעצמך, אם אתה מרגיש ש- JoyStick רגיש מדי) ומחזירים True of False בהתאם לכיוון שזוהה.

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

נניח שקריאת ברירת המחדל של ציר ה- X שלנו היא 0. ואז, אם נזיז את הג'ויסטיק ימינה:

New_X = JoyStick_X.read_analog () #חדש_X = 200

ימין = New_X - self. Read_X #Right = 200 שמאל = self. Read_X - New_X #Left = -200

ואז כשאנחנו בודקים כיוון:

Precision = 150if Right> Precision: #200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return נכון אחר: החזר שקר

שלב 3: מאגר תצוגה

מאגר תצוגה
מאגר תצוגה

מחלקת DisplayBuf אחראית על השליטה במסך ה- LED. זה נעשה באמצעות שתי שיטות, set () ו- render (). שיטת set () משנה את הערכים המתאימים לפיקסלי מסך LED. אתה אולי זוכר שפיקסלים במסך LED Micro: bit יכולים להתבטא כמחרוזת או כרשימה - "00000: 00000: 00000: 00000: 00000" הוא מסך ריק. "00000: 00000: 00000: 00000: 00100" הוא מסך עם פיקסל עמום במרכז השורה התחתונה.

00000:

00000

:00000

:00000:

00100"

סימון זה עשוי להיות קל יותר לעיבוד:)

אז מה שאנחנו עושים במהלך הלולאה הראשית היא שיטת setBet () של DisplayBuf כדי להגדיר את כל האובייקטים שצריך להציג על המסך. לאחר מכן אנו משתמשים בשיטת render () כדי להראות את כולם על המסך בו זמנית.

שלב 4: פולשים, כדורים והשחקן

פולשים, כדורים והשחקן
פולשים, כדורים והשחקן

כדורים ופולשים שייכים למעמד Mover. למופעי כיתות Mover יש את המיקומים שלהם x, y ומהירות, כמו גם בהירות. בכיתה Mover יש שתי שיטות מופע, set () ו- move (). שיטת set () פשוט קוראת לשיטת DisplayBuf set () עם קואורדינטות מעודכנות לשמירה לצורך עיבוד מאוחר יותר על מטריצת LED. עדכון שיטת move () מתאם תיאום מופע בהתאם למהירות המופע - זה שימושי מאוחר יותר, כאשר עלינו לשנות את מהירות הפולשים ככל שהרמות מתקדמות.

Bullet Class ו- class Invader הם תת -סוגים של כיתת Mover. כאן אנו משתמשים במשהו שנקרא ירושה. הפונקציונליות של super () מאפשרת לנו לקרוא לשיטות של מחלקת העל בתת -מחלקה, ללא צורך לחזור על הקוד.

שלב 5: הפוך אותו לשלך

הפוך זאת לשלך
הפוך זאת לשלך

מזל טוב! הרגע יצרת מחדש את המשחק Space Invaders הקלאסי ב- Micro: bit עם קצת חומרת משחק מגניבה. כמובן שתוכל לשפר את קוד המשחק מכאן - לדוגמה, נכון לעכשיו, למשחק יש רק רמה אחת - תוכל להוסיף קוד מאתגר יותר. כמו כן, כזכור, במשחק המקורי יש סלעים שצפים מול השחקן, אותם תוכלו להוסיף גם כן.

אם אכן יצרת גרסה משופרת של המשחק, שתף אותה בתגובות למטה! למידע נוסף על BitPlayer וחומרה אחרת ליצרנים ולמחנכי STEM, בקר באתר האינטרנט שלנו, https://tinkergen.com/ והירשם לניוזלטר שלנו.

TinkerGen יצרה לאחרונה קמפיין Kickstarter עבור MARK (Make A Robot Kit), ערכת רובוט ללימוד קידוד, רובוטיקה, AI!

הקוד המקורי של Micropython מ- hexkcd/micro-vaders השתנה לעבודה עם TinkerGen BitPlayer.

מוּמלָץ: