Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Hovedsløjfe
- Trin 2: Joystick
- Trin 3: Displaybuffer
- Trin 4: Invaders, Bullets og afspilleren
- Trin 5: Gør det til dit eget
Video: Space Invaders i Micropython på Micro: bit: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
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
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
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
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:
Lego bærbar spillekonsol med Space Invaders: 4 trin
Lego bærbar spillekonsol med Space Invaders: Har du nogensinde tænkt på at være en spiludvikler og bygge din egen spillekonsol, som du kan spille på farten? Alt du behøver er lidt tid, hardware Lego bricksa Mini-Calliope (kan bestilles på dette websted https://calliope.cc/da) og nogle færdigheder
LCD Invaders: a Space Invaders Like Game på 16x2 LCD Character Display: 7 trin
LCD Invaders: a Space Invaders Like Game på 16x2 LCD Character Display: Det er ikke nødvendigt at introducere et legendarisk “Space Invaders” -spil. Det mest interessante ved dette projekt er, at det bruger tekstvisning til grafisk output. Det opnås ved at implementere 8 brugerdefinerede tegn. Du kan downloade hele Arduino
Sådan laver du Space Invaders på mikrobit .: 4 trin
Sådan laver du Space Invaders på Micro Bit .: Så det første trin er at oprette vores skib. Du går til " Grundlæggende " og tilføj en " Ved start " blok. Derefter går du til " Variabler " og du opretter en variabel kaldet " SHIP " og vælg en blok fra " Variabler " fane t
Programmering af en Micro: Bit Robot & Joystick: Bit Controller Med MicroPython: 11 trin
Programmering af en Micro: Bit Robot & Joystick: Bit Controller Med MicroPython: Til Robocamp 2019, vores sommerrobotiklejr, lodder unge i alderen 10-13 år og programmerer og bygger en BBC micro: bit baseret 'antweight robot' samt programmering en mikro: bit til brug som fjernbetjening. Hvis du i øjeblikket er på Robocamp, kan du stå på ski
Space Invaders Clock (på et budget!): 6 trin (med billeder)
Space Invaders Clock (på et budget!): For nylig så jeg et sejt byggeri af GeckoDiode, og jeg ville straks bygge det selv. Instructable er Space Invaders Desktop Clock, og jeg anbefaler, at du kigger på det efter at have læst dette. Projektet var næsten udelukkende bygget af dele, der var hentet