Cuprins:

Space Invaders în Micropython pe Micro: bit: 5 pași
Space Invaders în Micropython pe Micro: bit: 5 pași
Anonim
Image
Image

În articolele noastre anterioare am explorat crearea de jocuri pe GameGo, o consolă portabilă de jocuri retro dezvoltată de TinkerGen education. Jocurile pe care le-am făcut amintesc de vechile jocuri Nintendo. În articolul de astăzi, vom face un pas înapoi, până în epoca de aur a jocurilor arcade. Vom recrea jocul Space Invaders în Micropython on Micro: bit microcontroller - și, ca o întorsătură, vom folosi și BitPlayer Micro: bit extension, care ne permite să jucăm jocul mai convenabil.

Deoarece acest tutorial este despre codificarea jocului în Micropython, în loc de secvența tradițională etapă cu etapă pe care o foloseam anterior pentru tutoriale de programare grafică, vom trece peste codul cu bloc - trecând în revistă funcțiile importante, clasele și principalele buclă. Puteți descărca codul complet în depozitul GitHub al acestui proiect. Închideți-vă și să începem!

Provizii

TinkerGen BitPlayer

BBC Micro: bit

Pasul 1: Bucla principală

Joystick
Joystick

În acest tutorial voi folosi cuvântul „metodă” destul de des. O metodă în python este oarecum similară cu o funcție, cu excepția faptului că este asociată cu obiect / clase. Deci, pentru simplificare, îl puteți citi ca „o funcție în cadrul clasei”. Puteți citi mai multe despre metode aici.

Intrăm în bucla principală cu

în timp ce nu game_over:

condiție. În interior avem numărul de invadatori, șansa de a apărea și numărul necesar pentru a ajunge la nivelul următor din dicționarul de niveluri. Apoi verificăm mișcarea stânga-dreapta cu metodele de instanță Listen_Dir ale instanței de clasă JoyStick. Dacă una dintre condiții este evaluată ca fiind Adevărată, vom crește / micșora valoarea x a personajului nostru jucabil. O constrângem la [-2, 2] cu două condiții if. Apoi inițializăm o instanță a clasei DisplayBuffer și verificăm dacă există apăsări pe butonul „scut” sau „foc de foc”. Folosim metoda DisplayBuffer.set () pentru a seta obiecte pentru redarea ulterioară. Pentru redarea scutului folosim DisplayBuffer.set () direct, dar pentru gloanțe și invadatori le adăugăm la lista lor respectivă și le setăm () unul câte unul în buclă cu următorul cod pentru redarea ulterioară cu DispBuffer.render ():

pentru b în gloanțe: b.render (dispBuf) pentru v în vaders: v.render (dispBuf)

Toți invadatorii, gloanțele și scutul sunt redate pe afișaj odată cu fiecare iterație a buclei principale cu

dispBuf.render ()

Înainte de sfârșitul buclei principale verificăm dacă vreunul dintre gloanțele invadatorilor a ajuns la sfârșitul ecranului și, dacă sunt, le ștergem din listele lor respective.

Pasul 2: Joystick

Joystick
Joystick

BitPlayer este ușor de ținut și de utilizat, cu un joystick pe 2 axe precum Gameboy sau controlere PSP, include și alte 6 butoane programabile etichetate ca L, R, A, B, C și D. Pentru o experiență captivantă și interactivă, BitPlayer în sine are un buzzer, un motor de vibrații și un port Grove I2C pentru a conecta periferice suplimentare, cum ar fi un afișaj OLED.

Pentru acest joc folosim doar stânga-dreapta a joystick-ului, pentru un exemplu complet despre utilizarea tuturor butoanelor BitPlayer, puteți arunca o privire la joystick_example.py în depozitul GitHub al acestui proiect. La crearea instanței clasei JoyStick verificăm citirea implicită a axei X și stocăm acea valoare în self. Read_X. Apoi, în funcția Listen_Dir, verificăm dacă abaterea de la acea valoare implicită este mai mare decât variabila de sensibilitate (încercați să o modificați singur, dacă credeți că JoyStick este prea sensibil) și returnăm True of False în funcție de direcția detectată.

Să aruncăm o privire la un exemplu concret de funcționare:

Să presupunem că citirea implicită pe axa X este 0. Apoi, dacă mutăm joystick-ul spre dreapta:

New_X = JoyStick_X.read_analog () # New_X = 200

Dreapta = New_X - self. Read_X #Right = 200 Stânga = self. Read_X - New_X #Left = -200

Atunci când verificăm direcția:

Precision = 150if Right> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Stânga> Precision: # -200> 150 False Get_Rocker = DIR ['L'] altfel: Get_Rocker = DIR ['NONE'] dacă Dir == Get_Rocker: return True else: return False

Pasul 3: Afișare tampon

Afișare tampon
Afișare tampon

Clasa DisplayBuf este responsabilă de controlul ecranului cu LED-uri. Se face folosind două metode, set () și render (). set () metoda modifică valorile corespunzătoare pixelilor ecranului LED. Vă amintiți că pixelii de pe ecranul LED Micro: bit pot fi exprimați ca șir sau o listă - „00000: 00000: 00000: 00000: 00000” este un ecran gol. „00000: 00000: 00000: 00000: 00100” este un ecran cu pixel slab luminat în centrul rândului inferior.

00000:

00000

:00000

:00000:

00100"

Această notație ar putea fi mai ușor de procesat:)

Deci, ceea ce facem în timpul buclei principale este metoda call set () a DisplayBuf pentru a seta toate obiectele noastre care trebuie afișate pe ecran. Apoi folosim metoda render () pentru a le arăta pe toate simultan pe ecran.

Pasul 4: invadatori, gloanțe și jucător

Invadatori, gloanțe și jucătorul
Invadatori, gloanțe și jucătorul

Gloanțele și invadatorii aparțin clasei Mover. Instanțele clasei Mover au locațiile și viteza lor x, y, precum și luminozitatea. Clasa Mover are două metode de instanță, set () și move (). metoda set () apelează pur și simplu metoda DisplayBuf set () cu coordonatele actualizate pentru a le salva pentru redarea ulterioară pe matricea LED. move () actualizează metoda coordonării instanței în funcție de viteza instanței - care va fi utilă mai târziu, atunci când trebuie să schimbăm viteza invadatorilor pe măsură ce nivelurile progresează.

Clasa Bullet și clasa Invader sunt subclasele clasei Mover. Aici folosim ceva numit moștenire. Funcționalitatea super () ne permite să apelăm metodele superclasei în subclasă, fără a fi nevoie să repetăm codul.

Pasul 5: Fă-ți propriul

Fă-ți propriul
Fă-ți propriul

Felicitări! Tocmai ați creat din nou jocul clasic Space Invaders pe Micro: bit cu niște hardware-uri de joc cool. Desigur, ați putea îmbunătăți codul jocului de aici - de exemplu, de acum, jocul are doar un nivel - puteți adăuga altele mai provocatoare. De asemenea, după cum ți-ai aminti, jocul original are pietre plutind în fața jucătorului, pe care le poți adăuga și tu.

Dacă faceți o versiune îmbunătățită a jocului, împărtășiți-o în comentariile de mai jos! Pentru mai multe informații despre BitPlayer și alte hardware pentru producători și educatori STEM, vizitați site-ul nostru web, https://tinkergen.com/ și abonați-vă la newsletter-ul nostru.

TinkerGen a creat recent o campanie Kickstarter pentru MARK (Make A Robot Kit), un kit robot pentru predarea codificării, roboticii, AI!

Codul original Micropython de la hexkcd / micro-vaders a fost schimbat pentru a funcționa cu TinkerGen BitPlayer.

Recomandat: