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, Novembar
Anonim
Image
Image

U našim prethodnim člancima istraživali smo stvaranje igara na GameGo -u, prijenosnoj konzoli za igranje 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. Ponovo ćemo stvoriti igru Space Invaders u Micropythonu na Micro: bitnom mikrokontroleru - a kao dodatak upotrijebit ćemo i BitPlayer Micro: bit ekstenziju, koja nam omogućava praktičniju igru.

Budući da se ovaj vodič odnosi na kodiranje igre u Micropythonu, umjesto tradicionalnog postupnog slijeda koji smo ranije koristili za vodiče iz grafičkog programiranja, prelazit ćemo kod po blok-pregledavajući važne funkcije, klase i glavne petlja. Cijeli kôd možete preuzeti u GitHub spremištu ovog projekta. Zakopčajte se i počnimo!

Supplies

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 je pročitati kao "funkciju unutar klase". Više o metodama možete pročitati ovdje.

Ulazimo u glavnu petlju sa

dok nije game_over:

stanje. Unutra dobivamo broj osvajača, šanse za njihovo pojavljivanje i broj potreban za prelazak na sljedeći nivo iz rječnika nivoa. 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 pokrećemo instancu klase DisplayBuffer i provjeravamo ima li pritisnutih tipki "štit" ili "vatreni metak". Koristimo metodu DisplayBuffer.set () za postavljanje objekata za kasnije iscrtavanje. Za iscrtavanje štita direktno koristimo DisplayBuffer.set (), ali za metke i napadače dodajemo ih na njihovu listu 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 ekranu jednom pri svakoj iteraciji glavne petlje sa

dispBuf.render ()

Prije kraja glavne petlje provjeravamo je li neki od metaka napadača stigao do kraja ekrana, a ako jesu, brišemo ih s njihovih odgovarajućih lista.

Korak 2: Joystick

Joystick
Joystick

BitPlayer je jednostavan za držanje i upotrebu, sa džojstikom s 2 osi, poput Gameboy ili PSP kontrolera, također uključuje još 6 programabilnih tipki označenih kao L, R, A, B, C i D. Za impresivno i interaktivno iskustvo, BitPlayer sama sadrži zujalicu, motor za vibracije i Grove I2C priključak za povezivanje dodatnih perifernih uređaja poput OLED ekrana.

Za ovu igru koristimo samo lijevo-desno klackalicu joysticka, za potpuni primjer korištenja svih BitPlayer tipki možete pogledati joystick_example.py u GitHub spremištu 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 od False prema otkrivenom smjeru.

Pogledajmo konkretan primjer kako to funkcionira:

Recimo da je naše zadano očitanje osi X 0. Zatim, 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 Left> 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

Display Buffer
Display Buffer

DisplayBuf klasa je odgovorna za kontrolu LED ekrana. To se radi pomoću dvije metode, set () i render (). metoda set () mijenja vrijednosti koje odgovaraju pikselima LED ekrana. Možda se sjećate da se pikseli na Micro: bit LED ekranu mogu izraziti kao niz ili lista - "00000: 00000: 00000: 00000: 00000" je prazan ekran. "00000: 00000: 00000: 00000: 00100" je ekran sa slabo osvetljenim pikselom u centru donjeg reda.

00000:

00000

:00000

:00000:

00100"

Ovaj zapis bi bilo lakše obraditi:)

Dakle, ono što radimo tokom glavne petlje je poziv 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. Instance klase selidbe imaju svoje x, y lokacije i brzinu, kao i svjetlinu. Mover klasa ima dvije metode instance, set () i move (). metoda set () jednostavno poziva DisplayBuf metodu set () s ažuriranim koordinatama radi spremanja za kasnije iscrtavanje na LED matrici. metoda move () ažurira koordinate instance prema brzini instance - to postaje korisno kasnije, kada moramo mijenjati brzinu napadača kako nivoi napreduju.

Klasa Bullet i klasa Invader su potklase klase Mover. Ovdje koristimo nešto što se naziva nasljeđivanje. Funkcionalnost super () omogućava nam pozivanje metoda superklase 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 biste mogli poboljšati kôd igre - na primjer, od sada igra ima samo jedan nivo - možete dodati izazovne. Također, kao što se možda sjećate, originalna igra ima kamenje koje pluta ispred igrača, a koje možete i dodati.

Ako ipak napravite poboljšanu verziju igre, podijelite je u komentarima ispod! Za više informacija o BitPlayer -u 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 kreirao Kickstarter kampanju za MARK (Make A Robot Kit), komplet robota za učenje kodiranja, robotike, AI!

Originalni Micropython kôd iz hexkcd/micro-vaders-a promijenjen je da radi sa TinkerGen BitPlayer-om.

Preporučuje se: