Tartalomjegyzék:

Space Invaders in Micropython on Micro: bit: 5 lépés
Space Invaders in Micropython on Micro: bit: 5 lépés

Videó: Space Invaders in Micropython on Micro: bit: 5 lépés

Videó: Space Invaders in Micropython on Micro: bit: 5 lépés
Videó: Space Invaders in Micropython on Micro:bit 2024, Július
Anonim
Image
Image

Korábbi cikkeinkben a GameGo -n, a TinkerGen oktatás által kifejlesztett hordozható retro játékkonzolon vizsgáltuk a játékkészítést. Az általunk készített játékok a régi Nintendo játékokra emlékeztettek. Mai cikkünkben visszalépünk egy lépést, az arcade játékok aranykorába. Újra létrehozjuk a Space Invaders játékot a Micropythonban a Micro: bit mikrokontrolleren - és csavarásként a BitPlayer Micro: bit kiterjesztést is használjuk, amely lehetővé teszi a játék kényelmesebb lejátszását.

Mivel ez az oktatóanyag a játék Micropython-ban történő kódolásáról szól, a grafikus programozási oktatóanyagokhoz korábban használt hagyományos, szakaszonkénti szekvencia helyett blokkról-lépésre megyünk át a kódon-áttekintve a fontos funkciókat, osztályokat és a fő hurok. A teljes kódot letöltheti a projekt GitHub adattárából. Csatold fel és kezdjük!

Kellékek

TinkerGen BitPlayer

BBC Micro: bit

1. lépés: Főhurok

Joystick
Joystick

Ebben az oktatóanyagban elég gyakran fogom használni a "módszer" szót. A python metódusa némileg hasonlít a függvényhez, kivéve, ha objektumhoz/osztályokhoz van társítva. Tehát az egyszerűsítés kedvéért "az osztályon belüli függvényként" olvasható. A módszerekről itt olvashat bővebben.

A gombbal lépünk be a fő hurokba

míg nem game_over:

állapot. Belül kapjuk a betolakodók számát, megjelenésük esélyét és a következő szintre jutáshoz szükséges számot a szintek szótárából. Ezután a JoyStick osztálypéldány Listen_Dir példamódszereivel ellenőrizzük a bal-jobb mozgást. Ha az egyik feltétel igaznak minősül, akkor növeljük/csökkentjük a játszható karakterünk x-értékét. [-2, 2] -re korlátozzuk két if feltétellel. Ezután inicializáljuk a DisplayBuffer osztály egy példányát, és ellenőrizzük a "pajzs" vagy "tűzgolyó" gomb megnyomását. A DisplayBuffer.set () módszerrel objektumokat állítunk be a későbbi megjelenítéshez. A pajzs megjelenítéséhez közvetlenül a DisplayBuffer.set () -et használjuk, de a golyók és betolakodók esetén hozzáadjuk őket a listájukhoz, és egyenként beállítjuk () őket a ciklushoz a következő kóddal a későbbi megjelenítéshez a DispBuffer.render () segítségével:

b esetén golyók: b.render (dispBuf) v in vaders: v.render (dispBuf)

Minden betolakodó, golyó és pajzs minden főhurok iteráció után megjelenik a kijelzőn

dispBuf.render ()

A fő ciklus vége előtt ellenőrizzük, hogy a betolakodók golyói elérték -e a képernyő végét, és ha igen, akkor töröljük őket a listájukról.

2. lépés: Joystick

Joystick
Joystick

A BitPlayer könnyen tartható és használható, kéttengelyes joystickjával, például Gameboy vagy PSP vezérlőivel, és további 6 programozható gombot tartalmaz L, R, A, B, C és D felirattal. A magával ragadó és interaktív élmény érdekében a BitPlayer magában foglal egy hangjelzőt, vibrációs motort és egy Grove I2C portot, amely további perifériákat, például OLED kijelzőt csatlakoztathat.

Ehhez a játékhoz csak a joystick bal-jobb lengőgombját használjuk, a BitPlayer gombok használatára vonatkozó teljes példa érdekében megtekintheti a joystick_example.py címet a projekt GitHub tárházában. A JoyStick osztály példányának létrehozásakor ellenőrizzük az X-tengely alapértelmezett olvasását, és tároljuk ezt az értéket önmagunkban. Read_X. Ezután a Listen_Dir függvényben ellenőrizzük, hogy az ettől az alapértelmezett értéktől való eltérés nagyobb -e, mint az érzékenységi változó (próbálja meg saját maga csípni, ha úgy érzi, hogy a JoyStick túl érzékeny), és a True of False értéket adja vissza az észlelt irány szerint.

Nézzünk egy konkrét példát ennek működésére:

Tegyük fel, hogy az alapértelmezett X-tengely leolvasása 0. Ezután, ha jobbra mozgatjuk a joystickot:

New_X = JoyStick_X.read_analog () #New_X = 200

Jobb = New_X - self. Read_X #Right = 200 Bal = self. Read_X - New_X #Left = -200

Aztán amikor ellenőrizzük az irányt:

Pontosság = 150if jobbra> Pontosság: #200> 150 True Get_Rocker = DIR ['R'] elif Bal> Pontosság: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return true else: return hamis

3. lépés: A puffer megjelenítése

Kijelző puffer
Kijelző puffer

A DisplayBuf osztály felelős a LED képernyő vezérléséért. Ez két módszerrel történik: set () és render (). set () metódus megváltoztatja a LED képernyőképpontoknak megfelelő értékeket. Emlékezhet rá, hogy a Micro: bit LED képernyőn a képpontok kifejezhetők karakterláncként vagy listaként - a "00000: 00000: 00000: 00000: 00000" üres képernyő. A "00000: 00000: 00000: 00000: 00100" képernyő az alsó sor közepén gyengén megvilágított pixel.

00000:

00000

:00000

:00000:

00100"

Ezt a jelölést talán könnyebb feldolgozni:)

Tehát a fő ciklus során a DisplayBuf call set () metódusa állít be minden objektumot, amelyet meg kell jeleníteni a képernyőn. Ezután a render () metódust használva megjelenítjük őket egyszerre a képernyőn.

4. lépés: Betolakodók, golyók és a játékos

Betolakodók, golyók és a játékos
Betolakodók, golyók és a játékos

A golyók és a betolakodók a Mover osztályba tartoznak. A Mover osztályú példányok rendelkeznek x, y helyekkel és sebességgel, valamint fényerővel. A Mover osztálynak két példányos metódusa van, a set () és a move (). A set () metódus egyszerűen meghívja a DisplayBuf set () metódust frissített koordinátákkal, hogy elmentse a későbbi LED -mátrixon történő megjelenítéshez. A move () metódus frissíti a példánykoordinátát a példány sebessége szerint - ez hasznos lesz később, amikor a szintek előrehaladtával változtatnunk kell a betolakodók sebességén.

A Class Bullet és az Class Invader a Mover osztály alosztályai. Itt valami öröklődésnek nevezett dolgot használunk. A super () funkcionalitása lehetővé teszi számunkra, hogy meghívjuk a szuperosztály metódusait az alosztályban, anélkül, hogy ismételnünk kellene a kódot.

5. lépés: Tedd magadévá

Legyen saját
Legyen saját

Gratulálunk! Most hozta létre újból a klasszikus Space Invaders játékot Micro: bit-en, néhány klassz hardverrel. Természetesen innen javíthat a játékkódon - például a jelenlegi állapot szerint a játéknak csak egy szintje van - további kihívásokat is hozzáadhat. Továbbá, amint emlékeznek, az eredeti játékban sziklák lebegnek a lejátszó előtt, amelyeket szintén hozzáadhat.

Ha javított változatot készít a játékról, ossza meg az alábbi megjegyzésekben! Ha további információra van szüksége a BitPlayer és más hardverek számára a gyártók és a STEM oktatók számára, látogasson el weboldalunkra, a https://tinkergen.com/ oldalra, és iratkozzon fel hírlevelünkre.

A TinkerGen nemrég létrehozott egy Kickstarter kampányt a MARK (Make A Robot Kit) számára, amely egy robotkészlet a kódolás, a robotika, az AI tanítására!

A hexkcd/micro-vaders eredeti Micropython kódját megváltoztattuk a TinkerGen BitPlayer használatához.

Ajánlott: