Sommario:

Ricreare il gioco più difficile del mondo su Arduino: 7 passaggi
Ricreare il gioco più difficile del mondo su Arduino: 7 passaggi

Video: Ricreare il gioco più difficile del mondo su Arduino: 7 passaggi

Video: Ricreare il gioco più difficile del mondo su Arduino: 7 passaggi
Video: La canzone più pericolosa del mondo? #shorts #piano #canzoni 2024, Novembre
Anonim
Image
Image

Questo progetto è basato su un gioco per computer che puoi trovare online. Il suo nome è "Il gioco più difficile del mondo". Sono stato in grado di ricrearlo su Arduino usando una matrice LED a quattro moduli. In questo tutorial ti insegno come costruirlo da solo. Prima di entrare in troppi dettagli, voglio dare una rapida panoramica dei passaggi che ho seguito per creare questo gioco.

  1. Ho raccolto tutte le parti necessarie.
  2. Ho collegato le parti insieme.
  3. Ho scritto uno schizzo che utilizzava il joystick per spostare i LED dei giocatori su tutti i moduli.
  4. Ho progettato i primi ostacoli e li ho aggiunti allo schizzo in modo che emulassero il Worlds Hardest Game.
  5. Ho quindi aggiunto il codice per rilevare una collisione con gli ostacoli, che riavvierà il gioco.
  6. E poi ho progettato altri due livelli di ostacoli.

Passaggio 1: tutte le parti

Tutte le parti
Tutte le parti
Tutte le parti
Tutte le parti

Ecco un elenco di tutte le parti necessarie:

  1. Un connettore Arduino UNO e USB:
  2. A quattro moduli 8x8: matrice LED
  3. Un joystick:
  4. 10 fili da maschio a femmina:

Passaggio 2: come collegare le parti ad Arduino

Come collegare le parti ad Arduino
Come collegare le parti ad Arduino

Come collegare la matrice LED ad Arduino

  1. GND va a GND
  2. VCC va a 5V
  3. DataIn va al pin digitale 12
  4. CLK va al pin digitale 11
  5. CS o LOAD va al pin digitale 10

Come collegare il joystick

  1. GND va a GND
  2. 5V va a 5V
  3. VRx va al pin analogico A0
  4. VRy va al pin analogico A1
  5. SW non utilizzato

La batteria si collega al jack 9v per dare alimentazione ad Arduino

Passaggio 3: diagramma di flusso del programma

Diagramma di flusso del programma
Diagramma di flusso del programma

L'ovale indica l'inizio del programma.

Il primo passo è definire tutti gli ostacoli.

I prossimi due passaggi indicano l'impostazione delle variabili e l'attivazione di tutti i moduli.

Il passaggio successivo consiste nell'impostare i LED sul primo livello e su qualsiasi altra variabile.

Successivamente visualizza il livello in cui si trova attualmente il giocatore.

Il rombo indica la lettura del Joystick per vedere in quale direzione viene spinto.

Quindi muovi il giocatore nella direzione in cui è stato premuto il Joystick.

Controlla e vedi se il giocatore si è scontrato con un ostacolo.

Se il giocatore colpisce un ostacolo, torna al primo livello. In caso contrario, controlla se il giocatore ha raggiunto la fine del livello.

Se il giocatore è alla fine del livello, passa al livello successivo, quindi torna a "Visualizza livello attuale". Se non sono alla fine, sposta gli ostacoli e torna a "Leggi joystick".

Passaggio 4: programmazione del joystick

Ovviamente per muovere il puntino che è il giocatore, abbiamo bisogno di un joystick. e per consentire al joystick di spostare effettivamente il lettore, è necessario codificarlo nell'IDE di Arduino. Devi includere la libreria LedControl che puoi trovare andando nel menu schizzo> Includi librerie> gestisci librerie e cerca LedControl. Ecco come appare il codice per il joystick.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; intDIN = 10; LedControl lc=LedControl(DataIn, CLK, DIN, 4); //Crea un oggetto per quattro moduli int delaytime = 50; //velocità di esecuzione del gioco int joystick_RtLt, joystick_UpDn; int giocatori_x = 0; //posizione orizzontale dei giocatori da 0 a 31 int giocatori_y = 3; //posizione verticale dei giocatori da 0 a 7 int riga, colonna, modulo; void setup() { initialize_modules(); //accendi e imposta tutti e quattro i moduli led } void loop() { move_player(); //avvia il ciclo controllando se il giocatore si muove delay(delaytime); } void initialize_modules(){ lc.shutdown(0, false); // avvia il modulo 0 lc.setIntensity(0, 1); lc.shutdown(1, falso); // avvia il modulo 1 lc.setIntensity(1, 1); lc.shutdown(2, falso); // avvia il modulo 2 lc.setIntensity(2, 1); lc.shutdown(3, falso); // avvia il modulo 3 lc.setIntensity(3, 1); lc.clearDisplay(0); // cancella il modulo 0 } void move_player(){ module = players_x/8; //definisce su quale modulo si trova il player column = players_x%8; // definisce la colonna in cui si trova il giocatore sulla riga del modulo = giocatori_y; lc.setLed(modulo, riga, colonna, falso); //spegne il led nella posizione attuale del giocatore joystick_RtLt = analogRead(A0)/204 - 2; //leggi l'X-joystick e mappa l'intervallo da 2 a -2 if(joystick_RtLt > 0) //quando il joystick è a destra players_x++; //vai a destra altrimenti if(joystick_RtLt 0) //se il joystick è a sinistra e non all'inizio players_x--; //sposta il joystick a sinistra_UpDn = analogRead(A1)/204 - 2; //leggi il joystick Y e l'intervallo della mappa da 2 a -2 if(joystick_UpDn 0) //se il joystick è abbassato e il giocatore non è in basso player_y--; //sposta in basso else if(joystick_UpDn > 0 && players_y < 7) //se il joystick è in alto e il giocatore non è in cima players_y++; //vai su modulo = giocatori_x/8; //imposta il modulo sulla nuova posizione dei giocatori colonna = giocatori_x%8; //imposta la colonna sulla nuova posizione dei giocatori riga = giocatori_y; //imposta la riga nella nuova posizione dei giocatori lc.setLed(module, row, column, true); //accendi il led nella nuova posizione del giocatore }

Ora che hai aggiunto il joystick, lavoriamo sul primo ostacolo!

Passaggio 5: il primo livello

Bene, ora è il momento di entrare nella parte principale del programma, gli ostacoli! Gli ostacoli sono ciò che rende davvero questo il "gioco più difficile del mondo". Quindi, se vuoi davvero giocare, devi aggiungere questo al tuo codice:

byte ostacolo[LEVELS][SCENES][COLUMNS][ROWS] = { //tre livelli, 8 scene, 8 colonne, 8 righe

{{{1, 1, 1, 1, 1, 1, 0, 0}, //primo livello, prima scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //primo livello, seconda scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //primo livello, terzo scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //primo livello, quarta scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //primo livello, quinta scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //primo livello, sesta scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, //primo livello, settima scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, //primo livello, ottavo scena {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, void setup() { initialize_modules(); //accendi e imposta tutti e quattro i moduli led start_level(0); void loop() { move_player(); //avvia il ciclo controllando se il giocatore si muove if (collision()){ //controlla il livello di collisione = 0; //se la collisione è vera, resetta il livello start_level(level); //riavvia il gioco }else if(delay_count == ostacolo_delay){ //se nessuna collisione sposta l'ostacolo ogni altro ritardo moveobstacle(); ritardo_conteggio = 0; }else delay_count++; ritardo (ritardo); //ritardo per velocità di gioco}

E questo è il primo ostacolo! Se ti stanchi di questo come primo livello, puoi sempre cambiare i byte, ricorda solo che devi avere otto scene diverse! Continuiamo con il passaggio successivo, il rilevamento delle collisioni!

Passaggio 6: rilevamento delle collisioni

Questo passaggio è un'altra parte importante del gioco, senza di esso non ci sarebbe molta sfida! potresti semplicemente farti strada attraverso gli ostacoli senza alcuna conseguenza! non sarebbe molto divertente vero? quindi rendiamo il gioco più impegnativo (e molto più divertente!) aggiungendo questa sezione del programma:

ciclo vuoto() {

move_player(); //avvia il ciclo controllando se il giocatore si muove if (collision()){ //controlla il livello di collisione = 0; //se la collisione è vera, resetta il livello start_level(level); //riavvia il gioco }else if(delay_count == ostacolo_delay){ //se nessuna collisione sposta l'ostacolo ogni altro ritardo moveobstacle(); ritardo_conteggio = 0; }else delay_count++; ritardo (ritardo); //ritardo in base alla velocità del gioco } int collision(){ //controlla se il giocatore ha colpito un ostacolo nella scena module = players_x/8; colonna = giocatori_x%8; riga = giocatori_y; if(modulo > 0) if(ostacolo[livello][scena][colonna][riga] == 1) //se la posizione del giocatore è la stessa del ritorno dell'ostacolo(1); //collisione rilevata return true return(0); //nessuna collisione restituisce false }

Ed ecco fatto! ora puoi goderti il gioco molto di più! Ora ti mostrerò come programmare gli ultimi due livelli del gioco! hai quasi finito con questo istruibile, e sono sicuro che sei pronto per provarlo!

Passaggio 7: gli ultimi due livelli

Stavamo arrivando alla fine dell'istruibile, questi ultimi due livelli sono tutto ciò che serve per finire questo gioco. Allora puoi provarlo tu stesso! ecco il codice:

byte ostacolo[LEVELS][SCENES][COLUMNS][ROWS] = { //secondo e terzo livello, 8 scene, 8 colonne, 8 righe

{{{1, 0, 0, 0, 0, 0, 0, 1}, //secondo livello, prima scena {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, //secondo livello, seconda scena {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, //secondo livello, terza scena {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, //quarta scena di secondo livello {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, //secondo livello, fif a scena {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // secondo livello, sesta scena {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, //secondo livello, settima scena {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, //scena ottava di secondo livello {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, //terzo livello, prima scena {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, //terzo livello, seconda scena {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //terzo livello, terza scena {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, //terzo livello, quarta scena {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //terzo livello, quinta scena {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, //terzo livello, sesta scena {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //terzo livello, settima scena {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, //terzo livello, ottava scena { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}} };

E questo è tutto! sei pronto per tentare di completare il gioco più difficile del mondo. Anche il codice Arduino completo è allegato di seguito.

Consigliato: