Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-23 15:10
I våra tidigare artiklar har vi undersökt speltillverkning på GameGo, en bärbar retro spelkonsol utvecklad av TinkerGen education. Spelen som vi gjorde påminde om gamla Nintendo -spel. I dagens artikel kommer vi att ta ett steg tillbaka, till arkadspelens guldålder. Vi kommer att återskapa Space Invaders -spelet i Micropython på Micro: bit -mikrokontroller - och som en twist kommer vi också att använda BitPlayer Micro: bit -förlängning, vilket gör att vi kan spela mer bekvämt.
Eftersom denna handledning handlar om kodning av spelet i Micropython, i stället för traditionell steg-för-steg-sekvens som vi använde tidigare för grafiska programmeringsstudier, kommer vi att gå över koden block för block-gå igenom viktiga funktioner, klasser och huvudsakliga slinga. Du kan ladda ner hela koden i detta projekts GitHub -arkiv. Spänn ihop och låt oss börja!
Tillbehör
TinkerGen BitPlayer
BBC Micro: bit
Steg 1: Huvudslinga
I denna handledning kommer jag att använda ordet "metod" ganska ofta. En metod i python liknar en funktion, förutom att den är associerad med objekt/klasser. Så, för att förenkla, kan du läsa det som "en funktion inom klassen". Du kan läsa mer om metoder här.
Vi går in i huvudslingan med
medan inte game_over:
skick. Inuti får vi antalet inkräktare, chans att de dyker upp och antalet som behövs för att komma till nästa nivå från nivåer ordlista. Därefter söker vi efter vänster-högerrörelse med Listen_Dir-instansmetoder för klassinstans JoyStick. Om ett av villkoren utvärderas som sant, ökar/minskar vi x-värdet för vår spelbara karaktär. Vi begränsar det till [-2, 2] med två if-förhållanden. Sedan initierar vi en instans av DisplayBuffer -klassen och kontrollerar om knapparna trycks in "sköld" eller "eldkula". Vi använder metod DisplayBuffer.set () för att ställa in objekt för senare rendering. För att återge skölden använder vi DisplayBuffer.set () direkt, men för kulor och inkräktare lägger vi till dem i deras respektive lista och sätter () dem en efter en för loop med följande kod för senare rendering med DispBuffer.render ():
för b i kulor: b.render (dispBuf) för v in vaders: v.render (dispBuf)
Alla inkräktare, kulor och sköld återges på skärmen en gång varje huvudslinga iteration med
dispBuf.render ()
Före slutet av huvudslingan kontrollerar vi om någon av inkräktarnas kulor har nått slutet av skärmen, och om de är det tar vi bort dem från deras respektive listor.
Steg 2: Joystick
BitPlayer är lätt att hålla och använda, med en 2-axlig joystick som Gameboy eller PSP-styrenheter innehåller den också ytterligare 6 programmerbara knappar märkta som L, R, A, B, C och D. För en uppslukande och interaktiv upplevelse har BitPlayer själv har en summer, en vibrationsmotor och en Grove I2C -port för att ansluta ytterligare kringutrustning som en OLED -skärm.
Vi använder bara joystickens vänster-höger-vippare för det här spelet, för ett fullständigt exempel på användning av alla BitPlayer-knappar kan du titta på joystick_example.py i detta projekts GitHub-arkiv. När vi skapar instansen av JoyStick-klassen söker vi efter X-axelns standardavläsning och lagrar det värdet i self. Read_X. Sedan i funktionen Listen_Dir, kontrollerar vi om avvikelsen från det standardvärdet är högre än känslighetsvariabeln (försök att justera det själv, om du känner att JoyStick är för känslig) och returnerar True of False enligt detekterad riktning.
Låt oss titta på ett konkret exempel på hur detta fungerar:
Låt oss säga att vår standard X-axelavläsning är 0. Om vi sedan flyttar joysticken åt höger:
New_X = JoyStick_X.read_analog () #New_X = 200
Höger = New_X - self. Read_X #Right = 200 Vänster = self. Read_X - New_X #Left = -200
När vi sedan söker efter riktning:
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: return False
Steg 3: Displaybuffert
DisplayBuf -klassen ansvarar för att styra LED -skärmen. Det görs med två metoder, set () och render (). set () -metoden ändrar värdena som motsvarar LED -skärmens pixlar. Du kanske kommer ihåg att pixlar på Micro: bit LED -skärm kan uttryckas som sträng eller en lista - "00000: 00000: 00000: 00000: 00000" är en tom skärm. "00000: 00000: 00000: 00000: 00100" är en skärm med svagt upplyst pixel i mitten av den nedre raden.
00000:
00000
:00000
:00000:
00100"
Denna notation kan vara lättare att bearbeta:)
Så det vi gör under huvudslingan är call set () -metoden för DisplayBuf för att ställa in alla våra objekt som måste visas på skärmen. Sedan använder vi render () -metoden för att faktiskt visa dem alla på skärmen samtidigt.
Steg 4: Invaders, Bullets och spelaren
Bullets och Invaders tillhör Mover -klassen. Flyttklassinstanser har sina x, y -platser och hastighet, samt ljusstyrka. Mover -klassen har två instansmetoder, set () och move (). set () -metoden kallar helt enkelt DisplayBuf set () -metoden med uppdaterade koordinater för att spara för senare återgivning på LED -matris. move () metoduppdateringar instanskoordinat enligt instanshastighet - det är användbart senare när vi behöver ändra inkräktarnas hastighet när nivåerna fortskrider.
Class Bullet och class Invader är underklasser av Mover -klassen. Här använder vi något som kallas arv. Funktionen för super () gör att vi kan anropa superklassens metoder i underklassen, utan att behöva upprepa koden.
Steg 5: Gör det till ditt eget
Grattis! Du har just återskapat det klassiska Space Invaders-spelet på Micro: bit med lite häftig spelhårdvara. Naturligtvis kan du förbättra spelkoden härifrån - till exempel, från och med nu har spelet bara en nivå - du kan lägga till mer utmanande. Som du kanske minns har det ursprungliga spelet stenar som flyter framför spelaren, vilket du också kan lägga till.
Om du gör en förbättrad version av spelet, dela det i kommentarerna nedan! För mer information om BitPlayer och annan hårdvara för tillverkare och STEM -lärare, besök vår webbplats, https://tinkergen.com/ och prenumerera på vårt nyhetsbrev.
TinkerGen har nyligen skapat en Kickstarter -kampanj för MARK (Make A Robot Kit), en robotkit för att lära ut kodning, robotik, AI!
Den ursprungliga Micropython-koden från hexkcd/micro-vaders, ändrades till att fungera med TinkerGen BitPlayer.
Rekommenderad:
Lego bärbar spelkonsol med Space Invaders: 4 steg
Lego bärbar spelkonsol med Space Invaders: Har du någonsin tänkt på att vara en spelutvecklare och bygga din egen spelkonsol som du kan spela på språng? Allt du behöver är lite tid, hårdvara Lego bricksa Mini-Calliope (kan beställas på denna webbplats https://calliope.cc/sv) och lite skicklighet
LCD Invaders: a Space Invaders Like Game på 16x2 LCD Character Display: 7 steg
LCD Invaders: a Space Invaders Like Game på 16x2 LCD Character Display: Det finns ingen anledning att introducera ett legendariskt "Space Invaders" -spel. Det mest intressanta med detta projekt är att det använder textvisning för grafisk utmatning. Det uppnås genom att implementera 8 anpassade tecken. Du kan ladda ner hela Arduino
Hur man gör Space Invaders på mikrobit: 4 steg
Hur man gör Space Invaders på mikrobit: Så det första steget är att skapa vårt skepp. Du går till " Grundläggande " och lägg till en " Vid start " blockera. Sedan går du till " Variabler " och du skapar en variabel som heter " SHIP " och välj ett block från " Variabler " flik t
Programmering av en Micro: Bit Robot & Joystick: Bit Controller With MicroPython: 11 steg
Programmering av en Micro: Bit Robot & Joystick: Bit Controller Med MicroPython: För Robocamp 2019, vårt sommarrobotläger, lödder, programmerar och bygger en ungdom i åldern 10-13 år en BBC micro: bitbaserad "antweight robot", samt programmerar en mikro: bit att använda som fjärrkontroll.Om du för närvarande är på Robocamp, åk skidor
Space Invaders Clock (på en budget!): 6 steg (med bilder)
Space Invaders Clock (på en budget!): Nyligen såg jag en cool byggnad av GeckoDiode och jag ville genast bygga den själv. The Instructable is Space Invaders Desktop Clock och jag rekommenderar att du tar en titt på den efter att ha läst detta. Projektet var nästan enbart byggt av delar från