Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Hovedløyfe
- Trinn 2: Joystick
- Trinn 3: Displaybuffer
- Trinn 4: Invaders, Bullets og spilleren
- Trinn 5: Gjør det til ditt eget
Video: Space Invaders i Micropython på Micro: bit: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
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
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
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
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
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
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:
Lego bærbar spillkonsoll med Space Invaders: 4 trinn
Lego bærbar spillkonsoll med Space Invaders: Har du noen gang tenkt på å være en spillutvikler og bygge din egen spillkonsoll som du kan spille på farten? Alt du trenger er litt tid, maskinvare Lego bricksa Mini-Calliope (kan bestilles på dette nettstedet https://calliope.cc/en) og litt dyktighet
LCD Invaders: a Space Invaders Like Game on 16x2 LCD Character Display: 7 Steps
LCD Invaders: a Space Invaders Like Game på 16x2 LCD Character Display: Det er ikke nødvendig å introdusere et legendarisk "Space Invaders" -spill. Den mest interessante egenskapen til dette prosjektet er at den bruker tekstvisning for grafisk utgang. Det oppnås ved å implementere 8 egendefinerte tegn. Du kan laste ned hele Arduino
Hvordan lage Space Invaders på mikrobit. 4 trinn
Hvordan lage Space Invaders på mikrobit .: Så det første trinnet er å lage skipet vårt. Du går til " Grunnleggende " og legg til en "Ved start" blokkere. Deretter går du til " Variabler " og du oppretter en variabel som heter " SHIP " og velg en blokk fra " Variabler " fane t
Programmering av en Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 trinn
Programmering av en Micro: Bit Robot & Joystick: Bit Controller With MicroPython: For Robocamp 2019, vår sommerrobotikkleir, lodder, programmerer og bygger en ungdom i alderen 10-13 år en BBC micro: bitbasert 'antweight robot', samt programmering en mikro: bit å bruke som fjernkontroll. Hvis du for tiden er på Robocamp, går du på ski
Space Invaders Clock (on a Budget!): 6 trinn (med bilder)
Space Invaders Clock (on a Budget!): Nylig så jeg et kult bygg av GeckoDiode, og jeg ville umiddelbart bygge det selv. The Instructable is Space Invaders Desktop Clock, og jeg anbefaler at du tar en titt på den etter å ha lest dette. Prosjektet var nesten utelukkende bygget av deler hentet