Indholdsfortegnelse:

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

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

Video: Space Invaders i Micropython på Micro: bit: 5 trin
Video: micro:bit Tutorial Series Part 1: Getting Started 2024, November
Anonim
Image
Image

I vores tidligere artikler har vi undersøgt spilfremstilling på GameGo, en bærbar retro -spilkonsol udviklet af TinkerGen education. De spil, vi lavede, mindede om gamle Nintendo -spil. I dagens artikel vil vi tage et skridt tilbage til arkadespilens guldalder. Vi vil genskabe Space Invaders -spil i Micropython på Micro: bit mikrokontroller - og som et twist vil vi også bruge BitPlayer Micro: bit -udvidelse, som giver os mulighed for at spille spil mere bekvemt.

Da denne vejledning handler om at kode spillet i Micropython, i stedet for den traditionelle trin-for-trin sekvens, vi tidligere brugte til grafiske programmeringsstudier, vil vi gå over koden blok for blok-gå over vigtige funktioner, klasser og de vigtigste sløjfe. Du kan downloade den fulde kode i dette projekts GitHub -lager. Spænde og lad os begynde!

Forbrugsvarer

TinkerGen BitPlayer

BBC Micro: bit

Trin 1: Hovedsløjfe

Joystick
Joystick

I denne vejledning bruger jeg ret ofte "metode". En metode i python ligner noget en funktion, bortset fra at den er forbundet med objekt/klasser. Så for enkelheds skyld kan du læse det som "en funktion inden for klassen". Du kan læse mere om metoder her.

Vi går ind i hovedsløjfen med

mens ikke game_over:

tilstand. Indenfor får vi antallet af angribere, chancen for at de vises og det antal, der er nødvendigt for at komme til det næste niveau fra niveauer ordbog. Dernæst kontrollerer vi for venstre-højre-bevægelse med Listen_Dir-forekomstmetoder i klasseeksempel JoyStick. Hvis en af betingelserne vurderes som sand, øger/formindsker vi x-værdien af vores spilbare karakter. Vi begrænser det til [-2, 2] med to if-betingelser. Derefter initialiserer vi en forekomst af DisplayBuffer -klassen og kontrollerer, om der trykkes på "skjold" eller "ildkugle". Vi bruger metode DisplayBuffer.set () til at indstille objekter til senere gengivelse. Til gengivelse af skjoldet bruger vi DisplayBuffer.set () direkte, men for kugler og invaders tilføjer vi dem til deres respektive liste og sætter () dem en efter en i for loop med følgende kode til senere gengivelse med DispBuffer.render ():

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

Alle angribere, kugler og skjold gengives på skærmen, hver gang det gentages i hovedsløjfe

dispBuf.render ()

Inden hovedsløjfen slutter, kontrollerer vi, om nogen af angribernes kugler har nået slutningen af skærmen, og hvis de er det, sletter vi dem fra deres respektive lister.

Trin 2: Joystick

Joystick
Joystick

BitPlayer er let at holde og bruge, med et 2-akset joystick som Gameboy eller PSP-controllere indeholder det også yderligere 6 programmerbare knapper mærket som L, R, A, B, C og D. For en fordybende og interaktiv oplevelse har BitPlayer i sig selv har en summer, en vibrationsmotor og en Grove I2C -port til at forbinde yderligere eksterne enheder som et OLED -display.

Vi bruger kun venstre-højre rocker på joysticket til dette spil. For fuldt eksempel på brug af alle BitPlayer-knapper kan du se joystick_example.py i dette projekts GitHub-depot. Når vi opretter instansen af JoyStick-klassen, kontrollerer vi for X-aksens standardaflæsning og gemmer denne værdi i self. Read_X. Derefter kontrollerer vi i funktion Listen_Dir, om afvigelse fra denne standardværdi er højere end følsomhedsvariablen (prøv selv at tilpasse den, hvis du føler, at JoyStick er for følsom) og returnerer True of False i henhold til detekteret retning.

Lad os se på et konkret eksempel på, hvordan dette fungerer:

Lad os sige, at vores standard X-akse læsning er 0. Hvis vi derefter flytter joysticket til højre:

Ny_X = JoyStick_X.read_analog () #Ny_X = 200

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

Når vi så kontrollerer retning:

Precision = 150if Right> Precision: #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 true else: return False

Trin 3: Displaybuffer

Displaybuffer
Displaybuffer

DisplayBuf -klassen er ansvarlig for at styre LED -skærmen. Det gøres ved hjælp af to metoder, set () og render (). set () -metoden ændrer de værdier, der svarer til LED -skærmpixel. Du husker måske, at pixels på Micro: bit LED -skærm kan udtrykkes som en streng eller en liste - "00000: 00000: 00000: 00000: 00000" er en tom skærm. "00000: 00000: 00000: 00000: 00100" er en skærm med svagt oplyst pixel i midten af den nederste række.

00000:

00000

:00000

:00000:

00100"

Denne notation kan være lettere at behandle:)

Så det, vi gør under hovedsløjfen, er call set () metode til DisplayBuf for at indstille alle vores objekter, der skal vises på skærmen. Derefter bruger vi render () -metoden til faktisk at vise dem alle på skærmen samtidigt.

Trin 4: Invaders, Bullets og afspilleren

Invaders, Bullets og spilleren
Invaders, Bullets og spilleren

Bullets og Invaders tilhører Mover -klassen. Mover -klasseforekomster har deres x, y -lokationer og hastighed samt lysstyrke. Mover -klassen har to instansmetoder, set () og move (). set () metode kalder ganske enkelt DisplayBuf set () metode med opdaterede koordinater for at gemme til senere gengivelse på LED matrix. move () metodeopdateringer forekomstkoordinater i henhold til instanshastighed - det kommer senere til nytte, når vi skal ændre invaders hastighed, når niveauer skrider frem.

Class Bullet og class Invader er underklasser af Mover -klassen. Her bruger vi noget, der hedder arv. Funktionen super () giver os mulighed for at kalde superklassens metoder i underklassen uden at skulle gentage koden.

Trin 5: Gør det til dit eget

Gør det til dit eget
Gør det til dit eget

Tillykke! Du har lige genskabt det klassiske Space Invaders-spil på Micro: bit med noget cool spilhardware. Selvfølgelig kan du forbedre spilkoden herfra - for eksempel har spillet fra nu kun et niveau - du kan tilføje flere udfordrende. Som du måske husker, har det originale spil også sten, der flyder foran spilleren, som du også kan tilføje.

Hvis du laver en forbedret version af spillet, kan du dele det i kommentarerne herunder! For mere information om BitPlayer og anden hardware til producenter og STEM -undervisere, besøg vores websted, https://tinkergen.com/ og tilmeld dig vores nyhedsbrev.

TinkerGen har for nylig oprettet en Kickstarter -kampagne for MARK (Make A Robot Kit), et robotsæt til undervisning i kodning, robotik, AI!

Den originale Micropython-kode fra hexkcd/micro-vaders blev ændret til at fungere med TinkerGen BitPlayer.

Anbefalede: