Sommario:
- Forniture
- Passaggio 1: ciclo principale
- Passaggio 2: joystick
- Passaggio 3: buffer di visualizzazione
- Passaggio 4: invasori, proiettili e il giocatore
- Passaggio 5: crealo da solo
Video: Space Invaders in Micropython su Micro:bit: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Nei nostri articoli precedenti abbiamo esplorato la creazione di giochi su GameGo, una console di gioco retrò portatile sviluppata da TinkerGen education. I giochi che abbiamo realizzato ricordano i vecchi giochi Nintendo. Nell'articolo di oggi, faremo un passo indietro, all'età d'oro dei giochi arcade. Ricreeremo il gioco Space Invaders in Micropython su un microcontrollore Micro:bit e, come variante, utilizzeremo anche l'estensione BitPlayer Micro:bit, che ci consente di giocare in modo più conveniente.
Poiché questo tutorial riguarda la codifica del gioco in Micropython, invece della tradizionale sequenza passo-passo che abbiamo usato prima per i tutorial di programmazione grafica, esamineremo il codice blocco per blocco, esaminando importanti funzioni, classi e le principali ciclo continuo. Puoi scaricare il codice completo nel repository GitHub di questo progetto. Allacciate le cinture e cominciamo!
Forniture
TinkerGen BitPlayer
BBC Micro: bit
Passaggio 1: ciclo principale
In questo tutorial userò la parola "metodo" abbastanza spesso. Un metodo in Python è in qualche modo simile a una funzione, tranne per il fatto che è associato a oggetti/classi. Quindi, per semplificazione, puoi leggerlo come "una funzione all'interno della classe". Puoi leggere di più sui metodi qui.
Entriamo nel ciclo principale con
mentre non è game_over:
condizione. All'interno otteniamo il numero di invasori, la possibilità della loro comparsa e il numero necessario per passare al livello successivo dal dizionario dei livelli. Successivamente controlliamo il movimento sinistra-destra con i metodi di istanza Listen_Dir dell'istanza di classe JoyStick. Se una delle condizioni viene valutata come True, incrementiamo/decrementiamo il valore x del nostro personaggio giocabile. Lo limitiamo a [-2, 2] con due condizioni if. Quindi inizializziamo un'istanza della classe DisplayBuffer e controlliamo la presenza di pulsanti "scudo" o "proiettile di fuoco". Usiamo il metodo DisplayBuffer.set() per impostare gli oggetti per il rendering successivo. Per il rendering dello scudo usiamo direttamente DisplayBuffer.set(), ma per i proiettili e gli invasori li aggiungiamo al rispettivo elenco e li impostiamo uno ad uno nel ciclo for con il seguente codice per il rendering successivo con DispBuffer.render():
per b in punti elenco: b.render(dispBuf) per v in vaders: v.render(dispBuf)
Tutti gli invasori, i proiettili e gli scudi vengono visualizzati una volta che ogni iterazione del ciclo principale con
dispBuf.render()
Prima della fine del ciclo principale controlliamo se qualcuno dei proiettili degli invasori ha raggiunto la fine dello schermo e, in caso affermativo, li eliminiamo dai rispettivi elenchi.
Passaggio 2: joystick
BitPlayer è facile da impugnare e utilizzare, con un joystick a 2 assi come i controller Gameboy o PSP, include anche altri 6 pulsanti programmabili etichettati come L, R, A, B, C e D. Per un'esperienza coinvolgente e interattiva, BitPlayer è dotato di un cicalino, un motore di vibrazione e una porta Grove I2C per collegare periferiche aggiuntive come un display OLED.
Usiamo solo il bilanciere sinistro-destro del joystick per questo gioco, per un esempio completo sull'uso di tutti i pulsanti BitPlayer puoi dare un'occhiata a joystick_example.py nel repository GitHub di questo progetto. Durante la creazione dell'istanza della classe JoyStick controlliamo la lettura predefinita dell'asse X e memorizziamo quel valore in self. Read_X. Quindi nella funzione Listen_Dir, controlliamo se la deviazione da quel valore predefinito è maggiore della variabile di sensibilità (prova a modificarla da solo, se ritieni che JoyStick sia troppo sensibile) e restituiamo True of False in base alla direzione rilevata.
Diamo un'occhiata a un esempio concreto di come funziona:
Diciamo che la nostra lettura predefinita dell'asse X è 0. Quindi, se spostiamo il Joystick a destra:
New_X = JoyStick_X.read_analog() #New_X=200
Destra = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Quindi, quando controlliamo la direzione:
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: restituisce Vero altrimenti: restituisce Falso
Passaggio 3: buffer di visualizzazione
La classe DisplayBuf è responsabile del controllo dello schermo LED. Viene eseguito utilizzando due metodi, set() e render(). Il metodo set() modifica i valori corrispondenti ai pixel dello schermo LED. Potresti ricordare che i pixel sullo schermo LED Micro:bit possono essere espressi come stringa o elenco: "00000:00000:00000:00000:00000" è uno schermo vuoto. "00000:00000:00000:00000:00100" è uno schermo con pixel poco illuminati al centro della riga inferiore.
00000:
00000
:00000
:00000:
00100"
Questa notazione potrebbe essere più facile da elaborare:)
Quindi, ciò che facciamo durante il ciclo principale è chiamare il metodo set() di DisplayBuf per impostare tutti i nostri oggetti che devono essere visualizzati sullo schermo. Quindi usiamo il metodo render() per mostrarli tutti sullo schermo contemporaneamente.
Passaggio 4: invasori, proiettili e il giocatore
I proiettili e gli invasori appartengono alla classe dei Mover. Le istanze della classe Mover hanno le loro posizioni x, y e velocità, oltre alla luminosità. La classe Mover ha due metodi di istanza, set() e move(). Il metodo set() chiama semplicemente il metodo DisplayBuf set() con le coordinate aggiornate da salvare per il rendering successivo sulla matrice LED. Il metodo move() aggiorna le coordinate dell'istanza in base alla velocità dell'istanza - che torna utile in seguito, quando è necessario modificare la velocità degli invasori man mano che i livelli avanzano.
La classe Bullet e la classe Invader sono sottoclassi della classe Mover. Qui usiamo qualcosa chiamato ereditarietà. La funzionalità di super() ci permette di chiamare i metodi della superclasse in sottoclasse, senza bisogno di ripetere il codice.
Passaggio 5: crealo da solo
Congratulazioni! Hai appena ricreato il classico gioco Space Invaders su Micro:bit con un fantastico hardware di gioco. Ovviamente, puoi migliorare il codice di gioco da qui - ad esempio, a partire da ora, il gioco ha solo un livello - puoi aggiungerne di più impegnativi. Inoltre, come ricorderete, il gioco originale ha rocce che galleggiano davanti al giocatore, che puoi anche aggiungere.
Se realizzi una versione migliorata del gioco, condividila nei commenti qui sotto! Per ulteriori informazioni su BitPlayer e altro hardware per produttori ed educatori STEM, visita il nostro sito Web, https://tinkergen.com/ e iscriviti alla nostra newsletter.
TinkerGen ha recentemente creato una campagna Kickstarter per MARK (Make A Robot Kit), un kit robot per insegnare programmazione, robotica, AI!
Il codice Micropython originale di hexkcd/micro-vaders è stato modificato per funzionare con TinkerGen BitPlayer.
Consigliato:
Console da gioco portatile Lego con Space Invaders: 4 passaggi
Console di gioco portatile Lego con Space Invaders: hai mai pensato di essere uno sviluppatore di giochi e di costruire la tua console di gioco con cui puoi giocare in movimento? Tutto ciò di cui hai bisogno è un po' di tempo, hardwareLego bricksa Mini-Calliope (ordinabile su questo sito https://calliope.cc/en) e un po' di abilità
LCD Invaders: un gioco simile a Space Invaders su display LCD a caratteri 16x2: 7 passaggi
LCD Invaders: un gioco simile a Space Invaders su schermo LCD 16x2 caratteri: non è necessario introdurre un leggendario gioco "Space Invaders". La caratteristica più interessante di questo progetto è che utilizza la visualizzazione del testo per l'output grafico. Si ottiene implementando 8 caratteri personalizzati. Puoi scaricare l'Arduino completo
Come creare Space Invaders su Micro Bit.: 4 passaggi
Come creare Space Invaders su Micro Bit.: Quindi il primo passo è creare la nostra nave. Vai a "Base" e aggiungi un "All'inizio" bloccare. Quindi vai a "Variabili" e crei una variabile chiamata "SHIP" e seleziona un blocco dalle "Variabili" scheda t
Programmazione di un Micro:Bit Robot e Joystick:Bit Controller con MicroPython: 11 passaggi
Programmazione di un robot Micro:Bit e controller Joystick:Bit con MicroPython: per Robocamp 2019, il nostro campo estivo di robotica, i giovani di età compresa tra 10 e 13 anni stanno saldando, programmando e costruendo un "robot antipeso" BBC micro:bit, oltre a programmare un micro:bit da usare come telecomando.Se sei attualmente al Robocamp, scia
Orologio Space Invaders (con un budget!): 6 passaggi (con immagini)
Orologio Space Invaders (con un budget!): Recentemente ho visto una bella build di GeckoDiode e ho subito voluto costruirla da solo. L'Instructable è Space Invaders Desktop Clock e ti consiglio di dargli un'occhiata dopo aver letto questo. Il progetto è stato quasi esclusivamente costruito con parti provenienti