Snake con Arduino usando LCD y Joystick – Completado

Estoy contento de anunciar que al fin he terminado el videojuego que comencé hace casi un mes. Se trata del juego de la serpiente, viborita, snake o como lo conozcas; pero en Arduino usando una LCD.

Antes que nada te invito a ver la primera parte en donde todavía no terminaba el proyecto, el cual pausé porque no tenía los componentes necesarios, pero recientemente llegó mi pedido y pude terminar el proyecto.

Características de snake en Arduino

  • Lleva contador de puntaje
  • La serpiente puede ser movida con cualquier entrada, en este caso es un Joystick pero puede ser un botón, Bluetooth, etcétera
  • Opción para colocar comida en el tablero, de manera aleatoria
  • Si la serpiente come, se hace más larga
  • La pantalla no parpadea

Lecturas recomendadas

Vamos a usar cosas simples, pero si eres un principiante te recomiendo leer los enlaces que dejo a continuación. Para empezar, vamos a generar números aleatorios con Arduino; esto servirá para colocar la comida de manera aleatoria.

En segundo lugar vamos a usar un Joystick conectado al Arduino.

Circuito

Es como combinar el circuito de LCD I2C con Arduino y Arduino con Joystick. Aquí está:

Snake (serpiente) en Arduino con LCD y Joystick

Hay que notar que no he conectado el botón del joystick, pues por ahora no tiene ningún uso.

Nota: he usado un Arduino MEGA pero en un UNO debería funcionar como un encanto.

Comida de la serpiente

Como lo dije, una de las mejoras o actualizaciones es que se coloca comida de manera aleatoria en el escenario.

Para dibujar la comida tenemos dos funciones; una de ella calcula las coordenadas y la otra la coloca sobre el escenario:

Colisiones y puntaje

Le damos seguimiento a la posición de la comida y calculamos si la serpiente colisiona con la misma, es decir, sabemos si la serpiente come, valga la redundancia, comida (podemos imaginar que la serpiente es una anaconda y la comida es un ratón).

De igual modo ahora el puntaje se aumenta de manera correcta.

Dirección con el joystick

También tenemos una función que lee un joystick y devuelve la dirección hacia la que se debe dirigir la serpiente:

Evitar parpadeo de la pantalla

Me di cuenta de que no era necesario invocar al método clear de la pantalla, pues en cada momento se estaba dibujando el nuevo valor; eso redujo que la pantalla parpadee y sea desagradable a la vista.

Snake sobre Arduino – terminado

Finalmente dejaré la prueba de que todo funciona. Primero, el código:

Aquí la demostración de mí jugando:

Parzibyte jugando snake en Arduino usando un joystick

Lo tengo de igual modo en vídeo:

Por cierto, mi mayor puntaje creo que fue 169:

Mayor puntaje obtenido en juego de la serpiente con arduino y LCD

PD: lo sé, mi pantalla está oxidada, le tendré más cuidado.

Conclusión

Dejo el enlace a mi repositorio de GitHub en donde actualizaré el código si lo hago algún día; pero por ahora estoy muy satisfecho con el resultado. No olvides leer la primera parte, pues explico detalles importantes.

De hecho nadie solicitó este juego y no fue un requisito de ningún modo, simplemente fue un capricho. Lo intenté hacer hace algún largo tiempo y no pude, pero al intentarlo de nuevo, lo logré y quedó estupendo.

Si quieres puedes leer más sobre Arduino o Electrónica en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

4 comentarios en “Snake con Arduino usando LCD y Joystick – Completado”

  1. hay un error, no sé a que se refiera, ya pude la dirección LCD, y las librerías y me dice esto:

    es un texto más grande pero se va repitiendo esto varias veces

    In file included from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:32:0,
    from sketch\Proyecto.ino.cpp:1:
    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/binary.h:58:0: note: this is the location of the previous definition
    #define B00000100 4

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/binary.h:58:19: error: expected ‘,’ or ‘…’ before numeric constant
    #define B00000100 4
    ^
    C:\Users\Pedro\OneDrive\Documentos\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:51:12: note: in expansion of macro ‘B00000100’
    #define En B00000100 // Enable bit
    ^~~~~~~~~

Dejar un comentario