Tabla de contenido:

Recreando el juego más difícil del mundo en Arduino: 7 pasos
Recreando el juego más difícil del mundo en Arduino: 7 pasos

Video: Recreando el juego más difícil del mundo en Arduino: 7 pasos

Video: Recreando el juego más difícil del mundo en Arduino: 7 pasos
Video: Hice un JUEGO en C++ (sin morir en el intento…) 2024, Mes de julio
Anonim
Image
Image

Este proyecto se basa en un juego de computadora que puedes encontrar en línea. Su nombre es "El juego más difícil del mundo". Pude recrearlo en el Arduino usando una matriz de LED de cuatro módulos. En este instructivo te enseño cómo construirlo tú mismo. Antes de entrar en demasiados detalles, quiero dar una descripción general rápida de los pasos que seguí para crear este juego.

  1. Reuní todas las piezas necesarias.
  2. Conecté las partes juntas.
  3. Escribí un boceto que usaba el joystick para mover el LED de los jugadores a través de todos los módulos.
  4. Diseñé los primeros obstáculos y los agregué al boceto para que emularan el juego más difícil del mundo.
  5. Luego agregué un código para detectar una colisión con los obstáculos, lo que reiniciará el juego.
  6. Y luego diseñé dos niveles más de obstáculos.

Paso 1: todas las partes

Todas las partes
Todas las partes
Todas las partes
Todas las partes

Aquí hay una lista de todas las piezas que necesita:

  1. Un conector USB y Arduino UNO:
  2. Un módulo de cuatro 8x8: matriz de LED
  3. Un joystick:
  4. 10 cables macho a hembra:

Paso 2: Cómo conectar las piezas al Arduino

Cómo conectar las piezas al Arduino
Cómo conectar las piezas al Arduino

Cómo conectar la matriz LED al Arduino

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

Cómo conectar el joystick

  1. GND va a GND
  2. 5V pasa a 5V
  3. VRx va al pin analógico A0
  4. VRy va al pin analógico A1
  5. SW no se usa

La batería se conecta al conector de 9v para darle energía al Arduino

Paso 3: Diagrama de flujo del programa

Diagrama de flujo del programa
Diagrama de flujo del programa

El óvalo indica el inicio del programa.

El primer paso es definir todos los obstáculos.

Los siguientes dos pasos indican configurar las variables y encender todos los módulos.

El siguiente paso es configurar los LED en el primer nivel y cualquier otra variable.

A continuación, muestre el nivel en el que se encuentra actualmente el jugador.

El rombo indica la lectura del Joystick para ver en qué dirección se empuja.

Luego, mueva al jugador en la dirección en la que se empujó el joystick.

Compruebe y vea si el jugador chocó con un obstáculo.

Si el jugador choca contra un obstáculo, vuelve al primer nivel. De lo contrario, compruebe si el jugador llegó al final del nivel.

Si el jugador está al final del nivel, ajuste al siguiente nivel y luego vuelva a "Mostrar nivel actual". Si no están al final, mueva los obstáculos y vuelva a "Leer Joystick".

Paso 4: Programación del joystick

Por supuesto, para mover el puntito que es el jugador, necesitamos un joystick. y para permitir que el joystick mueva realmente al reproductor, necesitamos codificarlo en el IDE de Arduino. Debe incluir la biblioteca de LedControl que puede encontrar yendo al menú de bocetos> Incluir bibliotecas> administrar bibliotecas y busque LedControl. Así es como se ve el código del joystick.

#include "LedControl.h"

int DataIn = 12; int CLK = 11; int DIN = 10; LedControl lc = LedControl (Entrada de datos, CLK, DIN, 4); // Crea objeto para cuatro módulos int delaytime = 50; // velocidad a la que se ejecuta el juego int joystick_RtLt, joystick_UpDn; int players_x = 0; // posición horizontal de los jugadores de 0 a 31 int players_y = 3; // posición vertical de los jugadores de 0 a 7 int fila, columna, módulo; configuración vacía () {initialize_modules (); // enciende y configura los cuatro módulos led} void loop () {move_player (); // iniciar el ciclo comprobando si el jugador se mueve delay (delaytime); } void initialize_modules () {lc.shutdown (0, falso); // inicia el módulo 0 lc.setIntensity (0, 1); lc.shutdown (1, falso); // inicia el módulo 1 lc.setIntensity (1, 1); lc.shutdown (2, falso); // inicia el módulo 2 lc.setIntensity (2, 1); lc.shutdown (3, falso); // inicia el módulo 3 lc.setIntensity (3, 1); lc.clearDisplay (0); // borra el módulo 0} void move_player () {module = players_x / 8; // define en qué módulo está el jugador column = players_x% 8; // define la columna donde está el jugador en el módulo row = players_y; lc.setLed (módulo, fila, columna, falso); // apaga el led en la posición actual del jugador joystick_RtLt = analogRead (A0) / 204 - 2; // leer X-joystick y rango de mapa de 2 a -2 if (joystick_RtLt> 0) // cuando el joystick está a la derecha players_x ++; // ir a la derecha else if (joystick_RtLt 0) // si el joystick está a la izquierda y no al principio players_x--; // mover el joystick a la izquierda_UpDn = analogRead (A1) / 204 - 2; // lee el joystick Y y el rango del mapa de 2 a -2 if (joystick_UpDn 0) // si el joystick está abajo y el jugador no está abajo players_y--; // mover hacia abajo else if (joystick_UpDn> 0 && players_y <7) // si el joystick está arriba y el jugador no está arriba players_y ++; // subir módulo = jugadores_x / 8; // establece el módulo para los jugadores columna de nueva posición = jugadores_x% 8; // establecer la columna para los jugadores nueva posición fila = jugadores_y; // establece la fila en la nueva posición de los jugadores lc.setLed (módulo, fila, columna, verdadero); // enciende el led en la nueva posición del jugador}

Ahora que ha agregado el joystick, ¡trabajemos en el primer obstáculo!

Paso 5: el primer nivel

Muy bien, ahora es el momento de entrar en la parte principal del programa, ¡los obstáculos! Los obstáculos son los que realmente hacen de este el "Juego más difícil del mundo". Entonces, si realmente quieres jugar el juego, debes agregar esto a tu código:

obstáculo byte [NIVELES] [ESCENAS] [COLUMNAS] [FILAS] = {// tres niveles, 8 escenas, 8 columnas, 8 filas

{{{1, 1, 1, 1, 1, 1, 0, 0}, // primer nivel, 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}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, // primer nivel, segunda 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 nivel, 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}, // primero nivel, cuarta 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 nivel, quinta 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 nivel, sexta 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, 1, 1, 1, 1, 1, 1}, // primer nivel, séptima 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 nivel, octavo 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, 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ón vacía () {initialize_modules (); // enciende y configura los cuatro módulos led start_level (0); bucle vacío () {move_player (); // iniciar el ciclo comprobando si el jugador se mueve if (collision ()) {// comprobar el nivel de colisión = 0; // si la colisión es verdadera, restablecer el nivel start_level (nivel); // reiniciar el juego} else if (delay_count == obstacle_delay) {// si no hay colisión mover el obstáculo cada dos retrasos moveobstacle (); delay_count = 0; } más delay_count ++; delay (delaytime); // retraso por velocidad del juego}

¡Y ese es el primer obstáculo! Si te aburres de esto como tu primer nivel, entonces siempre puedes cambiar los bytes, ¡solo recuerda que necesitas tener ocho escenas diferentes! ¡Continuemos con el siguiente paso, detección de colisiones!

Paso 6: detección de colisiones

Este paso es otra parte importante del juego, ¡sin él no habría mucho desafío! ¡Podrías abrirte camino a través de los obstáculos sin ninguna consecuencia! eso no sería muy divertido, ¿verdad? así que hagamos el juego más desafiante (¡y mucho más entretenido!) agregando esta sección del programa:

bucle vacío () {

mover jugador(); // iniciar el ciclo comprobando si el jugador se mueve if (collision ()) {// comprobar el nivel de colisión = 0; // si la colisión es verdadera, restablecer el nivel start_level (nivel); // reiniciar el juego} else if (delay_count == obstacle_delay) {// si no hay colisión mover el obstáculo cada dos retrasos moveobstacle (); delay_count = 0; } más delay_count ++; delay (delaytime); // retraso por velocidad del juego} int collision () {// verifica si el jugador chocó con un obstáculo en la escena module = players_x / 8; columna = jugadores_x% 8; fila = jugadores_y; if (módulo> 0) if (obstáculo [nivel] [escena] [columna] [fila] == 1) // si la posición del jugador es la misma que la de retorno de obstáculo (1); // colisión detectada return true return (0); // sin colisión devuelve falso}

¡Y ahí tienes! ¡Ahora puedes disfrutar mucho más del juego! ¡Ahora voy a mostrarte cómo programar los dos últimos niveles del juego! Ya casi has terminado con este instructivo, ¡y estoy seguro de que estás listo para probarlo!

Paso 7: Los dos últimos niveles

Estamos llegando al final del instructable, estos dos últimos niveles son todo lo que necesitas para terminar este juego. ¡Entonces puedes probarlo por ti mismo! aquí está el código:

obstáculo byte [NIVELES] [ESCENAS] [COLUMNAS] [FILAS] = {// segundo y tercer nivel, 8 escenas, 8 columnas, 8 filas

{{{1, 0, 0, 0, 0, 0, 0, 1}, // segundo nivel, 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}, // segundo nivel, segunda 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}, // segundo nivel, 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}, // cuarta escena de segundo nivel {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}, // segundo nivel, quince a 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}, // segundo nivel, sexta 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}, // segundo nivel, séptima 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}, // octava escena de segundo nivel {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 nivel, 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 nivel, segunda 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 nivel, 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 nivel, cuarta 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 nivel, quinta 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 nivel, sexta 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 nivel, séptima 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 nivel, octava 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}}}};

¡Y eso es! ya está todo listo para intentar completar el juego más difícil del mundo. Además, el código completo de Arduino se adjunta a continuación.

Recomendado: