INHOUDSOPGAWE:

Space Invaders in Micropython op Micro: bit: 5 stappe
Space Invaders in Micropython op Micro: bit: 5 stappe

Video: Space Invaders in Micropython op Micro: bit: 5 stappe

Video: Space Invaders in Micropython op Micro: bit: 5 stappe
Video: Space Invaders in Micropython on Micro:bit 2024, Julie
Anonim
Image
Image

In ons vorige artikels het ons speletjies op GameGo ondersoek, 'n draagbare retro -spelkonsole wat ontwikkel is deur TinkerGen Education. Die speletjies wat ons gemaak het, herinner aan ou Nintendo -speletjies. In vandag se artikel gaan ons 'n stap terug neem na die goue era van arcade games. Ons sal Space Invaders -speletjie in Micropython op Micro: bit -mikrobeheerder herskep - en as 'n draai, sal ons ook BitPlayer Micro: bit -uitbreiding gebruik, wat ons in staat stel om makliker speletjies te speel.

Aangesien hierdie tutoriaal handel oor die kodering van die spel in Micropython, gaan ons in plaas van die tradisionele stadium-vir-fase-volgorde wat ons voorheen vir grafiese programme-tutoriale gebruik het, die kode blok vir blok oor-oor belangrike funksies, klasse en die belangrikste lus. U kan die volledige kode aflaai in die GitHub -bewaarplek van hierdie projek. Maak vas en laat ons begin!

Voorrade

TinkerGen BitPlayer

BBC Micro: bietjie

Stap 1: Hooflus

Joystick
Joystick

In hierdie handleiding sal ek die woord "metode" gereeld gebruik. 'N Metode in luislang is ietwat soortgelyk aan 'n funksie, behalwe dat dit met voorwerp/klasse geassosieer word. Om dit te vereenvoudig, kan u dit lees as ''n funksie in die klas'. U kan hier meer lees oor metodes.

Ons betree die hooflus met

terwyl dit nie game_over is nie:

toestand. Binne kry ons die aantal indringers, die kans dat hulle verskyn en die aantal wat nodig is om na die volgende vlak uit die vlakke -woordeboek te kom. Vervolgens kyk ons na beweging na links-regs met Listen_Dir-instansiemetodes van JoyStick, klasinstansie. As een van die voorwaardes as waar beskou word, verhoog/verminder ons die waarde van ons speelbare karakter. Ons beperk dit tot [-2, 2] met twee as-voorwaardes. Dan initialiseer ons 'n voorbeeld van die DisplayBuffer -klas en kyk of 'knoppie' of 'vuurkogel' gedruk word. Ons gebruik metode DisplayBuffer.set () om voorwerpe te stel vir latere weergawe. Vir die weergawe van die skild gebruik ons DisplayBuffer.set () direk, maar vir koeëls en indringers voeg ons dit by hul onderskeie lys en stel () dit een vir een in vir lus met die volgende kode vir latere weergawe met DispBuffer.render ():

vir b in koeëls: b.render (dispBuf) vir v in vaders: v.render (dispBuf)

Alle indringers, koeëls en skild word een keer by elke hooflus herhaal

dispBuf.render ()

Voor die einde van die hooflus kyk ons of enige van die koeëls van indringers die einde van die skerm bereik het, en as dit die geval is, verwyder ons dit uit hul onderskeie lyste.

Stap 2: joystick

Joystick
Joystick

BitPlayer is maklik om vas te hou en te gebruik, met 'n 2-as-joystick soos Gameboy- of PSP-beheerders, bevat dit ook nog ses programmeerbare knoppies gemerk as L, R, A, B, C en D. Vir 'n meeslepende en interaktiewe ervaring, bevat die BitPlayer self beskik oor 'n zoemer, 'n vibrasiemotor en 'n Grove I2C -poort om ekstra randapparatuur soos 'n OLED -skerm aan te sluit.

Ons gebruik slegs die links-regs-wip van die joystick vir hierdie speletjie; vir 'n volledige voorbeeld van die gebruik van alle BitPlayer-knoppies, kan u na joystick_example.py kyk in die GitHub-bewaarplek van hierdie projek. By die skep van die instansie van JoyStick-klas kyk ons na die standaardlesing van die X-as en stoor die waarde in self. Read_X. Dan kyk ons in funksie Listen_Dir of die afwyking van die standaardwaarde hoër is as die sensitiwiteitsveranderlike (probeer dit self aanpas, as u voel dat JoyStick te sensitief is) en gee True of False terug volgens die gedetecteerde rigting.

Kom ons kyk na 'n konkrete voorbeeld van hoe dit werk:

Gestel ons standaard X-as-lesing is 0. As ons dan die joystick regs skuif:

New_X = JoyStick_X.read_analog () #New_X = 200

Regs = New_X - self. Read_X #Right = 200 Links = self. Read_X - New_X #Left = -200

As ons dan kyk na rigting:

Presisie = 150 as regs> Presisie: #200> 150 True Get_Rocker = DIR ['R'] elif Links> Presisie: #-200> 150 Onwaar Get_Rocker = DIR ['L'] anders: Get_Rocker = DIR ['NONE'] as Dir == Get_Rocker: return Waar anders: return Onwaar

Stap 3: Vertoonbuffer

Vertoonbuffer
Vertoonbuffer

DisplayBuf -klas is verantwoordelik vir die beheer van die LED -skerm. Dit word gedoen met behulp van twee metodes, set () en render (). set () metode verander die waardes wat ooreenstem met LED -skermpiksels. U onthou miskien dat die pixels op die Micro: bit LED -skerm uitgedruk kan word as 'n string of 'n lys - "00000: 00000: 00000: 00000: 00000" is 'n leë skerm. "00000: 00000: 00000: 00000: 00100" is 'n skerm met 'n swak pixel in die middel van die onderste ry.

00000:

00000

:00000

:00000:

00100"

Hierdie notasie is dalk makliker om te verwerk:)

Wat ons dus tydens die hooflus doen, is die oproepstel () metode van DisplayBuf om al ons voorwerpe wat op die skerm vertoon moet word, in te stel. Dan gebruik ons die render () -metode om hulle almal gelyktydig op die skerm te wys.

Stap 4: Invaders, Bullets en die speler

Indringers, koeëls en die speler
Indringers, koeëls en die speler

Bullets en Invaders behoort tot die Mover -klas. Beweegklasgevalle het hul x, y liggings en spoed, sowel as helderheid. Mover -klas het twee instansiemetodes, set () en move (). set () metode noem eenvoudig DisplayBuf set () metode met opgedateerde koördinate om te stoor vir latere weergawe op LED matriks. move () metode -opdaterings instansekoördineer volgens instansiesnelheid - wat later handig is as ons die snelheid van indringers moet verander namate die vlakke vorder.

Class Bullet en class Invader is subklasse van die Mover -klas. Hier gebruik ons iets wat erfenis genoem word. Met die funksionaliteit van super () kan ons metodes van die superklas in subklasse noem, sonder om die kode te herhaal.

Stap 5: Maak dit u eie

Maak dit jou eie
Maak dit jou eie

Baie geluk! U het pas die klassieke Space Invaders-speletjie op Micro: bit herskep met 'n paar koel hardeware. U kan natuurlik die spelkode van hier af verbeter - byvoorbeeld, op die oomblik het die spel slegs een vlak - u kan meer uitdagende programme byvoeg. Soos u kan onthou, het die oorspronklike spel rotse wat voor die speler dryf, wat u ook kan byvoeg.

As u 'n verbeterde weergawe van die spel maak, deel dit dan in die kommentaar hieronder! Vir meer inligting oor BitPlayer en ander hardeware vir vervaardigers en STEM -opvoeders, besoek ons webwerf, https://tinkergen.com/ en teken in op ons nuusbrief.

TinkerGen het onlangs 'n Kickstarter -veldtog vir MARK (Make A Robot Kit), 'n robotstel vir die onderrig van kodering, robotika, AI!

Die oorspronklike Micropython-kode van hexkcd/micro-vaders is verander om saam met TinkerGen BitPlayer te werk.

Aanbeveel: