Sommario:

Gioco Arduino Space Rocks: 3 passaggi
Gioco Arduino Space Rocks: 3 passaggi

Video: Gioco Arduino Space Rocks: 3 passaggi

Video: Gioco Arduino Space Rocks: 3 passaggi
Video: TD as Game Engine, Part 1: Structure 2024, Novembre
Anonim
Gioco Arduino Space Rocks
Gioco Arduino Space Rocks

Indipendentemente dal fatto che vengano giocati su un computer, su un telefono, su una console di gioco o su una scatola autonoma, molti videogiochi includono un elemento per evitare gli ostacoli. Certo, potrebbero essere assegnati punti per la raccolta di gettoni o per trovare la strada attraverso un labirinto, ma ti assicuro che probabilmente c'è qualcosa nel gioco il cui unico scopo è impedirti di farlo. Il primo videogioco è stato Pong, ma in seguito i giochi più popolari sono stati cose come "Asteroids" o "Pac-Man". Una variazione più recente sarebbe il gioco semplice ma avvincente di "Flappy Birds".

Recentemente ho visto che qualcuno aveva realizzato una semplice versione a due livelli di "Flappy Bird" che veniva riprodotta su un comune LCD 1602. Ho pensato che sarebbe piaciuto ai nipoti, quindi ho deciso di creare la mia variazione da zero. La versione 1602 ha solo due livelli, quindi ho deciso di utilizzare un LCD del 2004 (20x4) invece di aumentare leggermente la difficoltà di gioco. Ho anche deciso di renderlo più simile ad "Asteroids" facendo in modo che il giocatore guidi una "nave" attraverso un labirinto di "rocce spaziali". Anche se non sei interessato a creare il gioco, potrebbero esserci alcuni elementi del software che puoi utilizzare in uno dei tuoi progetti.

Passaggio 1: hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

L'hardware può essere basato praticamente su qualsiasi versione di Arduino. Ho fatto la prototipazione usando un Nano e poi ho masterizzato il codice in un chip ATMega328. Questo è lo stesso chip utilizzato nel Nano, ma usarlo da solo consente una costruzione più compatta e un minor consumo energetico. Come puoi vedere, ho costruito il circuito su una piccola breadboard che si trova sulle spalle del modulo LCD. L'altro aspetto diverso è che il Nano funziona a 16 MHz utilizzando un cristallo esterno, ma ho scelto di utilizzare l'oscillatore integrato da 8 MHz per il chip ATMega328. Ciò consente di risparmiare parti e potenza.

L'LCD del 2004 si interfaccia all'Arduino allo stesso modo di un LCD 1602. Una differenza interessante è nell'indirizzamento delle posizioni di visualizzazione. Ovviamente c'è una differenza perché ci sono quattro linee invece di due ma, nel 2004, la terza linea è un'estensione della prima linea e la quarta linea è un'estensione della seconda linea. In altre parole, se avessi un programma di test che ha appena inviato una stringa di caratteri al display LCD, il 21° carattere verrebbe visualizzato all'inizio della terza riga e il 41° carattere torna all'inizio della prima riga. Uso quella caratteristica nel software per raddoppiare efficacemente la lunghezza del labirinto.

Ho deciso di alimentare la mia versione a batteria, quindi ho utilizzato una comune batteria agli ioni di litio 18650 da 3,6 volt. Ciò ha richiesto l'aggiunta di una piccola scheda per consentire la ricarica USB e un'altra piccola scheda per aumentare la tensione della batteria a 5 volt per l'LCD e il chip ATMega. Le immagini mostrano i moduli che ho usato ma ci sono anche moduli all-in-one che svolgono entrambe le funzioni.

Passaggio 2: software

Il software è lo stesso sia per il chip Nano che per quello ATMega328. L'unica differenza è nel metodo di programmazione. Uso la mia versione barebone del software LCD 1602 e il software LCD in questo progetto si basa su questo. Avevo bisogno di aggiungere funzionalità per indirizzare le linee extra del display del 2004 e ho anche aggiunto routine per spostare il display. Lo spostamento del display fornisce l'effetto di movimento delle "rocce" oltre la "nave".

Come accennato in precedenza, le righe 1 e 3 formano una coda circolare e anche le righe 2 e 4. Ciò significa che dopo 20 turni, le righe 1 e 3 vengono scambiate e le righe 2 e 4 vengono scambiate. Dopo 40 turni le linee tornano nelle loro posizioni originali. A causa di questo comportamento, il labirinto originale di 20 caratteri diventa completamente diverso quando le linee si scambiano. Ciò ha reso la vita interessante quando ho cercato di formare un labirinto. Alla fine ho appena aperto un foglio di calcolo Excel in modo da poter tracciare il percorso senza dover cambiare costantemente il software. Il software fornito qui ha due versioni del labirinto (una è commentata) in modo che tu possa scegliere quale vuoi o crearne una tua.

Inizialmente volevo che fosse abbastanza semplice da permettere ai nipotini di giocarci, ma volevo anche che avesse qualche sfida in più se loro (o qualcun altro) diventavano troppo bravi. Il gioco inizia con la velocità di spostamento impostata a 1 secondo. Il tic rate interno è di 50 ms, ciò significa che ci sono 20 intervalli durante i quali è possibile premere i pulsanti su/giù. In realtà, un pulsante premuto consuma 2 tic perché viene utilizzato un intervallo di 50 ms per rilevare la pressione e un altro intervallo di 50 ms per attendere il rilascio. Con il labirinto predefinito il numero massimo di pressioni richieste prima del turno successivo è tre. Il modo più semplice per aumentare la difficoltà del gioco è accorciare il tempo tra i turni in modo che un paio di righe di codice lo facciano all'aumentare del punteggio. La velocità di cambio è impostata per aumentare di 50 ms ogni 20 turni, con la velocità minima limitata a 500 ms. È facile modificare questi parametri.

Oltre ad alterare la velocità di spostamento, la logica principale nel software è spostare la "nave" e determinare se la "nave" si è scontrata con una "roccia". Queste funzioni sfruttano l'array definito “rock/space” e anche l'array che definisce le locazioni di memoria nel display. Il conteggio degli spostamenti corrisponde alla lunghezza della riga dell'LCD (0-19) e viene utilizzato come indice in questi array. La logica è alquanto complicata dal fatto che le linee si scambiano ogni 20 turni. Una logica simile viene utilizzata per determinare la posizione della "nave" che può trovarsi su una qualsiasi delle quattro linee.

Il punteggio per ogni riproduzione è semplicemente il conteggio del numero di turni che si sono verificati e il punteggio più alto viene salvato nell'EEROM interna del microcontrollore. La libreria EEPROM viene utilizzata per leggere e scrivere su questa memoria. Le routine disponibili consentono letture/scritture a byte singolo e letture/scritture di valori in virgola mobile. Un valore di 0xA5 viene memorizzato nella prima posizione EEROM per indicare che è stato salvato un punteggio elevato. Se tale valore è presente all'accensione, viene letto e visualizzato il valore in virgola mobile per il punteggio più alto. Se il valore 0xA5 non è presente, viene chiamata una routine per inizializzare il punteggio più alto a un valore di 1. Quella stessa routine viene chiamata se si desidera un ripristino del punteggio più alto. Il punteggio più alto viene riportato al valore 1 tenendo premuto uno dei pulsanti su/giù e quindi premendo momentaneamente il pulsante di ripristino.

Passaggio 3: giocare

Giocare
Giocare
Giocare
Giocare

Quando viene applicata l'alimentazione, viene visualizzato il punteggio più alto corrente. Dopo che viene visualizzato il punteggio più alto, vengono visualizzati il labirinto di "rocce" e la "nave", quindi il gioco inizia pochi secondi dopo. Quando la "nave" colpisce una "roccia" il messaggio "CRASH AND BURN" lampeggia alcune volte prima di visualizzare il punteggio del gioco. Se viene raggiunto un nuovo record, viene visualizzato anche quel messaggio. Un nuovo gioco viene avviato premendo il pulsante di ripristino.

Consigliato: