Kazalo:

Space Invaders v Micropythonu na Micro: bit: 5 korakov
Space Invaders v Micropythonu na Micro: bit: 5 korakov

Video: Space Invaders v Micropythonu na Micro: bit: 5 korakov

Video: Space Invaders v Micropythonu na Micro: bit: 5 korakov
Video: Supersection Week 1 2024, Julij
Anonim
Image
Image

V prejšnjih člankih smo raziskovali ustvarjanje iger na prenosni igralni konzoli GameGo, ki jo je razvilo izobraževanje TinkerGen. Igre, ki smo jih naredili, so spominjale na stare igre Nintendo. V današnjem članku bomo naredili korak nazaj, v zlato dobo arkadnih iger. V Micropythonu na mikrokrmilniku Micro: bit bomo znova ustvarili igro Space Invaders - kot zvitek pa bomo uporabili tudi razširitev BitPlayer Micro: bit, ki nam omogoča bolj priročno igranje igre.

Ker ta vadnica govori o kodiranju igre v Micropythonu, bomo namesto tradicionalnega postopnega zaporedja, ki smo ga prej uporabljali pri vadnicah grafičnega programiranja, pregledali kodni blok za blokom-pregledali pomembne funkcije, razrede in glavne zanka. Celotno kodo lahko prenesete v skladišče GitHub tega projekta. Zapenjajte se in začnimo!

Zaloge

TinkerGen BitPlayer

BBC Micro: bit

1. korak: glavna zanka

Igralna palica
Igralna palica

V tej vadnici bom pogosto uporabljal besedo "metoda". Metoda v pythonu je nekoliko podobna funkciji, le da je povezana s predmetom/razredi. Za poenostavitev ga lahko preberete kot "funkcijo v razredu". Več o metodah si lahko preberete tukaj.

V glavni zanki vstopimo z

medtem ko ni game_over:

stanje. V notranjosti dobimo število napadalcev, možnost njihovega pojavljanja in število, potrebno za prehod na naslednjo stopnjo iz slovarja ravni. Nato preverimo gibanje levo-desno z metodami primerkov Listen_Dir primerka razreda JoyStick. Če je eden od pogojev ocenjen kot True, povečamo/zmanjšamo x-vrednost našega igralnega lika. Omejimo ga na [-2, 2] z dvema pogojema if. Nato inicializiramo primerek razreda DisplayBuffer in preverimo, ali so pritisnjeni gumbi "shield" ali "fire bullet". Za nastavitev predmetov za poznejše upodabljanje uporabljamo metodo DisplayBuffer.set (). Za upodabljanje ščita uporabljamo neposredno DisplayBuffer.set (), za krogle in vsiljivce pa jih dodamo na ustrezen seznam in jih postavimo () enega za drugim v zanki for z naslednjo kodo za poznejše upodabljanje z DispBuffer.render ():

za b v kroglicah: b.render (dispBuf) za v v vaders: v.render (dispBuf)

Vsi napadalci, krogle in ščit se prikažejo na zaslonu enkrat na vsako glavno iteracijo z

dispBuf.render ()

Pred koncem glavne zanke preverimo, ali je katera od krogel napadalcev prišla do konca zaslona, in če so, jih izbrišemo z ustreznih seznamov.

2. korak: igralna palica

Igralna palica
Igralna palica

BitPlayer je enostaven za držanje in uporabo, z 2-osno krmilno palčko, kot sta Gameboy ali PSP krmilniki, vključuje pa tudi še 6 programabilnih gumbov z oznako L, R, A, B, C in D. Za poglobljeno in interaktivno doživetje je BitPlayer sam vsebuje zvočni signal, motor za vibracije in vrata Grove I2C za povezavo dodatnih zunanjih naprav, kot je zaslon OLED.

Za to igro uporabljamo le levo-desno ročico igralne palice, za popoln primer uporabe vseh gumbov BitPlayer si lahko ogledate joystick_example.py v skladišču GitHub tega projekta. Pri ustvarjanju primerka razreda JoyStick preverimo privzeto branje osi X in to vrednost shranimo v self. Read_X. Nato v funkciji Listen_Dir preverimo, ali je odstopanje od te privzete vrednosti večje od spremenljivke občutljivosti (poskusite jo sami prilagoditi, če menite, da je JoyStick preveč občutljiv) in vrnemo True of False glede na zaznano smer.

Oglejmo si konkreten primer, kako to deluje:

Recimo, da je naše privzeto branje osi X 0. Če pa krmilno palico premaknemo desno:

New_X = JoyStick_X.read_analog () #New_X = 200

Desno = New_X - self. Read_X #Right = 200 Levo = self. Read_X - New_X #Left = -200

Ko preverimo smer:

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 drugače: return False

3. korak: Prikaz vmesnega pomnilnika

Prikazovalni vmesnik
Prikazovalni vmesnik

Za nadzor LED zaslona je odgovoren razred DisplayBuf. To se naredi z dvema metodama, set () in render (). metoda set () spremeni vrednosti, ki ustrezajo slikovnim pikam LED. Morda se spomnite, da se lahko slikovne pike na Micro: bit LED zaslonu izrazijo kot niz ali seznam - "00000: 00000: 00000: 00000: 00000" je prazen zaslon. "00000: 00000: 00000: 00000: 00100" je zaslon z slabo osvetljeno slikovno piko v sredini spodnje vrstice.

00000:

00000

:00000

:00000:

00100"

Ta zapis bo morda lažje obdelati:)

Torej, kar počnemo med glavno zanko, je metoda setB () klica DisplayBuf, da nastavimo vse naše predmete, ki jih je treba prikazati na zaslonu. Nato uporabimo metodo render (), da jih vse hkrati prikažemo na zaslonu hkrati.

4. korak: vsiljivci, krogle in predvajalnik

Invaders, Bullets and Player
Invaders, Bullets and Player

Krogle in napadalci spadajo v razred Mover. Primeri razreda premikanja imajo svoje lokacije x, y in hitrost ter svetlost. Mover razred ima dve metodi primerkov, set () in move (). metoda set () preprosto pokliče metodo DisplayBuf set () s posodobljenimi koordinatami za shranjevanje za poznejše upodabljanje na matriki LED. metoda move () posodobi koordinato primerka glede na hitrost primerka - to bo koristno pozneje, ko bomo morali z napredovanjem ravni spreminjati hitrost vsiljivcev.

Razred Bullet in razred Invader sta podrazreda razreda Mover. Tukaj uporabljamo nekaj, kar se imenuje dedovanje. Funkcionalnost super () nam omogoča, da pokličemo metode nadrazreda v podrazredu, ne da bi morali kodo ponavljati.

5. korak: Naj bo vaše

Naj bo po svoje
Naj bo po svoje

Čestitamo! Pravkar ste na Micro: bitu znova ustvarili klasično igro Space Invaders z nekaj kul igralne strojne opreme. Seveda bi lahko od tu izboljšali kodo igre - na primer, od zdaj ima igra samo eno raven - lahko dodate zahtevnejše. Morda se spomnite, da v izvirni igri pred igralcem plavajo skale, ki jih lahko dodate tudi vi.

Če naredite izboljšano različico igre, jo delite v spodnjih komentarjih! Za več informacij o BitPlayerju in drugi strojni opremi za izdelovalce in učitelje STEM obiščite našo spletno stran https://tinkergen.com/ in se naročite na naše novice.

TinkerGen je pred kratkim ustvaril kampanjo Kickstarter za MARK (Make A Robot Kit), komplet robotov za poučevanje kodiranja, robotike, AI!

Prvotna koda Micropython iz hexkcd/micro-vaders je bila spremenjena v delo s TinkerGen BitPlayer.

Priporočena: