Sadržaj:
- Pribor
- Korak 1: Glavna petlja
- Korak 2: Joystick
- Korak 3: Prikaz međuspremnika
- Korak 4: Osvajači, metci i igrač
- Korak 5: Neka to bude vaše
Video: Space Invaders u Micropythonu na Micro: bit: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
U našim smo prethodnim člancima istraživali izradu igara na GameGo -u, prijenosnoj konzoli za igranje na igrama koju je razvilo TinkerGen obrazovanje. Igre koje smo napravili podsjećale su na stare Nintendo igre. U današnjem ćemo članku napraviti korak nazad, u zlatno doba arkadnih igara. Ponovno ćemo stvoriti igru Space Invaders u Micropythonu na mikro: bitnom mikrokontroleru - a kao dodatak upotrijebit ćemo i BitPlayer Micro: bit ekstenziju koja nam omogućuje praktičniju igru.
Budući da se ovaj vodič odnosi na kodiranje igre u Micropythonu, umjesto tradicionalnog postupnog slijeda koji smo ranije koristili za udžbenike grafičkog programiranja, prelazit ćemo kod po blok-prelazeći važne funkcije, klase i glavne petlja. Cijeli kôd možete preuzeti u spremištu GitHub ovog projekta. Vežite se i počnimo!
Pribor
TinkerGen BitPlayer
BBC Micro: bit
Korak 1: Glavna petlja
U ovom vodiču često ću koristiti riječ "metoda". Metoda u pythonu donekle je slična funkciji, osim što je povezana s objektom/klasama. Dakle, radi pojednostavljenja, možete ga čitati kao "funkciju unutar klase". Više o metodama možete pročitati ovdje.
Ulazimo u glavnu petlju s
dok nije game_over:
stanje. Unutra dobivamo broj napadača, šansu njihovog pojavljivanja i broj potreban za prijelaz na sljedeću razinu iz rječnika razina. Zatim provjeravamo kretanje lijevo-desno pomoću metoda instance Listen_Dir instance klase JoyStick. Ako se jedan od uvjeta ocijeni kao True, povećavamo/umanjujemo x-vrijednost našeg lika koji se može igrati. Ograničavamo ga na [-2, 2] s dva if uvjeta. Zatim inicijaliziramo instancu klase DisplayBuffer i provjeravamo ima li pritisnutih gumba "štit" ili "vatreni metak". Koristimo metodu DisplayBuffer.set () za postavljanje objekata za kasnije iscrtavanje. Za iscrtavanje štita izravno koristimo DisplayBuffer.set (), ali za metke i napadače dodajemo ih na njihov popis i postavljamo () jedan po jedan u for petlju sa sljedećim kodom za kasnije iscrtavanje pomoću DispBuffer.render ():
za b u mecima: b.render (dispBuf) za v u vaders: v.render (dispBuf)
Svi napadači, metci i štit se prikazuju na zaslonu jednom pri svakoj iteraciji glavne petlje s
dispBuf.render ()
Prije kraja glavne petlje provjeravamo je li neki od metaka napadača došao do kraja zaslona, a ako jesu, brišemo ih s njihovih popisa.
Korak 2: Joystick
BitPlayer je jednostavan za držanje i korištenje, s 2-osnom joystickom poput Gameboy ili PSP kontrolera, a uključuje i još 6 programabilnih gumba označenih kao L, R, A, B, C i D. Za impresivno i interaktivno iskustvo, BitPlayer sam sadrži zujalicu, motor za vibracije i Grove I2C priključak za povezivanje dodatnih perifernih uređaja poput OLED zaslona.
Za ovu igru koristimo samo lijevi-desni klackalicu joysticka, za potpuni primjer korištenja svih BitPlayer gumba možete pogledati joystick_example.py u spremištu GitHub ovog projekta. Prilikom stvaranja instance klase JoyStick provjeravamo ima li zadano očitanje osi X i pohranjujemo tu vrijednost u self. Read_X. Zatim u funkciji Listen_Dir provjeravamo je li odstupanje od zadane vrijednosti veće od varijable osjetljivosti (pokušajte je sami prilagoditi, ako smatrate da je JoyStick previše osjetljiv) i vraćamo True of False prema otkrivenom smjeru.
Pogledajmo konkretan primjer kako to funkcionira:
Recimo da je naše zadano očitanje osi X 0. Ako pomaknemo joystick udesno:
New_X = JoyStick_X.read_analog () #New_X = 200
Desno = New_X - self. Read_X #Right = 200 Lijevo = self. Read_X - New_X #Left = -200
Kada provjerimo smjer:
Precision = 150if Right> Precision: #200> 150 True Get_Rocker = DIR ['R'] elif Lijevo> Precision: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return True else: return False
Korak 3: Prikaz međuspremnika
DisplayBuf klasa je odgovorna za upravljanje LED zaslonom. To se radi pomoću dvije metode, set () i render (). metoda set () mijenja vrijednosti koje odgovaraju pikselima LED zaslona. Možda se sjećate da se pikseli na Micro: bit LED ekranu mogu izraziti kao niz ili popis - "00000: 00000: 00000: 00000: 00000" je prazan zaslon. "00000: 00000: 00000: 00000: 00100" je zaslon s slabo osvijetljenim pikselom u središtu donjeg reda.
00000:
00000
:00000
:00000:
00100"
Ovaj zapis bi bilo lakše obraditi:)
Dakle, ono što radimo tijekom glavne petlje je call set () metoda DisplayBufa za postavljanje svih naših objekata koje je potrebno prikazati na ekranu. Zatim koristimo metodu render () da ih sve istodobno prikažemo na ekranu.
Korak 4: Osvajači, metci i igrač
Meci i napadači pripadaju klasi Mover. Primjeri klase selidbe imaju svoje x, y lokacije i brzinu, kao i svjetlinu. Mover klasa ima dvije instance metode, set () i move (). metoda set () jednostavno poziva DisplayBuf metodu set () s ažuriranim koordinatama radi spremanja za kasnije iscrtavanje na LED matrici. move () metoda ažurira koordinate instance prema brzini instance - to postaje korisno kasnije, kada moramo mijenjati brzinu napadača kako napreduju razine.
Klasa Bullet i klasa Invader su potklase klase Mover. Ovdje koristimo nešto što se naziva nasljeđivanje. Funkcionalnost super () omogućuje nam pozivanje metoda nadklase u podklasi, bez potrebe za ponavljanjem koda.
Korak 5: Neka to bude vaše
Čestitamo! Upravo ste ponovno stvorili klasičnu igru Space Invaders na Micro: bitu s nekim cool hardverom za igre. Naravno, odavde možete poboljšati kôd igre - na primjer, od sada igra ima samo jednu razinu - možete dodati izazovniju. Također, kao što se možda sjećate, originalna igra ima stijene koje plutaju ispred playera, a koje možete i dodati.
Ako ipak napravite poboljšanu verziju igre, podijelite je u komentarima ispod! Za više informacija o BitPlayeru i drugom hardveru za proizvođače i STEM edukatore posjetite našu web stranicu, https://tinkergen.com/ i pretplatite se na naš bilten.
TinkerGen je nedavno stvorio Kickstarter kampanju za MARK (Make A Robot Kit), komplet robota za učenje kodiranja, robotike, umjetne inteligencije!
Originalni kod Micropythona iz hexkcd/micro-vaders-a promijenjen je za rad s TinkerGen BitPlayerom.
Preporučeni:
Kako pokrenuti servo motore koristeći Moto: bit s Micro: bit: 7 koraka (sa slikama)
Kako pokrenuti servo motore koristeći Moto: bit s Micro: bit: Jedan od načina za proširenje funkcionalnosti micro: bita je upotreba ploče pod nazivom moto: bit tvrtke SparkFun Electronics (približno 15-20 USD). Izgleda komplicirano i ima mnoge značajke, ali nije teško pokrenuti servo motore s njega. Moto: bit vam omogućuje da
MQTT temeljen na MicroPythonu ESP32: 5 koraka
MQTT Na temelju MicroPythona ESP32: Volim držati kućne mačke. Nakon dana intenzivnog rada, mačka me može opustiti kad dođem kući. Nakon napornog treninga, ova mačka ima dobru naviku redovito jesti u " restoranu " svaki dan. No, nedavno moram putovati na nekoliko dana i
Lora Gateway temeljen na MicroPythonu ESP32: 10 koraka (sa slikama)
Lora Gateway temeljen na MicroPythonu ESP32: Lora je posljednjih godina vrlo popularna. Bežični komunikacijski modul koji koristi ovu tehnologiju obično je jeftin (pomoću slobodnog spektra), male je veličine, energetski učinkovit i ima veliku komunikacijsku udaljenost, a uglavnom se koristi za međusobnu komunikaciju
Programiranje Micro: Bit robota i joystick: Bit Controller s MicroPythonom: 11 koraka
Programiranje Micro: Bit Robota i joystick: Bit Controller s MicroPythonom: Za Robocamp 2019, naš ljetni kamp robotike, mladi u dobi od 10 do 13 godina lemlje, programiraju i izrađuju 'antweight robot' temeljen na BBC-u, kao i programiranje mikro: bit za korištenje kao daljinski upravljač. Ako ste trenutno u Robocampu, skijajte
Luster Space Invaders sa sjajem u mraku: 16 koraka (sa slikama)
Luster Space Invaders sa sjajem u mraku: Upotrijebite 3D modeliranje/ispis, laserski rezani akril, lijevanje smolom, UV reaktivni pigment, LED diode i neko jednostavno ožičenje za izradu lustera ili svjetiljke visokog stila i retro hladnih svemira. Uključio sam lijep trik za izradu zakrivljenih kutova od laserske cu