Innholdsfortegnelse:

Space Invaders i Micropython på Micro: bit: 5 trinn
Space Invaders i Micropython på Micro: bit: 5 trinn

Video: Space Invaders i Micropython på Micro: bit: 5 trinn

Video: Space Invaders i Micropython på Micro: bit: 5 trinn
Video: Space Invaders in Micropython on Micro:bit 2024, November
Anonim
Image
Image

I våre tidligere artikler har vi utforsket spillfremstilling på GameGo, en bærbar retro spillkonsoll utviklet av TinkerGen education. Spillene vi lagde minner om gamle Nintendo -spill. I dagens artikkel skal vi ta et skritt tilbake, til arkadespillets gullalder. Vi vil gjenopprette Space Invaders -spillet i Micropython på Micro: bit -mikrokontroller - og som en vri vil vi også bruke BitPlayer Micro: bit -forlengelse, som lar oss spille mer praktisk.

Siden denne opplæringen handler om å kode spillet i Micropython, i stedet for tradisjonell trinnvis sekvens vi brukte før for grafiske programmeringsopplæringer, skal vi gå over koden blokk for blokk-gå over viktige funksjoner, klasser og hovedfunksjonene Løkke. Du kan laste ned hele koden i dette prosjektets GitHub -depot. Spenn deg og la oss begynne!

Rekvisita

TinkerGen BitPlayer

BBC Micro: bit

Trinn 1: Hovedløyfe

Styrespak
Styrespak

I denne opplæringen bruker jeg ordet "metode" ganske ofte. En metode i python ligner noe på en funksjon, bortsett fra at den er knyttet til objekt/klasser. Så for enkelhets skyld kan du lese den som "en funksjon i klassen". Du kan lese mer om metoder her.

Vi går inn i hovedløkken med

mens ikke game_over:

tilstand. Inne får vi antall inntrengere, sjansen for at de dukker opp og antall som trengs for å komme til neste nivå fra nivåordlisten. Deretter sjekker vi for venstre-høyre bevegelse med Listen_Dir forekomstmetoder for klasseinstans JoyStick. Hvis en av betingelsene evalueres som True, øker/reduserer vi x-verdien av vår spillbare karakter. Vi begrenser det til [-2, 2] med to if-betingelser. Deretter initialiserer vi en forekomst av DisplayBuffer -klassen og ser etter knappene "skjold" eller "brannskule". Vi bruker metode DisplayBuffer.set () for å sette objekter for senere gjengivelse. For gjengivelse av skjoldet bruker vi DisplayBuffer.set () direkte, men for kuler og inntrengere legger vi dem til deres respektive liste og setter () dem en etter en for loop med følgende kode for senere gjengivelse med DispBuffer.render ():

for b i kuler: b.render (dispBuf) for v in vaders: v.render (dispBuf)

Alle inntrengerne, kulene og skjoldet gjengis på skjermen en gang hver hovedsløyfe iterasjon med

dispBuf.render ()

Før slutten av hovedløkken sjekker vi om noen av kulene til inntrengere har nådd slutten av skjermen, og hvis de er det, sletter vi dem fra sine respektive lister.

Trinn 2: Joystick

Styrespak
Styrespak

BitPlayer er lett å holde og bruke, med en 2-akset joystick som Gameboy eller PSP-kontrollere, inneholder den også ytterligere 6 programmerbare knapper merket som L, R, A, B, C og D. For en oppslukende og interaktiv opplevelse, har BitPlayer selv har en summer, en vibrasjonsmotor og en Grove I2C -port for å koble til flere eksterne enheter som en OLED -skjerm.

Vi bruker bare venstre-høyre-vippebryteren for joysticken for dette spillet. For fullt eksempel på bruk av alle BitPlayer-knappene kan du se på joystick_example.py i dette prosjektets GitHub-depot. Når vi oppretter forekomsten av JoyStick-klassen, sjekker vi etter standardavlesning for X-aksen og lagrer denne verdien i self. Read_X. I funksjonen Listen_Dir sjekker vi om avviket fra standardverdien er høyere enn følsomhetsvariabelen (prøv å justere den selv, hvis du føler at JoyStick er for sensitiv) og returnerer True of False i henhold til detektert retning.

La oss se på et konkret eksempel på hvordan dette fungerer:

La oss si at standard X-akseavlesning er 0. Hvis vi flytter styrespaken til høyre:

New_X = JoyStick_X.read_analog () #New_X = 200

Høyre = New_X - self. Read_X #Right = 200 Venstre = self. Read_X - New_X #Left = -200

Så når vi ser etter retning:

Presisjon = 150if Høyre> Presisjon: #200> 150 True Get_Rocker = DIR ['R'] elif Venstre> Presisjon: #-200> 150 Falsk Get_Rocker = DIR ['L'] annet: Get_Rocker = DIR ['INGEN'] hvis Dir == Get_Rocker: return True true else: return False

Trinn 3: Displaybuffer

Displaybuffer
Displaybuffer

DisplayBuf -klassen er ansvarlig for å kontrollere LED -skjermen. Det gjøres ved å bruke to metoder, set () og render (). set () -metoden endrer verdiene som tilsvarer LED -skjermpiksler. Du husker kanskje at piksler på Micro: bit LED -skjerm kan uttrykkes som streng eller en liste - "00000: 00000: 00000: 00000: 00000" er en tom skjerm. "00000: 00000: 00000: 00000: 00100" er en skjerm med svakt opplyst piksel i midten av den nederste raden.

00000:

00000

:00000

:00000:

00100"

Denne notasjonen kan være lettere å behandle:)

Så det vi gjør under hovedsløyfen er anropssett () -metoden for DisplayBuf for å angi alle objektene våre som må vises på skjermen. Deretter bruker vi render () -metoden for å faktisk vise dem alle på skjermen samtidig.

Trinn 4: Invaders, Bullets og spilleren

Invaders, Bullets og spilleren
Invaders, Bullets og spilleren

Bullets og Invaders tilhører Mover -klassen. Forflytterklasse forekomster har sine x, y steder og hastighet, samt lysstyrke. Mover -klassen har to instansmetoder, set () og move (). set () -metoden kaller ganske enkelt DisplayBuf set () -metoden med oppdaterte koordinater for å lagre for senere gjengivelse på LED -matrisen. move () metodeoppdateringer forekomstkoordinater i henhold til forekomsthastighet - det kommer til nytte senere, når vi trenger å endre hastigheten til inntrengere etter hvert som nivåene utvikler seg.

Class Bullet og class Invader er underklasser av Mover -klassen. Her bruker vi noe som kalles arv. Funksjonen til super () lar oss kalle metoder for superklassen i underklassen, uten å måtte gjenta koden.

Trinn 5: Gjør det til ditt eget

Gjør det til ditt eget
Gjør det til ditt eget

Gratulerer! Du har nettopp gjenopprettet det klassiske Space Invaders-spillet på Micro: bit med litt kul spillmaskinvare. Selvfølgelig kan du forbedre spillkoden herfra - for eksempel har spillet for øyeblikket bare ett nivå - du kan legge til flere utfordrende. Som du kanskje husker, har det originale spillet stein som flyter foran spilleren, som du også kan legge til.

Hvis du lager en forbedret versjon av spillet, del det i kommentarene nedenfor! For mer informasjon om BitPlayer og annen maskinvare for produsenter og STEM -lærere, besøk vårt nettsted, https://tinkergen.com/ og abonner på vårt nyhetsbrev.

TinkerGen har nylig opprettet en Kickstarter -kampanje for MARK (Make A Robot Kit), et robotsett for undervisning i koding, robotikk, AI!

Den originale Micropython-koden fra hexkcd/micro-vaders ble endret til å fungere med TinkerGen BitPlayer.

Anbefalt: