Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
Meie varasemates artiklites oleme uurinud mängude tegemist GameGo, kaasaskantava retro mängukonsooli poolt, mille on välja töötanud TinkerGen haridus. Meie tehtud mängud meenutasid vanu Nintendo mänge. Tänases artiklis astume sammu tagasi, arkaadmängude kuldaega. Loome uuesti Space Invaders mängu Micropythonis Micro: bit mikrokontrolleril - ja keerdkäiguna kasutame ka BitPlayer Micro: bit laiendit, mis võimaldab meil mängu mugavamalt mängida.
Kuna see õpetus käsitleb mängu kodeerimist Micropythonis, siis traditsioonilise järkjärgulise järjestuse asemel, mida varem graafilise programmeerimise õpetuste jaoks kasutasime, läheme koodiplokkide kaupa üle-vaatame üle olulised funktsioonid, klassid ja peamised silmus. Kogu koodi saate alla laadida selle projekti GitHubi hoidlast. Pange kinni ja alustame!
Tarvikud
TinkerGen BitPlayer
BBC Micro: natuke
Samm: põhisilmus
Selles õpetuses kasutan sõna "meetod" üsna sageli. Pythoni meetod sarnaneb mõnevõrra funktsiooniga, välja arvatud juhul, kui see on seotud objekti/klassidega. Niisiis, lihtsustamiseks võite seda lugeda kui funktsiooni klassi sees. Meetodite kohta saate rohkem lugeda siit.
Me siseneme põhiahelasse nupuga
kuigi mitte game_over:
seisukorras. Toas saame sissetungijate arvu, nende ilmumise võimaluse ja tasemete sõnastikust järgmisele tasemele jõudmiseks vajaliku arvu. Järgmisena kontrollime vasakpoolse parema liikumist klassi eksemplari JoyStick Listen_Dir eksemplari meetoditega. Kui üks tingimustest on tõene, suurendame/vähendame oma mängitava tegelase x-väärtust. Me piirame seda [-2, 2] kahe tingimusega. Seejärel lähtestame DisplayBufferi klassi eksemplari ja kontrollime, kas nupp "kilp" või "tulekahju" vajutab. Objektide seadistamiseks hilisemaks renderdamiseks kasutame meetodit DisplayBuffer.set (). Kilbi renderdamiseks kasutame otse DisplayBuffer.set (), kuid täppide ja sissetungijate jaoks lisame need nende vastavasse loendisse ja seadistame () ükshaaval silmuseks koos järgmise koodiga, et hiljem DispBuffer.render () abil renderdada:
b täpid: b.render (dispBuf) v in vaders: v.render (dispBuf)
Kõik sissetungijad, kuulid ja kilp kuvatakse ekraanil iga kord, kui kordatakse põhisilmus
dispBuf.render ()
Enne põhiahela lõppu kontrollime, kas mõni sissetungijate kuulidest on jõudnud ekraani lõppu, ja kui on, siis kustutame need nende vastavatest loenditest.
2. samm: juhtnupp
BitPlayerit on lihtne käes hoida ja kasutada. Kaheteljelise juhthoovaga, nagu Gameboy või PSP kontrollerid, sisaldab see veel 6 programmeeritavat nuppu, mis on tähistatud tähega L, R, A, B, C ja D. Ümbritseva ja interaktiivse kogemuse saamiseks pakub BitPlayer ise sisaldab suminat, vibratsioonimootorit ja Grove I2C porti, et ühendada täiendavaid välisseadmeid nagu OLED -ekraan.
Kasutame selle mängu jaoks ainult juhthoova vasakut-paremat klahvi, kõigi BitPlayeri nuppude kasutamise täieliku näite jaoks saate vaadata selle projekti GitHubi hoidlas olevat joystick_example.py. JoySticki klassi eksemplari loomisel kontrollime X-telje vaikelugemist ja salvestame selle väärtuse ise. Lugege_X. Seejärel kontrollime funktsioonis Listen_Dir, kas kõrvalekalle sellest vaikeväärtusest on tundlikkusmuutujast suurem (proovige seda ise muuta, kui tunnete, et JoyStick on liiga tundlik), ja tagastame True of False vastavalt tuvastatud suunale.
Vaatame konkreetset näidet selle toimimise kohta:
Oletame, et meie X-telje vaikeväärtus on 0. Siis, kui liigutame juhtkangi paremale:
New_X = JoyStick_X.read_analog () #New_X = 200
Parem = Uus_X - ise. Lugege_X #paremal = 200 Vasakul = ise. Lugege_X - Uus_X #Vasak = -200
Siis kui suunda kontrollime:
Täpsus = 150if paremal> Täpsus: #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 True else: return False
Samm: kuvage puhver
DisplayBuf klass vastutab LED -ekraani juhtimise eest. Seda tehakse kahe meetodi abil set () ja render (). set () meetod muudab LED -ekraani pikslitele vastavaid väärtusi. Mäletate, et Micro: bit LED -ekraani piksleid saab väljendada stringina või loendina - "00000: 00000: 00000: 00000: 00000" on tühi ekraan. "00000: 00000: 00000: 00000: 00100" on ekraan, mille alumise rea keskel on hämaralt valgustatud piksel.
00000:
00000
:00000
:00000:
00100"
Seda märget oleks ehk lihtsam töödelda:)
Niisiis, mida me põhiahela ajal teeme, on DisplayBufi call set () meetod, et määrata kõik meie objektid, mida tuleb ekraanil kuvada. Seejärel kasutame meetodit render (), et neid kõiki korraga ekraanil näidata.
4. samm: sissetungijad, täpid ja mängija
Kuulid ja sissetungijad kuuluvad Moveri klassi. Mover klassi eksemplaridel on oma x, y asukohad ja kiirus ning heledus. Mover klassil on kaks eksemplari meetodit set () ja move (). set () meetod lihtsalt kutsub DisplayBuf set () meetodi uuendatud koordinaatidega, et salvestada LED -maatriksil edasiseks renderdamiseks. move () meetod uuendab eksemplari koordinaate vastavalt eksemplari kiirusele - see tuleb kasuks hiljem, kui peame taseme edenedes sissetungijate kiirust muutma.
Class Bullet ja class Invader on Mover klassi alamklassid. Siin kasutame midagi, mida nimetatakse pärandiks. Super () funktsionaalsus võimaldab meil kutsuda alamklassi superklassi meetodeid, ilma et oleks vaja koodi korrata.
Samm: tehke see omaks
Palju õnne! Olete äsja loonud Micro: bitil klassikalise Space Invaders mängu koos mõne laheda mänguriistvaraga. Loomulikult saate siit mängu koodi parandada - näiteks praeguse seisuga on mängul ainult üks tase - saate lisada keerulisemaid. Samuti, nagu mäletate, on algses mängus mängija ees hõljuvad kivid, mida saate ka lisada.
Kui teete mängust täiustatud versiooni, jagage seda allolevates kommentaarides! Lisateabe saamiseks BitPlayeri ja muu riistvara kohta tegijatele ja STEM -i koolitajatele külastage meie veebisaiti https://tinkergen.com/ ja tellige meie uudiskiri.
TinkerGen lõi hiljuti Kickstarteri kampaania MARK (Make A Robot Kit) jaoks, robotikomplekt kodeerimise, robootika ja tehisintellekti õpetamiseks!
Hexkcd/mikro-vadersi algne Micropython-kood muudeti nii, et see töötaks TinkerGen BitPlayeriga.
Soovitan:
Servomootorite käitamine Moto: bit Micro: bit: 7 sammu (piltidega)
Servomootorite käitamine Moto: bit abil Micro: bit: Üks võimalus micro: bit funktsionaalsuse laiendamiseks on kasutada tahvlit nimega moto: bit SparkFun Electronics (umbes 15-20 dollarit). See tundub keeruline ja sellel on palju funktsioone, kuid servomootoreid pole sellest raske käivitada. Moto: bit võimaldab teil
Micro: Bot - Micro: Bit: 20 sammu
Micro: Bot - Micro: Bit: Ehita endale Micro: Bot! See on mikro: bitiga juhitav robot, millel on sisseehitatud sonar autonoomseks sõiduks või kui teil on kaks Micro: bitti, siis raadio teel juhitav sõit
LCD sissetungijad: Space Invaders Like Game 16x2 LCD tähemärkide ekraanil: 7 sammu
LCD sissetungijad: Space Invaders Like Game 16x2 LCD tähemärkide ekraanil: pole vaja tutvustada legendaarset “Space Invaders” mängu. Selle projekti kõige huvitavam omadus on see, et graafiliseks väljundiks kasutatakse tekstiekraani. See saavutatakse 8 kohandatud tähemärgi rakendamisega. Võite alla laadida täieliku Arduino
Space Invaders Clock (eelarvega!): 6 sammu (koos piltidega)
Space Invaders Clock (eelarvega!): Hiljuti nägin GeckoDiode'i lahedat ehitust ja tahtsin seda kohe ise ehitada. Instructable on Space Invaders Desktop Clock ja ma soovitan teil seda pärast selle lugemist vaadata. Projekt ehitati peaaegu ainult osadest, mis on hangitud
Space Invaders lühter säraga pimedas: 16 sammu (piltidega)
Space Invaders lühter säraga pimedas: kasutage 3D -modelleerimist/printimist, laserlõigatud akrüüli, vaigu valamist, UV -kiirgusega reageerivat pigmenti, LED -e ja mõnda lihtsat juhtmestikku, et teha kõrge stiiliga ja retrolahedaid kosmosesse tungivaid lühtreid või lampe. Olen lisanud toreda nipi, kuidas laserkiust kumeraid nurki teha