Sadržaj:
- Supplies
- 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 izmjena: 2024-01-30 08:05
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
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
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
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č
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
Č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:
Kako pokrenuti servo motore koristeći Moto: bit sa Micro: bit: 7 koraka (sa slikama)
Kako pokrenuti servo motore koristeći Moto: bit sa Micro: bit: Jedan način za proširenje funkcionalnosti micro: bita je upotreba ploče pod nazivom moto: bit kompanije SparkFun Electronics (približno 15-20 USD). Izgleda komplicirano i ima mnogo funkcija, ali nije teško pokrenuti servo motore s njega. Moto: bit vam omogućava da
MQTT baziran na MicroPythonu ESP32: 5 koraka
MQTT Na osnovu 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 da redovno jede u " restoranu " svaki dan. Ali nedavno moram putovati na nekoliko dana i
Lora Gateway baziran na MicroPythonu ESP32: 10 koraka (sa slikama)
Lora Gateway baziran na MicroPythonu ESP32: Lora je vrlo popularna posljednjih godina. Bežični komunikacijski modul koji koristi ovu tehnologiju obično je jeftin (koristeći slobodni spektar), malih dimenzija, energetski učinkovit i ima veliku komunikacijsku udaljenost, a uglavnom se koristi za međusobnu komunikaciju
LCD Invaders: Space Invaders Like Game na 16x2 LCD ekranu sa likovima: 7 koraka
LCD Invaders: Space Invaders Like Game na 16x2 LCD ekranu sa likovima: Nema potrebe za uvođenjem legendarne igre "Space Invaders". Najzanimljivija karakteristika ovog projekta je da koristi grafički prikaz teksta za prikaz. To se postiže implementacijom 8 prilagođenih znakova. Možete preuzeti cijeli Arduino
Luster Space Invaders sa sjajem u mraku: 16 koraka (sa slikama)
Luster Space Invaders sa sjajem u mraku: Upotrijebite 3D modeliranje/štampanje, laserski rezani akril, lijevanje smolom, UV reaktivni pigment, LED diode i neko jednostavno ožičenje za izradu lustera ili lampe visokog stila i retro hladnih svemira. Uključio sam lijep trik za pravljenje zakrivljenih uglova od laserske cu