Taula de continguts:

Space Invaders a Micropython a Micro: bit: 5 passos
Space Invaders a Micropython a Micro: bit: 5 passos

Vídeo: Space Invaders a Micropython a Micro: bit: 5 passos

Vídeo: Space Invaders a Micropython a Micro: bit: 5 passos
Vídeo: Space Invaders in Micropython on Micro:bit 2024, De novembre
Anonim
Image
Image

En els nostres articles anteriors hem explorat la creació de jocs a GameGo, una consola portàtil de jocs retro desenvolupada per TinkerGen education. Els jocs que vam fer recordaven als jocs antics de Nintendo. En l’article d’avui, farem un pas enrere cap a l’època daurada dels jocs arcade. Tornarem a crear el joc Space Invaders a Micropython on Micro: bit microcontroller - i, com a gir, també utilitzarem l’extensió BitPlayer Micro: bit, que ens permet jugar amb més comoditat.

Com que aquest tutorial tracta de codificar el joc a Micropython, en lloc de la seqüència tradicional etapa per etapa que utilitzàvem abans per a tutorials de programació gràfica, anirem repassant el codi per bloc, repassant funcions importants, classes i les principals bucle. Podeu descarregar el codi complet al dipòsit GitHub d’aquest projecte. Sargileu-vos i comencem!

Subministraments

TinkerGen BitPlayer

BBC Micro: bit

Pas 1: bucle principal

Palanca de control
Palanca de control

En aquest tutorial faré servir sovint la paraula "mètode". Un mètode en python és una mica similar a una funció, tret que s’associa amb objectes / classes. Per tant, per simplificar-la, podeu llegir-la com "una funció dins de la classe". Podeu obtenir més informació sobre els mètodes aquí.

Entrem al bucle principal amb

mentre no game_over:

condició. Dins tenim el nombre d’invasors, la possibilitat que apareguin i el nombre necessari per arribar al següent nivell del diccionari de nivells. A continuació, comprovem si hi ha moviment esquerre-dret amb els mètodes d’instància Listen_Dir de la instància de classe JoyStick. Si una de les condicions es valora com a True, incrementem / disminuïm el valor x del nostre personatge jugable. La restringim a [-2, 2] amb dues condicions si. A continuació, inicialitzem una instància de la classe DisplayBuffer i comprovem si hi ha prems de botó "blindatge" o "disparar bala". Utilitzem el mètode DisplayBuffer.set () per establir objectes per a la renderització posterior. Per representar l’escut utilitzem DisplayBuffer.set () directament, però per a vinyetes i invasors els afegim a la seva llista respectiva i els establim () un per un per a bucle amb el codi següent per renderitzar-lo posteriorment amb DispBuffer.render ():

per a b en vinyetes: b.render (dispBuf) per a v en vaders: v.render (dispBuf)

Tots els invasors, les bales i l'escut es mostren una vegada que cada iteració del bucle principal amb

dispBuf.render ()

Abans de finalitzar el bucle principal comprovem si alguna de les vinyetes dels invasors ha arribat al final de la pantalla i, si ho són, les suprimim de les llistes respectives.

Pas 2: Joystick

Palanca de control
Palanca de control

BitPlayer és fàcil de mantenir i utilitzar, amb un joystick de 2 eixos com els controladors Gameboy o PSP, també inclou altres 6 botons programables etiquetats com L, R, A, B, C i D. Per a una experiència immersiva i interactiva, BitPlayer compta amb un brunzidor, un motor de vibració i un port Grove I2C per connectar perifèrics addicionals com una pantalla OLED.

Per a aquest joc, només fem servir el balancí esquerre-dret del joystick, per exemple complet sobre l’ús de tots els botons BitPlayer, podeu consultar joystick_example.py al dipòsit GitHub d’aquest projecte. En crear la instància de la classe JoyStick, comprovem la lectura per defecte de l’eix X i emmagatzemem aquest valor a self. Read_X. A continuació, a la funció Listen_Dir, comprovem si la desviació d’aquest valor per defecte és superior a la variable de sensibilitat (proveu de modificar-ho vosaltres mateixos, si creieu que el JoyStick és massa sensible) i retornem True of False segons la direcció detectada.

Vegem un exemple concret de com funciona això:

Suposem que la nostra lectura predeterminada de l’eix X és 0. Llavors, si movem el joystick cap a la dreta:

New_X = JoyStick_X.read_analog () # New_X = 200

Right = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200

Després, quan comprovem la direcció:

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

Pas 3: Mostra la memòria intermèdia

Memòria intermèdia de visualització
Memòria intermèdia de visualització

La classe DisplayBuf s’encarrega de controlar la pantalla LED. Es fa utilitzant dos mètodes, set () i render (). El mètode set () canvia els valors corresponents als píxels de pantalla LED. Recordeu que els píxels de la pantalla LED Micro: bits es poden expressar com una cadena o una llista: "00000: 00000: 00000: 00000: 00000" és una pantalla buida. "00000: 00000: 00000: 00000: 00100" és una pantalla amb un píxel poc il·luminat al centre de la fila inferior.

00000:

00000

:00000

:00000:

00100"

És possible que aquesta notació sigui més fàcil de processar:)

Per tant, el que fem durant el bucle principal és el mètode call set () de DisplayBuf per configurar tots els nostres objectes que han de mostrar-se a la pantalla. A continuació, fem servir el mètode render () per mostrar-los tots a la pantalla simultàniament.

Pas 4: invasors, bales i el jugador

Invaders, Bullets i el jugador
Invaders, Bullets i el jugador

Les bales i els invasors pertanyen a la classe Mover. Les instàncies de la classe Mover tenen la seva ubicació i velocitat x, y, així com la brillantor. La classe Mover té dos mètodes d’instància, set () i move (). El mètode set () simplement crida al mètode DisplayBuf set () amb coordenades actualitzades per guardar-les per a la renderització posterior a la matriu LED. move () actualitza el mètode de les coordenades de la instància segons la velocitat de la instància, cosa que serà útil més endavant, quan calgui canviar la velocitat dels invasors a mesura que avancin els nivells.

Class Bullet i Invader són subclasses de la classe Mover. Aquí fem servir una cosa anomenada herència. La funcionalitat de super () ens permet cridar mètodes de la superclasse en subclasse, sense necessitat de repetir el codi.

Pas 5: feu-lo vostre

Feu-lo vostre
Feu-lo vostre

Enhorabona! Acabeu de tornar a crear el clàssic joc Space Invaders a Micro: bit amb una mica de maquinari de joc interessant. Per descomptat, podeu millorar el codi del joc a partir d’aquí (per exemple, a partir d’ara, el joc només té un nivell), podeu afegir-ne de més difícils. A més, com recordareu, el joc original té roques flotant davant del jugador, que també podeu afegir.

Si feu una versió millorada del joc, compartiu-la als comentaris següents. Per obtenir més informació sobre BitPlayer i altre maquinari per a fabricants i educadors STEM, visiteu el nostre lloc web, https://tinkergen.com/ i subscriviu-vos al nostre butlletí.

TinkerGen ha creat recentment una campanya Kickstarter per a MARK (Make A Robot Kit), un kit de robot per ensenyar codificació, robòtica i IA.

El codi Micropython original de hexkcd / micro-vaders es va canviar per funcionar amb TinkerGen BitPlayer.

Recomanat: