Taula de continguts:

Recreant el joc més difícil del món a l'Arduino: 7 passos
Recreant el joc més difícil del món a l'Arduino: 7 passos

Vídeo: Recreant el joc més difícil del món a l'Arduino: 7 passos

Vídeo: Recreant el joc més difícil del món a l'Arduino: 7 passos
Vídeo: Красивая история о настоящей любви! Мелодрама НЕЛЮБОВЬ (Домашний). 2024, Juliol
Anonim
Image
Image

Aquest projecte es basa en un joc d'ordinador que podeu trobar en línia. El seu nom és "El joc més difícil del món". L’he pogut tornar a crear a l’Arduino mitjançant un LED de quatre mòduls Matrix. En aquest instructiu us ensenyo a construir-lo vosaltres mateixos. Abans d'entrar en massa detalls, vull fer una descripció ràpida dels passos que he seguit per crear aquest joc.

  1. Vaig reunir totes les parts necessàries.
  2. Vaig connectar les parts.
  3. Vaig escriure un esbós que feia servir el joystick per moure els LED dels reproductors a tots els mòduls.
  4. Vaig dissenyar els primers obstacles i els vaig afegir a l'esbós perquè emulessin el joc més difícil del món.
  5. Després he afegit codi per detectar una col·lisió amb els obstacles, que reiniciarà el joc.
  6. I després vaig dissenyar dos nivells més d’obstacles.

Pas 1: totes les parts

Totes les parts
Totes les parts
Totes les parts
Totes les parts

Aquí teniu una llista de totes les parts que necessiteu:

  1. Un connector Arduino UNO i usb:
  2. Un quatre mòduls 8x8: matriu LED
  3. Un joystick:
  4. 10 cables masculins a femenins:

Pas 2: Com connectar les peces a l'Arduino

Com connectar les peces a l'Arduino
Com connectar les peces a l'Arduino

Com connectar la matriu LED a l'Arduino

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

Com connectar el joystick

  1. GND va a GND
  2. 5V passa a 5V
  3. VRx passa al pin analògic A0
  4. VRy passa al pin analògic A1
  5. SW no s’utilitza

La bateria es connecta a la presa de 9 V per donar poder a l’Arduino

Pas 3: diagrama de flux del programa

Organigrama del programa
Organigrama del programa

L’oval indica l’inici del programa.

El primer pas és definir tots els obstacles.

Els dos passos següents indiquen configurar les variables i activar tots els mòduls.

El següent pas és establir els LED al primer nivell i qualsevol altra variable.

A continuació, mostreu el nivell en què es troba actualment el jugador.

El rombe indica la lectura del joystick per veure en quina direcció s’està empenyent.

A continuació, moveu el jugador en qualsevol direcció en què s’hagi empès el joystick.

Comproveu i comproveu si el jugador ha xocat amb un obstacle.

Si el jugador ha tocat un obstacle, torna al primer nivell. Si no, comproveu si el jugador va arribar al final del nivell.

Si el jugador està al final del nivell, establiu-lo al següent nivell i torneu a "Mostrar el nivell actual". Si no són al final, moveu els obstacles i torneu a "Llegiu el joystick".

Pas 4: programació del joystick

Per descomptat, per moure el petit punt que és el jugador, necessitem un joystick. i per permetre que el joystick mogui el reproductor, hem de codificar-lo a l'IDE Arduino. Heu d’incloure la biblioteca LedControl que podeu trobar accedint al menú de croquis> Inclou biblioteques> gestionar biblioteques i cercar LedControl. A continuació s’explica el codi del joystick.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (DataIn, CLK, DIN, 4); // Crea objecte per a quatre mòduls int delaytime = 50; // velocitat a la qual s'executa el joc int joystick_RtLt, joystick_UpDn; int players_x = 0; // posició horitzontal dels jugadors de 0 a 31 int players_y = 3; // posició vertical dels jugadors de 0 a 7 int fila, columna, mòdul; void setup () {initialize_modules (); // activeu i configureu els quatre mòduls led} void loop () {move_player (); // iniciar el bucle comprovant si el jugador es mou endarrerit (delaytime); } void initialize_modules () {lc.shutdown (0, false); // engega el mòdul 0 lc.setIntensity (0, 1); lc.shutdown (1, fals); // engega el mòdul 1 lc.setIntensity (1, 1); lc.shutdown (2, fals); // engega el mòdul 2 lc.setIntensity (2, 1); lc.shutdown (3, fals); // engega el mòdul 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // esborra el mòdul 0} void move_player () {module = players_x / 8; // defineix a quin mòdul es troba el jugador a la columna = players_x% 8; // defineix la columna on es troba el jugador a la fila del mòdul = players_y; lc.setLed (mòdul, fila, columna, fals); // apaga el led a la posició actual del jugador joystick_RtLt = analogRead (A0) / 204-2; // Llegiu el joystick X i el mapa oscil·la entre 2 i -2 si (joystick_RtLt> 0) // quan el joystick es troba als reproductors adequats_x ++; // anar a la dreta si (joystick_RtLt 0) // si el joystick es troba a l'esquerra i no al principi players_x--; // moure a l'esquerra joystick_UpDn = analogRead (A1) / 204 - 2; // llegeix el joystick Y i el mapa oscil·la entre 2 i -2 si (joystick_UpDn 0) // si el joystick està inactiu i el jugador no està a la part inferior players_y--; // moure cap avall else if (joystick_UpDn> 0 && players_y <7) // si el joystick està activat i el jugador no està al top players_y ++; // puja mòdul = players_x / 8; // defineix el mòdul a la nova posició dels jugadors columna = players_x% 8; // estableix la columna a la nova posició dels jugadors fila = jugadors_y; // estableix fila a la nova posició dels jugadors lc.setLed (mòdul, fila, columna, true); // activa el led a la nova posició del jugador}

Ara que heu afegit el joystick, anem a treballar en el primer obstacle.

Pas 5: el primer nivell

Molt bé, així que ara toca entrar a la part principal del programa, els obstacles. Els obstacles són el que realment fa que aquest sigui el "joc més difícil del món". Per tant, si voleu jugar realment al joc, haureu d’afegir-lo al vostre codi:

byte obstacle [NIVELLS] [ESCENES] [COLUMNES] [FILES] = {// tres nivells, 8 escenes, 8 collums, 8 files

{{{1, 1, 1, 1, 1, 1, 0, 0}, // primer nivell, primera escena {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, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primer nivell, segona escena {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}, // primer nivell, tercer escena {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}, // primer nivell, quarta escena {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}, // primer nivell, cinquena escena {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}, // primer nivell, sisena escena {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, 0, 1, 1, 1, 1, 1, 1}, // primer nivell, setena escena {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}, // primer nivell, vuitè escena {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, 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}}}, configuració nul·la () {initialize_modules (); // activeu i configureu els quatre mòduls led start_level (0); bucle buit () {move_player (); // iniciar el bucle comprovant si el jugador es mou si (col·lisió ()) {// comprova si hi ha un nivell de col·lisió = 0; // si la col·lisió és certa, restableix el nivell start_level (nivell); // reinicia el joc} else if (delay_count == obstacle_delay) {// if no col·lision move obstacle every other delay moveobstacle (); demora_compte = 0; } else delay_count ++; retard (delaytime); // retard per velocitat de joc}

I aquest és el primer obstacle! Si t’avorreixes com a primer nivell, sempre podràs canviar els bytes; recorda que has de tenir vuit escenes diferents. Continuem amb el pas següent, la detecció de col·lisions.

Pas 6: detecció de col·lisions

Aquest pas és una altra part important del joc, sense que hi hagi cap desafiament. només podríeu obrir-vos camí a través dels obstacles sense cap conseqüència. això no seria molt divertit oi? Així que fem que el joc sigui més desafiant (i molt més entretingut!) afegint aquesta secció del programa:

bucle buit () {

move_player (); // iniciar el bucle comprovant si el jugador es mou si (col·lisió ()) {// comprova si hi ha un nivell de col·lisió = 0; // si la col·lisió és certa, restableix el nivell start_level (nivell); // reinicia el joc} else if (delay_count == obstacle_delay) {// if no col·lision move obstacle every other delay moveobstacle (); demora_compte = 0; } else delay_count ++; retard (delaytime); // retard per velocitat de joc} int collision () {// comproveu si el jugador ha xocat amb un obstacle a l'escena module = players_x / 8; columna = players_x% 8; fila = jugadors_y; if (mòdul> 0) if (obstacle [nivell] [escena] [columna] [fila] == 1) // si la posició del jugador és la mateixa que la tornada d'obstacles (1); // col·lisió detectada return true return (0); // no hi ha retorn de col·lisió fals}

I aquí està! ara podeu gaudir del joc molt més! Ara us mostraré com programar els dos darrers nivells del joc. gairebé heu acabat amb aquest instructiu i estic segur que esteu a punt per provar-ho.

Pas 7: els dos darrers nivells

Arribaven al final de l’instructible, aquests dos darrers nivells són tot el que necessiteu per acabar aquest joc. Llavors, podeu provar-ho vosaltres mateixos! aquí teniu el codi:

byte obstacle [NIVELLS] [ESCENES] [COLUMNES] [FILES] = {// segon i tercer nivell, 8 escenes, 8 columnes, 8 files

{{{1, 0, 0, 0, 0, 0, 0, 1}, // segon nivell, primera escena {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}, // segon nivell, segona escena {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}, // segon nivell, tercera escena {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 escena de segon nivell {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}, // segon nivell, fif escena {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}, // segon nivell, sisena escena {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}, // segon nivell, setena escena {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}, // vuitena escena de segon nivell {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}, // tercer nivell, primera escena {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}, // tercer nivell, segona escena {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}, // tercer nivell, tercera escena {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}, // tercer nivell, quarta escena {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}, // tercer nivell, cinquena escena {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}, // tercer nivell, sisena escena {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}, // tercer nivell, setena escena {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}, // tercer nivell, vuitena escena { 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}}}};

I ja està! ja esteu a punt per intentar completar el joc més difícil del món. A continuació, també s’adjunta el codi Arduino complet.

Recomanat: