Aprender a escribir código puede ser un largo viaje. No solo tienes que encontrar recursos que te ayuden a aprender, sino que también tienes que encontrar ideas de proyectos emocionantes que mantengan tu educación en el buen camino.

Los videojuegos brindan una gran oportunidad para programar algo que puedas disfrutar. Y también pueden enseñarte los fundamentos que necesitas para ser un buen programador. Este artículo explora un proyecto de videojuego Arduino portátil de bricolaje para comenzar.

¿Qué estamos haciendo y por qué?

Antes de sumergirse en la parte de la guía de este artículo, tiene sentido explorar lo que estamos haciendo y por qué lo hemos elegido para este proyecto. Varios desafíos vienen con la creación de juegos para dispositivos como Arduinos.

  • Espacio de almacenamiento: la mayoría placas arduino vienen con muy poca RAM o memoria flash. Esto no solo pone un límite a la cantidad de código que pueden ejecutar, sino que también presenta desafíos cuando se trata de trabajar con variables.
  • instagram viewer
  • Potencia de procesamiento: el Arduino que usamos tiene una CPU de bajo consumo, por lo que es imposible crear aplicaciones que consumen muchos recursos.
  • Componentes limitados: los Arduinos tienen muchos pines disponibles, pero muchos componentes necesitan más de uno. Esto nos limita cuando se trata de controles y salidas de pantalla.

Con estos desafíos en mente, decidimos crear un dispositivo portátil que ejecute un juego muy simple basado en reacciones. Podrías crear fácilmente otros juegos para el hardware con el que estamos trabajando, y te animamos a que seas creativo.

El juego en sí es muy simple. Aparecen tres bloques en la pantalla, dos delineados y uno relleno, cada uno con un botón físico correspondiente debajo. El jugador tiene que presionar el botón derecho en cada ronda para continuar jugando, y si presiona el botón incorrecto o se queda sin tiempo, el juego termina. Cada vez que se presiona un botón con éxito, se otorgan puntos. El juego aumenta lentamente su dificultad al reducir el tiempo de reacción disponible.

Cableado de la pantalla OLED, Arduino y botones

Conectar el juego de la computadora de mano es el primer paso de este proceso. Como puede ver en el diagrama de circuito de arriba, no tiene que hacer muchas conexiones para comenzar, e incluso puede usar una placa de pruebas para este proyecto.

Ya hemos publicado una guía para ayudarte a botones pulsadores de alambre a un Arduino. Nuestro Proyecto de monitor de acuario Arduino le muestra cómo usar una pantalla OLED con un microcontrolador como este. Como tal, nos centraremos en el código de este proyecto durante el resto de este artículo.

Código de juego portátil Arduino

El formato adecuado y las estructuras de archivos ordenadas son muy importantes tanto para los programadores novatos como para los veteranos. Se agradecerá a sí mismo por tomarse el tiempo para organizar su código ordenadamente si alguna vez tiene que volver a revisarlo.

El código usa un archivo INO principal para formar la base de nuestro proyecto. También hay un archivo C++ para controlar nuestra pantalla, un archivo C++ para ejecutar el código principal del juego y un archivo de biblioteca Arduino para conectarlo todo.

Profundizaremos en este código a continuación, pero lo alentamos a que eche un vistazo al código comentado en nuestro Proyecto Arduino Handheld Game en GitHub. Le ayudará a consultarlo junto con este artículo.

El archivo de la biblioteca (library.h)

Nuestro archivo de biblioteca cumple una función crucial, conectando nuestros otros archivos de proyecto para que puedan funcionar como una sola aplicación. Este archivo contiene declaraciones para incluir la biblioteca Arduino.h y todas las funciones dentro de nuestro código de juego que necesitan funcionar entre nuestros archivos. Sin esto, nuestro código simplemente no funcionaría.

El archivo INO principal (main.ino)

Como muchos proyectos de Arduino, este comenzó con la plantilla predeterminada proporcionada por el IDE de Arduino. Esa plantilla le da configuración y círculo funciones que usamos para llamar funciones en nuestros otros archivos. Este archivo también tiene una declaración para incluir el archivo library.h.

La función de configuración es ideal para inicializar nuestra pantalla y botones, ya que solo se ejecuta una vez cuando Arduino se reinicia o enciende. Para esto, llamamos a la función disSetup() en nuestro archivo de pantalla y a la función butSetup() en nuestro archivo de juego.

Nuestra función loop() es incluso más simple que la función setup(), con solo una llamada a la función gameState() que se encuentra en nuestro archivo de juego. Exploraremos esto con mayor detalle más adelante en el artículo.

El archivo de código de visualización (display.cpp)

Estamos usando una pantalla OLED SSD1306 para este proyecto, aunque puede usar un tipo diferente de pantalla si edita el código en consecuencia. Este archivo comienza con la inclusión del archivo de biblioteca, biblioteca.h. Luego incluye declaraciones para las bibliotecas SPI, Wire, Adafruit_GX y Adafruit_SSD1306. Después de eso, define algunas constantes para proporcionar configuraciones para la pantalla.

La primera función, desinstalar, inicializa la pantalla y muestra una pantalla de bienvenida con el logotipo. Luego borra la pantalla después de esperar aproximadamente 2 segundos. Nuestro archivo principal, main.ino, llama a disSetup en su configuración función.

El resto de funciones de este archivo, excepto timerBar(), forman las diferentes pantallas que se ven a lo largo del juego. El archivo del juego, juego.cpp, llama a cada una de estas funciones.

  • startGame(): esta función controla la primera pantalla que ve el jugador. Simplemente pregunta si están listos mientras llama al cambiarInstancia función que se encuentra en el archivo del juego.
  • partida inicial (): una vez que el jugador comienza el juego, esta pantalla muestra una breve cuenta regresiva. Luego cambia el estado del juego para que coincida.
  • inGame(): esta es la más compleja de nuestras funciones de visualización y utiliza tres variables para cargar cada ronda del juego. Comienza con una declaración if que determina cuál de los tres mosaicos se debe llenar, seguido de mostrar los mosaicos y el nivel y la puntuación del jugador.
  • timerBar(): esta función utiliza una variable para mostrar una barra de tiempo en la parte inferior de la pantalla. Muestra al jugador cuánto tiempo tiene para cada ronda.
  • SuccessScreen(): esta es una función simple que muestra un mensaje cada vez que el jugador completa con éxito una ronda.
  • endGame(): esta función final muestra una pantalla de finalización del juego con la puntuación del jugador y la opción de comenzar el juego nuevamente.

El archivo de código del juego (game.cpp)

Finalmente, como último archivo para explorar, es hora de mirar el código del juego. Este archivo, como los demás, comienza con la inclusión del archivo library.h. También contiene una larga lista de diferentes variables enteras que usamos durante el juego.

Encontrará la función butSetup() antes que nada. La función setup() en nuestro archivo principal llama a butSetup. Esta función utiliza variables para configurar nuestros botones como entradas que podemos leer más adelante.

  • switchInstance (): esta función cambia entre instancias del juego, desde la pantalla de inicio hasta el juego y las pantallas de finalización del juego. Recibe una variable para indicarle a qué estado del juego debe cambiar. Una instrucción if espera que se presione un botón para iniciar el juego desde el estado startGame(). Otra instrucción if inicia el juego nuevamente desde el estado endGame().
  • gameState(): esta función establece la dificultad del juego en función de la puntuación del jugador y llama a la función correcta según el estado del juego. Comienza con una serie de declaraciones if que establecen variables basadas en la puntuación del jugador, seguida de más declaraciones if para verificar la instancia actual.
  • tileSelector(): Esta función genera un número aleatorio entre 0 y 2 que le dice al juego cuál de las tres fichas debe llenar en un momento dado.
  • theGame(): esta función es posiblemente la más importante de todas. llama al selector de azulejos y En el juego funciones, eligiendo un nuevo mosaico y mostrándolo en la pantalla. Después de esto, encontrarás un ciclo for que actúa como un cronómetro para cada ronda. Contiene un conjunto de sentencias if que detectan las pulsaciones de botones y determinan si son correctas.

Construyendo tu propio juego Arduino portátil

Este artículo es un complemento del código del proyecto que se encuentra en GitHub. Puede encontrar más información sobre las líneas de código específicas que hemos utilizado en los comentarios de esos archivos. Pero también puedes simplemente cargarlo en tu Arduino y disfrutar de la diversión.

La creatividad es clave en el mundo del desarrollo de juegos, y lo alentamos a que trabaje en sus propias ideas de juegos junto con esta.

Los 10 mejores proyectos de radio Arduino

Leer siguiente

CuotaPíoCuotaCorreo electrónico

Temas relacionados

  • Programación
  • bricolaje
  • Ideas de proyectos de bricolaje
  • Tutoriales de proyectos de bricolaje
  • arduino
  • Programación

Sobre el Autor

samuel l Garbett (41 artículos publicados)

Samuel es un escritor de tecnología con sede en el Reino Unido apasionado por todo lo relacionado con el bricolaje. Habiendo iniciado negocios en los campos del desarrollo web y la impresión 3D, además de haber trabajado como escritor durante muchos años, Samuel ofrece una visión única del mundo de la tecnología. Centrándose principalmente en proyectos tecnológicos de bricolaje, nada le gusta más que compartir ideas divertidas y emocionantes que puedes probar en casa. Fuera del trabajo, generalmente se puede encontrar a Samuel montando en bicicleta, jugando videojuegos de PC o intentando desesperadamente comunicarse con su cangrejo mascota.

Más de Samuel L. Garbett

Suscríbete a nuestro boletín

¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse