Mündəricat:
- Təchizat
- Addım 1: Əsas Döngə
- Addım 2: Joystick
- Addım 3: Ekran Tamponu
- Addım 4: İşğalçılar, Güllələr və Oyunçu
- Addım 5: Bunu Özünüzə Edin
Video: Micropython -da Micro: Space Invaders: bit: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Əvvəlki məqalələrimizdə TinkerGen təhsili tərəfindən hazırlanmış portativ retro oyun konsolu olan GameGo -da oyun qurmağı araşdırdıq. Etdiyimiz oyunlar köhnə Nintendo oyunlarını xatırladırdı. Bugünkü məqaləmizdə, arxada oyunların qızıl çağına bir addım atacağıq. Micropython -da Micro: bit microcontroller -də Space Invaders oyununu yenidən yaradacağıq və bir bükülmə olaraq, oyunu daha rahat oynamağımıza imkan verən BitPlayer Micro: bit uzantısını da istifadə edəcəyik.
Bu təlimat, oyunun Micropython-da kodlaşdırılması ilə əlaqədar olduğundan, əvvəllər qrafik proqramlaşdırma dərsləri üçün istifadə etdiyimiz ənənəvi mərhələ-mərhələ ardıcıllığı əvəzinə, blok bloku üzərindən keçəcəyik-vacib funksiyaları, sinifləri və əsas döngə. Tam kodu bu layihənin GitHub deposunda yükləyə bilərsiniz. Qaldırın və başlayaq!
Təchizat
TinkerGen BitPlayer
BBC Micro: bit
Addım 1: Əsas Döngə
Bu dərslikdə "metod" sözünü tez -tez istifadə edəcəyəm. Pythonda bir üsul, funksiya ilə bir qədər oxşardır, ancaq obyekt/siniflərlə əlaqəli deyil. Beləliklə, sadələşdirmək üçün "sinif daxilində bir funksiya" olaraq oxuya bilərsiniz. Metodlar haqqında daha çox oxuya bilərsiniz.
Əsas dövrə ilə daxil oluruq
game_over olmadıqda:
şərt. İçəridə işğalçıların sayını, onların görünmə şansını və səviyyələr lüğətindən növbəti səviyyəyə çıxmaq üçün lazım olan sayını alırıq. Sonra JoyStick sinif nümunəsinin Listen_Dir nümunə üsulları ilə sol-sağ hərəkəti yoxlayırıq. Şərtlərdən biri Doğru olaraq qiymətləndirilirsə, oynanabilir xarakterimizin x dəyərini artırırıq/azaldırıq. Bunu iki şərtlə [-2, 2] ilə məhdudlaşdırırıq. Sonra DisplayBuffer sinifinin bir nümunəsini işə salırıq və "qalxan" və ya "atəş gülləsi" düymələrinin sıxılmasını yoxlayırıq. Daha sonra göstərmək üçün obyektləri təyin etmək üçün DisplayBuffer.set () metodundan istifadə edirik. Qalxanı göstərmək üçün birbaşa DisplayBuffer.set () istifadə edirik, lakin güllə və basqınçılar üçün onları müvafiq siyahıya əlavə edirik və DispBuffer.render () ilə daha sonra göstərilməsi üçün aşağıdakı kodu olan loop üçün bir -bir qururuq:
güllələrdə b üçün: b.render (dispBuf) v vaders üçün: v.render (dispBuf)
İşğalçıların, güllələrin və qalxanların hamısı hər bir əsas döngə iterasiyası ilə bir dəfə ekranda göstərilir
dispBuf.render ()
Əsas döngənin sonundan əvvəl, işğalçıların güllələrindən birinin ekranın sonuna çatıb çatmadığını yoxlayırıq və əgər varsa, onları müvafiq siyahılarından silirik.
Addım 2: Joystick
BitPlayer-in tutulması və istifadəsi asandır, Gameboy və ya PSP nəzarətçiləri kimi 2 oxlu joystick ilə, L, R, A, B, C və D kimi etiketlənmiş başqa 6 proqramlaşdırıla bilən düyməni də ehtiva edir. OLED ekran kimi əlavə qurğuları birləşdirmək üçün bir siqnal, bir titrəmə mühərriki və bir Grove I2C portu var.
Bu oyun üçün yalnız joystickin sol-sağ rokçusundan istifadə edirik, məsələn, bütün BitPlayer düymələrinin istifadəsi ilə əlaqədar olaraq, bu layihənin GitHub deposunda joystick_example.py-ə baxa bilərsiniz. JoyStick sinifinin nümunəsini yaratarkən, X oxunun standart oxunuşunu yoxlayırıq və bu dəyəri self. Read_X-də saxlayırıq. Sonra Listen_Dir funksiyasında, bu standart dəyərdən sapmanın həssaslıq dəyişənindən daha yüksək olub olmadığını yoxlayırıq (JoyStick -in çox həssas olduğunu düşünürsünüzsə özünüz düzəltməyə çalışın) və aşkar edilən istiqamətə uyğun olaraq Doğru Yalanını qaytarın.
Bunun necə işlədiyinə dair konkret nümunəyə nəzər salaq:
Varsayılan X oxu oxumağımızın 0 olduğunu söyləyək. O zaman Joystick'i sağa hərəkət etdirsək:
New_X = JoyStick_X.read_analog () #New_X = 200
Sağ = Yeni_X - özünü. Oxu_X #Sağ = 200 Sol = özünü. Oxu_X - Yeni_X #Sol = -200
Sonra istiqaməti yoxladıqda:
Precision = 150if Sağ> Dəqiqlik: #200> 150 True Get_Rocker = DIR ['R'] elif Sol> Precision: #-200> 150 False Get_Rocker = DIR ['L'] başqa: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: qayıt Doğru başqa: yalan qaytar
Addım 3: Ekran Tamponu
DisplayBuf sinfi LED ekranı idarə etməkdən məsuldur. Set () və render () iki üsulla aparılır. set () metodu LED ekran piksellərinə uyğun olan dəyərləri dəyişir. Yadınızdadırsa, Micro: bit LED ekranındakı piksellər simli və ya siyahı şəklində ifadə edilə bilər - "00000: 00000: 00000: 00000: 00000" boş bir ekrandır. "00000: 00000: 00000: 00000: 00100", alt sıranın ortasında zəif işıqlı piksel olan bir ekrandır.
00000:
00000
:00000
:00000:
00100"
Bu qeydin işlənməsi daha asan ola bilər:)
Beləliklə, əsas döngə zamanı etdiyimiz şey, DisplayBuf -un ekranda göstərilməsi lazım olan bütün obyektlərimizi təyin etmək üçün call set () metodudur. Sonra hamısını eyni anda ekranda göstərmək üçün render () metodundan istifadə edirik.
Addım 4: İşğalçılar, Güllələr və Oyunçu
Güllə və İşğalçılar Mover sinfinə aiddir. Mover sinif nümunələrinin x, y yerləri və sürəti, eləcə də parlaqlığı var. Mover sinifinin set () və move () iki nümunə metodu var. set () metodu, LED matrisində daha sonra göstərilməsi üçün saxlamaq üçün yenilənmiş koordinatları olan DisplayBuf set () metodunu çağırır. move () metodu nümunə sürətinə görə nümunə koordinatını yeniləyir - bu, səviyyələr irəlilədikcə işğalçıların sürətini dəyişdirməyimiz lazım olduqda daha sonra faydalıdır.
Class Bullet və Class Invader, Mover sinifinin alt sinifləridir. Burada miras deyilən bir şeydən istifadə edirik. Super () funksionallığı, kodu təkrarlamağa ehtiyac olmadan, alt sinifdə super sinif metodlarını çağırmağa imkan verir.
Addım 5: Bunu Özünüzə Edin
Təbrik edirik! Klassik Space Invaders oyununu Micro-da yenidən yaratdınız: bəzi sərin oyun avadanlığı ilə. Əlbəttə ki, oyun kodunu buradan təkmilləşdirə bilərsiniz - məsələn, indiyə qədər oyunun yalnız bir səviyyəsi var - daha çətin olanları əlavə edə bilərsiniz. Həm də xatırlaya biləcəyiniz kimi, orijinal oyunda oyunçunun qarşısında üzən qayalar var ki, bunları da əlavə edə bilərsiniz.
Oyunun təkmilləşdirilmiş bir versiyasını edirsinizsə, aşağıdakı şərhlərdə paylaşın! BitPlayer və istehsalçılar və STEM müəllimləri üçün digər avadanlıqlar haqqında daha ətraflı məlumat üçün https://tinkergen.com/ saytımızı ziyarət edin və bülletenimizə abunə olun.
TinkerGen, bu yaxınlarda kodlaşdırma, robototexnika, AI öyrətmək üçün bir robot dəsti olan MARK (Make A Robot Kit) üçün bir Kickstarter kampaniyası hazırladı!
Hexkcd/micro-vaders-dən orijinal Micropython kodu TinkerGen BitPlayer ilə işləmək üçün dəyişdirildi.
Tövsiyə:
Moto istifadə edərək Servo Motorları necə idarə etmək olar: bit Micro: bit: 7 addım (şəkillərlə)
Moto: bit ilə Micro: bit istifadə edərək Servo Motorları Necə Çalışdırmaq olar: Micro: bit funksiyasını genişləndirməyin bir yolu, SparkFun Electronics tərəfindən moto: bit adlı bir lövhə istifadə etməkdir (təxminən 15-20 dollar). Mürəkkəb görünür və bir çox xüsusiyyətə malikdir, ancaq servo mühərrikləri işə salmaq çətin deyil. Moto: bit imkan verir
Mikro Proqramlaşdırma: Bit Robot və Joystick: MicroPython ilə Bit Nəzarətçisi: 11 addım
Bir Mikro Proqramlaşdırma: Bit Robot və Joystick: MicroPython ilə Bit Nəzarətçisi: Robocamp 2019 üçün, yay robototexnika düşərgəmiz, 10-13 yaş arası gənclər BBC mikro: bit əsaslı 'antweight robot' lehimləyir, proqramlaşdırır və qurur. bir mikro: bit uzaqdan idarəetmə vasitəsi olaraq istifadə olunur. Hal -hazırda Robocamp -da olsanız, xizək sürün
Pimoroni Enviro ilə İşıq və Rəng Ölçmələri: Micro üçün bit: bit: 5 Addım
Pimoroni Enviro ilə İşıq və Rəng Ölçümləri: Micro: bit üçün bit: Mən əvvəllər işıq və rəng ölçmələrinə imkan verən bəzi qurğular üzərində işləyirdim və bu ölçülərin arxasındakı nəzəriyyə ilə əlaqədar burada və burada göstərişlər tapa bilərsiniz. bu yaxınlarda mühiti buraxdı: bit, m üçün bir əlavə
Space Invaders Saatı (Büdcədə!): 6 Addım (Şəkillərlə)
Space Invaders Clock (Büdcədə!): Bu yaxınlarda GeckoDiode tərəfindən sərin bir bina gördüm və dərhal özüm qurmaq istədim. Instructable Space Invaders Masaüstü Saatıdır və bunu oxuduqdan sonra nəzərdən keçirməyinizi məsləhət görürəm. Layihə demək olar ki, yalnız hissələrdən hazırlanmışdır
Qaranlıqda parlayan Space Invaders Avizəsi: 16 addım (şəkillərlə)
Qaranlıqda Glow ilə Space İşğalçıları Avizesi: Yüksək üslub və retro sərin məkan istilaçıları çilçıraq və ya lampa etmək üçün 3D modelləşdirmə/çap, lazerlə kəsilmiş akril, qatran tökmə, UV reaktiv piqment, LEDlər və bəzi sadə naqillərdən istifadə edin. Lazer kublarından əyri künclər düzəltmək üçün gözəl bir hiylə daxil etdim