Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-23 15:08
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
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
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
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
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
Č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:
Kako zagnati servo motorje z uporabo Moto: bit z Micro: bit: 7 korakov (s slikami)
Kako zagnati servo motorje z uporabo Moto: bit z Micro: bit: Eden od načinov za razširitev funkcionalnosti mikro: bita je uporaba plošče z imenom moto: bit podjetja SparkFun Electronics (približno 15-20 USD). Izgleda zapleteno in ima številne funkcije, vendar iz njega ni težko zagnati servo motorjev. Moto: bit vam omogoča, da
Lora Gateway, ki temelji na MicroPythonu ESP32: 10 korakov (s slikami)
Lora Gateway, ki temelji na MicroPythonu ESP32: Lora je v zadnjih letih zelo priljubljena. Brezžični komunikacijski modul, ki uporablja to tehnologijo, je običajno poceni (z uporabo prostega spektra), majhen, energetsko učinkovit in ima veliko komunikacijsko razdaljo ter se večinoma uporablja za medsebojno komunikacijo
LCD Invaders: Space Invaders Like Game na 16x2 LCD -prikazovalniku znakov: 7 korakov
LCD Invaders: Space Invaders Like Game na 16x2 LCD -prikazovalniku znakov: Ni potrebe po uvajanju legendarne igre "Space Invaders". Najbolj zanimiva značilnost tega projekta je, da uporablja zaslon besedila za grafični izhod. To se doseže z izvajanjem 8 meri characters.You lahko prenesete celoten Arduino
Programiranje Micro: Bit Robot & Joystick: Bit Controller z MicroPythonom: 11 korakov
Programiranje Micro: Bit Robot & Joystick: Bit Controller z MicroPython: Za Robocamp 2019, naš poletni tabor robotike, mladi v starosti 10-13 let spajkajo, programirajo in izdelujejo "antweight robot" na osnovi BBC mikro: bit, pa tudi programiranje mikro: bit za uporabo kot daljinski upravljalnik. Če ste trenutno v Robocampu, smučajte
Lestenec Space Invaders with Glow in the Dark Action: 16 korakov (s slikami)
Lestenec Space Invaders with Glow in the Dark Action: Uporabite 3D modeliranje/tiskanje, lasersko razrezan akril, ulivanje smole, UV reaktivni pigment, LED diode in nekaj preprostih ožičenj, da naredite lestenec ali svetilko v visokem slogu in retro hladen prostor. Vključil sem lep trik za izdelavo ukrivljenih vogalov iz laserske kocke