Sisällysluettelo:

Space Invaders in Micropython on Micro: bit: 5 askelta
Space Invaders in Micropython on Micro: bit: 5 askelta

Video: Space Invaders in Micropython on Micro: bit: 5 askelta

Video: Space Invaders in Micropython on Micro: bit: 5 askelta
Video: Space Invaders in Micropython on Micro:bit 2024, Heinäkuu
Anonim
Image
Image

Aikaisemmissa artikkeleissamme olemme tutkineet pelien tekemistä GameGolla, joka on TinkerGen -koulutuksen kehittämä kannettava retro -pelikonsoli. Pelit, jotka teimme, muistuttivat vanhoja Nintendo -pelejä. Tämän päivän artikkelissa aiomme ottaa askeleen taaksepäin arcade -pelien kulta -aikaan. Luomme Space Invaders -pelin uudelleen Micropythonissa Micro: bit -mikrokontrollerilla - ja käänteenä käytämme myös BitPlayer Micro: bit -laajennusta, jonka avulla voimme pelata peliä helpommin.

Koska tämä opetusohjelma koskee pelin koodaamista Micropythonissa, menemme perinteisen vaiheittaisen järjestyksen sijaan, jota käytimme aiemmin graafisen ohjelmoinnin opetusohjelmissa, menemme koodilohkon yli lohkolta-käymme läpi tärkeät toiminnot, luokat ja tärkeimmät silmukka. Voit ladata koko koodin tämän projektin GitHub -arkistosta. Solki kiinni ja aloitetaan!

Tarvikkeet

TinkerGen BitPlayer

BBC Micro: bitti

Vaihe 1: Pääsilmukka

Ohjaussauva
Ohjaussauva

Tässä opetusohjelmassa käytän sanaa "method" melko usein. Pythonin menetelmä on jonkin verran samanlainen kuin funktio, paitsi että se liittyy objektiin/luokkiin. Joten yksinkertaisuuden vuoksi voit lukea sen "luokan funktiona". Voit lukea lisää menetelmistä täältä.

Siirrymme pääsilmukkaan

kun ei game_over:

kunto. Sisältä saamme hyökkääjien määrän, mahdollisuuden esiintyä ja tarvittavan määrän päästäksesi seuraavalle tasolle tasojen sanakirjasta. Seuraavaksi tarkistamme vasemmalta oikealle liikkumisen Listen_Dir-ilmentymän menetelmillä luokan instanssissa JoyStick. Jos jokin ehdoista on tosi, lisäämme/vähennämme pelattavan hahmon x-arvoa. Rajoitamme sen arvoon [-2, 2] kahdella ehdolla. Alustamme sitten DisplayBuffer -luokan ilmentymän ja tarkistamme, onko "kilpi" tai "palomerkki" painettu. Käytämme DisplayBuffer.set () -menetelmää objektien asettamiseen myöhempää renderointia varten. Kilven renderointiin käytämme suoraan DisplayBuffer.set (): tä, mutta luoteja ja hyökkääjiä varten lisäämme ne omalle listalleen ja asetamme () ne yksitellen silmukkaan seuraavalla koodilla myöhempää hahmontamista varten DispBuffer.render ():

b -luoteissa: b.render (dispBuf) v -vaders: v.render (dispBuf)

Kaikki hyökkääjät, luodit ja kilpi näytetään näytöllä jokaisen pääsilmukan iteroinnin jälkeen

dispBuf.render ()

Ennen pääsilmukan loppua tarkistamme, onko jokin hyökkääjien luoteista saavuttanut näytön lopun, ja jos ovat, poistamme ne niiden vastaavista luetteloista.

Vaihe 2: Ohjaussauva

Ohjaussauva
Ohjaussauva

BitPlayer on helppo pitää ja käyttää, ja siinä on 2-akselinen ohjaussauva, kuten Gameboy- tai PSP-ohjaimet, ja siinä on myös kuusi muuta ohjelmoitavaa painiketta, jotka on merkitty L, R, A, B, C ja D. Siinä on summeri, tärinämoottori ja Grove I2C -portti, jolla voidaan liittää muita oheislaitteita, kuten OLED -näyttö.

Käytämme pelissä vain ohjaussauvan vasenta ja oikeaa keinukytkintä. Täydellistä esimerkkiä kaikkien BitPlayer-painikkeiden käytöstä voit katsoa joystick_example.py tämän projektin GitHub-arkistosta. Luodessamme JoyStick-luokan ilmentymää tarkistamme X-akselin oletuslukeman ja tallennamme arvon itse. Read_X. Sitten funktiossa Listen_Dir tarkistamme, onko poikkeama oletusarvosta suurempi kuin herkkyysmuuttuja (kokeile säätää sitä itse, jos sinusta tuntuu, että JoyStick on liian herkkä), ja palautamme True of False havaitun suunnan mukaan.

Katsotaanpa konkreettista esimerkkiä tämän toiminnasta:

Oletetaan, että oletusarvoinen X-akselin lukema on 0. Jos siirrämme ohjaussauvaa oikealle:

New_X = JoyStick_X.read_analog () #New_X = 200

Oikea = Uusi_X - itse. Lue_X #Oikea = 200 Vasen = itse. Lue_X - Uusi_X #Vasen = -200

Sitten kun tarkistamme suunnan:

Tarkkuus = 150if Oikea> Tarkkuus: #200> 150 True Get_Rocker = DIR ['R'] elif Vasen> Tarkkuus: #-200> 150 False Get_Rocker = DIR ['L'] muu: Get_Rocker = DIR ['NONE'] jos Dir == Get_Rocker: return True else: return False

Vaihe 3: Näytä puskuri

Näyttöpuskuri
Näyttöpuskuri

DisplayBuf -luokka vastaa LED -näytön ohjaamisesta. Se tehdään kahdella menetelmällä, set () ja render (). set () -menetelmä muuttaa LED -näytön pikseleitä vastaavia arvoja. Saatat muistaa, että Micro: bit LED -näytön pikselit voidaan ilmaista merkkijonona tai luettelona - "00000: 00000: 00000: 00000: 00000" on tyhjä näyttö. "00000: 00000: 00000: 00000: 00100" on näyttö, jossa on heikosti valaistu pikseli alarivin keskellä.

00000:

00000

:00000

:00000:

00100"

Tämä merkintä voi olla helpompi käsitellä:)

Joten, mitä teemme pääsilmukan aikana, on DisplayBufin call set () -menetelmä asettaa kaikki kohteet, jotka on näytettävä näytöllä. Sitten käytämme render () -menetelmää näyttääksemme ne kaikki näytöllä samanaikaisesti.

Vaihe 4: Hyökkääjät, luodit ja pelaaja

Hyökkääjät, luodit ja pelaaja
Hyökkääjät, luodit ja pelaaja

Luodit ja hyökkääjät kuuluvat Mover -luokkaan. Mover -luokan instansseilla on x-, y -sijainnit ja nopeus sekä kirkkaus. Mover -luokassa on kaksi instanssimenetelmää set () ja move (). set () -menetelmä kutsuu yksinkertaisesti DisplayBuf set () -menetelmää päivitetyillä koordinaateilla tallentamaan myöhempää renderointia varten LED -matriisissa. move () -menetelmä päivittää instanssin koordinaatit instanssin nopeuden mukaan - siitä on hyötyä myöhemmin, kun meidän on muutettava hyökkääjien nopeutta tasojen edetessä.

Class Bullet ja Class Invader ovat Mover -luokan alaluokkia. Tässä käytetään jotain, jota kutsutaan perinnöksi. Super (): n toiminnallisuuden avulla voimme kutsua aliluokan superluokan menetelmiä ilman tarvetta toistaa koodia.

Vaihe 5: Tee siitä oma

Tee siitä oma
Tee siitä oma

Onnittelut! Olet juuri luonut uudelleen klassisen Space Invaders -pelin Micro: bitillä hienolla pelilaitteistolla. Voit tietysti parantaa pelikoodia täältä - esimerkiksi tällä hetkellä pelissä on vain yksi taso - voit lisätä haastavampia. Lisäksi, kuten saatat muistaa, alkuperäisessä pelissä on kiviä, jotka kelluvat pelaajan edessä ja joita voit myös lisätä.

Jos teet parannetun version pelistä, jaa se alla oleviin kommentteihin! Lisätietoja BitPlayeristä ja muista laitteista valmistajille ja STEM -opettajille on verkkosivustollamme https://tinkergen.com/ ja tilaa uutiskirjeemme.

TinkerGen on äskettäin luonut Kickstarter -kampanjan MARKille (Make A Robot Kit), robottipaketti koodauksen, robotiikan ja tekoälyn opettamiseen!

Hexkcd/micro-vadersin alkuperäinen Micropython-koodi muutettiin toimimaan TinkerGen BitPlayerin kanssa.

Suositeltava: