Sadržaj:

Space Invaders u Micropythonu na Micro: bit: 5 koraka
Space Invaders u Micropythonu na Micro: bit: 5 koraka

Video: Space Invaders u Micropythonu na Micro: bit: 5 koraka

Video: Space Invaders u Micropythonu na Micro: bit: 5 koraka
Video: Кама пуля выбивает долги с мутного типа 2024, Studeni
Anonim
Image
Image

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

Joystick
Joystick

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

Joystick
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

Međuspremnik zaslona
Međuspremnik zaslona

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č

Invaders, Bullets and Player
Invaders, Bullets and Player

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

Neka to bude vaše
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: