
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:47


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

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

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

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

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á

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:
LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn: 7 lépés

LCD Invaders: Space Invaders Like Game 16x2 LCD karakterkijelzőn: Nincs szükség egy legendás „Space Invaders” játék bevezetésére. Ennek a projektnek a legérdekesebb tulajdonsága, hogy szöveges megjelenítést használ a grafikus kimenethez. 8 egyéni karakter megvalósításával érhető el. Letöltheti a teljes Arduino
Micro: bit bit Fények kezdőknek: 5 lépés

Micro: bitek Fények kezdőknek: Ehhez az utasításhoz szüksége lesz egy Micro: Bitre és egy laptopra, nem lehet Mac. Ha Mac -et használ, akkor további lépésekre van szükség, vagy adapterre van szükség az USB -porthoz
Micro: Bit Robot és Joystick programozása: Bitvezérlő MicroPython segítségével: 11 lépés

Mikro: Bit Robot és Joystick programozása: Bitvezérlő MicroPython-szal: A Robocamp 2019 nyári robotikai táborunkban a 10-13 éves fiatalok forrasztják, programozzák és építik a BBC mikro: bit alapú „súlyellenes robotját”, valamint programoznak micro: bit távirányítóként használható. Ha jelenleg a Robocamp -on tartózkodik, síeljen
Space Invaders Clock (költségvetésből!): 6 lépés (képekkel)

Space Invaders Clock (költségvetésből!): Nemrég láttam egy jó konstrukciót GeckoDiode -tól, és azonnal magam akartam megépíteni. Az Instructable a Space Invaders asztali óra, és azt javaslom, hogy nézze meg, miután elolvasta ezt. A projekt szinte kizárólag alkatrészekből épült
Space Invaders csillár ragyog a sötétben Akció: 16 lépés (képekkel)

Space Invaders csillár ragyog a sötétben Akció: 3D modellezés/nyomtatás, lézervágott akril, gyantaöntés, UV -reaktív pigment, LED -ek és néhány egyszerű huzalozás révén stílusos és retro hűvös űrbe betörő csillár vagy lámpa készül. Mellékeltem egy szép trükköt, amellyel íves sarkokat készíthetek lézer cuccból