La pantalla muestra un personaje que se mueve, mientras el jugador intenta esquivar obstáculos presionando un botón conectado al pin 7. Aquí te explico cada parte importante:
Importación de la librería y configuración inicial
#include <LiquidCrystal.h> // Incluye la librería para controlar una pantalla LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Configura los pines para la pantalla LCD
Aquí se configura la pantalla LCD usando la librería LiquidCrystal. Los números 12, 11, 5, 4, 3 y 2 indican los pines de Arduino a los que se conecta la pantalla.
Creación de Caracteres Personalizados
byte letra1[8] = { B01110, B00100, B11111, B01110, B01010, B01010, B11111, B01010 };
// ...
Se definen varios caracteres personalizados ( letra1, letra2, etc.), cada uno de los cuales usa una matriz de 8 bytes para crear formas en la pantalla. Esto permite mostrar gráficos personalizados, como el personaje y los obstáculos.
Variables globales
int x = 15;
int y = 1;
int obstaculos = 0;
int vel = 300;
int puntaje = 0;
int GameOver = 3;
Estas variables controlan el movimiento del personaje ( xy y), la cantidad de obstáculos superados ( obstaculos), la velocidad de juego ( vel), el puntaje ( puntaje), y la posición del personaje para el fin del juego ( GameOver).
Funciónsetup()
void setup() {
lcd.begin(16, 2); // Configura la pantalla con 16 columnas y 2 filas
lcd.createChar(1, letra1); // Carga caracteres personalizados
// ...
}
Se configura la pantalla y se cargan los caracteres personalizados en el LCD.
Ciclo loop()(Juego Principal)
void loop() {
lcd.setCursor(7, 0);
lcd.print("CISCOPEKE"); // Muestra el nombre en la pantalla
lcd.setCursor(0, 0);
lcd.print(obstaculos); // Muestra el número de obstáculos superados
lcd.setCursor(x, y);
lcd.write(byte(3)); // Dibuja el obstáculo en la posición (x, y)
delay(vel);
lcd.setCursor(x, y);
lcd.write(byte(4));
delay(vel);
lcd.setCursor(x, y);
lcd.write(byte(5));
delay(vel);
lcd.clear();
lcd.setCursor(GameOver, 1);
lcd.setCursor(3, 1);
lcd.write(byte(1)); // Dibuja el personaje
Esta sección despliega en la pantalla el nombre del canal ("CISCOPEKE") y los obstáculos superados. Después, se mueve un obstáculo a través de la pantalla, cambiando de posición en cada ciclo.
Detección de Obstáculos
if (digitalRead(7) == HIGH) { // Detecta si el botón está presionado
lcd.setCursor(3, 1);
lcd.write(byte(0));
lcd.setCursor(3, 0);
lcd.write(byte(2)); // Cambia el personaje de posición para esquivar el obstáculo
}
else if (3 == x) { // Si el personaje no esquiva el obstáculo
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Game Over");
lcd.setCursor(7, 1);
lcd.write(byte(6)); // Muestra el mensaje de "Game Over"
delay(3000);
puntaje = obstaculos; // Guarda el puntaje
lcd.setCursor(3, 1);
lcd.print("Puntaje:");
lcd.setCursor(12, 1);
lcd.print(puntaje);
delay(6000);
obstaculos = 0; // Reinicia el puntaje y los obstáculos
}
Si se presiona el botón en el pin 7, el personaje se mueve para evitar el obstáculo. Si no lo evita (cuando xes 3), se muestra "Game Over" y el puntaje. Luego, se reinician los contadores para empezar un nuevo juego.
Movimiento de Obstáculos y Velocidad
x = x - 1; // Mueve el obstáculo hacia la izquierda
if (x <= 0) { // Cuando llega al borde izquierdo
x = 15; // Resetea la posición del obstáculo a la derecha
}
vel = random(1, 200); // Cambia la velocidad de forma aleatoria
if (GameOver == x) { // Si se supera el obstáculo
lcd.clear();
obstaculos++; // Incrementa el contador de obstáculos superados
}
}
Finalmente, el obstáculo se mueve y la velocidad cambia de manera aleatoria. Si el jugador evita el obstáculo (la variable GameOvercoincide con la posición del obstáculo x), se incrementa el contador obstaculos.
Resumen
El juego consiste en evitar obstáculos que se mueven de derecha a izquierda en la pantalla. El jugador debe presionar un botón para mover al personaje y esquivar el obstáculo.
No hay comentarios:
Publicar un comentario