Este es un sencillo juego de serpientes dirigido a niños y aficionados. Este juego está hecho con Arduino.
En este juego de serpientes, la pantalla de matriz de puntos se utiliza para mostrar serpientes y comida. Y la puntuación y el estado del juego, como Game Start y Game Over, se muestran en una pantalla LCD de 16×2 . Para controlar el juego se utilizan cinco botones (Inicio, Arriba, Abajo, Izquierda y Derecha). Para controlar la pantalla Dot Matrix se utilizan registros de desplazamiento . Para iniciar el juego debes presionar el botón Inicio y luego usar otras teclas para orientarte.
A continuación se muestran algunas instantáneas de toda la configuración del proyecto.
Figura 1: Prototipo del juego Snake basado en Arduino
Figura 2: Imagen del módulo LCD que muestra los mensajes iniciales en Snake Game
Figura 3: Imagen del controlador diseñado para el juego Snake basado en Arduino
Figura 4: Imagen de la pantalla Dot Matrix utilizada para jugar Snake Game
Figura 5: descripción general del juego Snake basado en Arduino
Descripción del circuito y componentes utilizados.
Descripción del circuito
Hay una pantalla Dot Matrix utilizada y conectada con Shift Register 74595 . Aquí se utilizan dos registros de desplazamiento, uno para controlar las columnas y el segundo para controlar las filas . Los pines de control del registro de desplazamiento de columna ( ds, sh, st) están conectados directamente al pin Arduino número 12, 10, 11 respectivamente y los pines de control del registro de desplazamiento de fila (ds, sh, st) están conectados al pin Arduino número 9, 8, 7 respectivamente.
Figura 6: Diagrama de pines de la matriz utilizada en el juego Snake
También se conecta una pantalla LCD de 16×2 a este circuito para mostrar la puntuación y el estado del juego , como fin del juego, inicio del juego , etc. Los pines de datos de la pantalla LCD de D4 a D7 están conectados al número PIN de Arduino (16, 15, 14, 13/A2, A1, A0, 13) y los pines de control (RS, EN) de las pantallas LCD están conectados al número de pin de Arduino ( A4 , A3). Para jugar, las teclas de control (abajo, izquierda, derecha, arriba, inicio) están conectadas con los pines digitales (2, 3, 4, 5, 6) del Arduino.
Componentes utilizados
1. Arduino ProMini
2. Pantalla de matriz de puntos de 8 × 8
3. Registro de turno 74595
4. Botones a presión
5. Regístrate
6. Cable de conexión
7. Tabla de pan
8. Fuente de alimentación
Código fuente del proyecto
###
#incluirLcd de cristal líquido (18,17,16,15,14,13); #definir ds_col 12 #definir sh_col 10 #definir st_col 11 #definir ds_row 9 #definir sh_row 8 #definir st_row 7 int inicio=6; int izquierda = 3; int derecha=4; int arriba=5; int abajo=2; carbón de leña (21); fila de caracteres (21); char addc,dirección; columna interna (temperatura interna) { interruptor (temperatura) { caso 1: retorno 1; ruptura; caso 2: devolución 2; romper; caso 3: devolución 4; romper; caso 4: retorno 8; romper; caso 5: retorno 16; romper; caso 6: retorno 32; romper; caso 7: retorno 64; romper; caso 8: devolver 128; romper; predeterminado: devolver 0; romper; } } fila interna (temperatura interna) { interruptor (temperatura) { caso 1: retorno 1; ruptura; caso 2: devolución 2; romper; caso 3: devolución 4; romper; caso 4: retorno 8; romper; caso 5: retorno 16; romper; caso 6: retorno 32; romper; caso 7: retorno 64; romper; caso 8: devolver 128; romper; predeterminado: devolver 0; romper; } } llave nula { si (lectura digital (izquierda) == 0) { dirección=0; si(agregar!=-1) agregarc=-1; demás agregarc=1; while(digitalRead(izquierda) == 0); } si (lectura digital (derecha) == 0) { dirección=0; si(agregar!=1) agregarc=1; demás agregarc=-1; while(digitalRead(derecha) == 0); } si(lectura digital(arriba)== 0) { agregarc=0; si(dirección!=-1) dirección=-1; demás dirección=1; while(digitalRead(arriba) == 0); } si(lectura digital(abajo) == 0) { agregarc=0; si(dirección!=1) dirección=1; demás dirección=-1; while(digitalRead(abajo) == 0); } } Pantalla anulada (temperatura interna) { intj,k; columna de caracteres, fila; para(j=0;j >=1; filaw>>=1; escritura digital (sh_col, ALTA); escritura digital (sh_col, BAJO); escritura digital (sh_row, ALTA); escritura digital (sh_row, BAJO); } escritura digital (st_col, ALTA); escritura digital (st_col, BAJO); escritura digital (st_row, ALTA); escritura digital (st_row, BAJO); llave; retrasoMicrosegundos(600); } } } configuración vacía { lcd.comenzar(16,2); pinMode(ds_col, SALIDA); pinMode(sh_col, SALIDA); pinMode(st_col, SALIDA); pinMode(ds_row, SALIDA); pinMode(sh_row, SALIDA); pinMode(st_row, SALIDA); pinMode(inicio, ENTRADA); pinMode(arriba, ENTRADA); pinMode(abajo, ENTRADA); pinMode(izquierda, ENTRADA); pinMode(derecha, ENTRADA); lcd.setCursor(0,0); lcd.print("Juego de serpiente activado"); lcd.setCursor(0,1); lcd.print(" Matriz de puntos "); retraso(2000); lcd.setCursor(0,0); lcd.print(" Por Saddam Khan "); lcd.setCursor(0,1); lcd.print("Garaje de ingenieros"); retraso(2000); } bucle vacío { int i,j,k,spd=40,puntuación=0; j=k=0; agregarc=0; dirección=1; lcd.claro; lcd.setCursor(0,0); lcd.print("Puntuación: "); lcd.print(puntuación); mientras(1) { para(i=3;i<21;i++) { Fila(i)=100; Col(i)=100; } Fila(0)=rand %8+1; Col(0)=rand %8+1; Fila(1)=1; Col(1)=1; Fila(2)=2; Col(2)=1; j=2; k=1; mientras(k==1) { agregarc=0; dirección=1; Mostrar(1); lcd.claro; lcd.setCursor(0,0); lcd.print("Puntuación: "); lcd.print(puntuación); si(digitalRead(inicio)==0) { k=2; velocidad=40; puntuación=0; } } mientras(k==2) { Pantalla (velocidad); if(Fila(1)>8 Col(1)>8 Fila(1)<0 Col(1)<0) { Fila(1)=1; Col(1)=1; k=1; lcd.setCursor(0,1); lcd.print("Se acabó el juego"); retraso(5000); } if(Fila(0)==Fila(1)+dirección && Col(0)==Col(1)+addc) { j++; spd=spd-2; puntuación=puntuación+5; lcd.claro; lcd.setCursor(0,0); lcd.print("Puntuación: "); lcd.print(puntuación); Fila(0)=rand %8+1; Col(0)=rand %8+1; } para(i=j;i>1;i--) { Col(i)=Col(i-1); Fila(i)=Fila(i-1); } Col(1)=Col(2)+añadirc; Fila(1)=Fila(2)+dirección; } } }
###
Diagramas de circuito
Diagrama del circuito del juego de serpientes basado en Arduino | ![]() |