Mündəricat:

Micropython -da Micro: Space Invaders: bit: 5 addım
Micropython -da Micro: Space Invaders: bit: 5 addım

Video: Micropython -da Micro: Space Invaders: bit: 5 addım

Video: Micropython -da Micro: Space Invaders: bit: 5 addım
Video: Space Invaders in Micropython on Micro:bit 2024, Noyabr
Anonim
Image
Image

Ə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ə

Joystick
Joystick

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

Joystick
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

Ekran Buferi
Ekran Buferi

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

İşğalçılar, güllələr və oyunçu
İşğ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

Bunu Özünüzə Edin
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ə: