Taula de continguts:
- Subministraments
- Pas 1: bucle principal
- Pas 2: Joystick
- Pas 3: Mostra la memòria intermèdia
- Pas 4: invasors, bales i el jugador
- Pas 5: feu-lo vostre
Vídeo: Space Invaders a Micropython a Micro: bit: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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
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
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
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
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
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:
Consola de jocs portàtils de Lego amb Space Invaders: 4 passos
Consola de jocs portàtils de Lego amb Space Invaders: Alguna vegada heu pensat en ser desenvolupador de jocs i construir la vostra pròpia consola de jocs per jugar on sigueu? Tot el que necessiteu és una mica de temps, maquinari Lego bricksa Mini-Calliope (es pot demanar en aquest lloc web https://calliope.cc/en)and alguna habilitat
LCD Invaders: un joc de Space Invaders en pantalla de caràcters LCD de 16x2: 7 passos
LCD Invaders: un joc de Space Invaders com a pantalla de caràcters LCD de 16x2: no cal introduir un llegendari joc “Space Invaders”. La característica més interessant d’aquest projecte és que utilitza la visualització de text per a la sortida gràfica. S’aconsegueix implementant 8 caràcters personalitzats. Podeu descarregar Arduino complet
Com fer Space Invaders en micro bits: 4 passos
Com fer Space Invaders en Micro Bit. Per tant, el primer pas és crear la nostra nau. Aneu a " Bàsic " i afegiu un " A l’inici " bloc. Després aneu a " Variables " i creeu una variable anomenada " ENVIAR " i seleccioneu un bloc a la secció "Variables". pestanya t
Rellotge Space Invaders (amb un pressupost limitat): 6 passos (amb imatges)
Rellotge Space Invaders (amb un pressupost limitat): fa poc vaig veure una versió genial de GeckoDiode i de seguida vaig voler construir-la jo mateixa. L’Instruible és el rellotge d’escriptori Space Invaders i us recomano que hi feu una ullada després de llegir això. El projecte es va construir gairebé únicament a partir de peces d’origen
Aranya Space Invaders amb acció Glow in the Dark: 16 passos (amb imatges)
Llum d’aranya Space Invaders amb acció Glow in the Dark: utilitzeu impressió i modelatge 3D, acrílic tallat amb làser, fosa de resina, pigment reactiu UV, LEDs i algun cablejat senzill per fer un llum o una làmpada d’invaders d’espai fresc i retro. He inclòs un bon truc per fer cantonades corbes amb làser