Proyecto I&P 2023 - Snake / Grupo 4

De Casiopea


TítuloProyecto I&P 2023 - Snake / Grupo 4
Tipo de ProyectoProyecto de Curso
Palabras Claveproyectoarduino
Período2023-2023
AsignaturaInteracción y Performatividad
Del CursoInteracción y Performatividad 2023
CarrerasDiseño
Alumno(s)Josefa Antris, Marina Cabezas, Benjamin Gonzalez Fuenzalida, Ernes Andree Soto Carreño
ProfesorFranco Gnecco

Proyecto

Consiste en la construcción de un juego tipo snake utilizando arduino, basado en este proyecto y buscando avanzar en la comodidad del usuario al jugarlo.

Componentes

Para el Circuito

  • Protoboard pequeña
  • Arduino Uno
  • Cables Macho-Macho y Macho-Hembra
  • Módulo Max7219 Matriz Led 8x8 Cable Hembra Arduino
  • Módulo Joystick para Arduino
  • Conector De Batería Para Arduino 9v
  • Pilas Batería de 9v


Medidas Componentes

Joystick
Matriz Led 8x8
Arduino UNO

Para el Contenedor Arcade

  • MDF de 3mm.

Circuito

IntPer2023 - Esquema Snek 2.jpg

Código Arduino IDE

Código Actual

#include "LedControl.h"
LedControl lc = LedControl(11, 13, 10, 1);
const int boton_inicio = 2;
int joy_Pin1 = A0; 
int joy_Pin2 = A1; 
int eje_x = 0;
int eje_y = 0;
String direccion = "arriba";
int serpiente_X[36]; // son 36 las posibles posiciones en pantalla para el eje x
int serpiente_Y[36]; // son 36 las posibles posiciones en pantalla para el eje y
int longitudSerpiente = 1;
int comida_X;
int comida_Y;
boolean fin = false;
void setup() {
 Serial.begin(9600);
 
 lc.shutdown(0, false);
 lc.setIntensity(0, 5);
 lc.clearDisplay(0); // limpiar el matriz
 pinMode(boton_inicio, INPUT); // configuracion como entrada
 digitalWrite(boton_inicio, HIGH);// lo posicionamos en alto
 comida_X = random(0, 8);
 comida_Y = random(0, 8);
}
void loop() {
 lc.clearDisplay(0);
 if(!fin){
   eje_x = analogRead(joy_Pin1);
   eje_y = analogRead(joy_Pin2);
   //Serial.println("Reading from joystick");
   //Serial.println(eje_x); //Ispis x ose na serijski port
   //Serial.println(eje_y); //Ispis x ose na serijski port
 
   // en que dirección nos movemos?
   if (eje_y >= 0 && eje_y <480) {
     if (direccion != "abajo") direccion = "arriba";
   }
   if (eje_y > 520 && eje_y <=1023) {
     if (direccion != "arriba") direccion = "abajo";
   }
   if (eje_x >= 0 && eje_x <480) {
     if (direccion != "derecha") direccion = "izquierda";
   }
   if (eje_x > 520 && eje_x <=1023) {
     if (direccion != "izquierda") direccion = "derecha";
   }
 
   //Serial.println(direccion);
 
   for (int i = longitudSerpiente - 1; i > 0; i--) {
     serpiente_X[i] = serpiente_X[i - 1];
     serpiente_Y[i] = serpiente_Y[i - 1];
   }
  
   if (direccion == "arriba") {
     if (serpiente_Y[0] == 0) {
       serpiente_Y[0] = 7;
     } else {
        serpiente_Y[0]--;
     }
   } else if (direccion == "abajo") {
     if (serpiente_Y[0] == 7) {
       serpiente_Y[0] = 0;
     } else {
       serpiente_Y[0]++;
     }
   } else if (direccion == "izquierda") {
     if (serpiente_X[0] == 0) {
       serpiente_X[0] = 7;
     } else {
       serpiente_X[0]--;
     }
   } else if (direccion == "derecha") {
     if (serpiente_X[0] == 7) {
       serpiente_X[0] = 0;
     } else {
       serpiente_X[0]++;
     }
   }
 
   // dibujar la serpiente
   for (int i = 0; i < longitudSerpiente; i++) {
     lc.setLed(0, serpiente_Y[i], serpiente_X[i], true); // (nº dispositivo, fila, columna, valor)
   }
 
   // dibujar la comida
   if (serpiente_X[0] == comida_X && serpiente_Y[0] == comida_Y){
     // si coincide la cabeza de la serpiente con la comida, es que se la ha comido y crece un LED
     longitudSerpiente++;
     // nueva posicion
     comida_X = random(0, 8);
     comida_Y = random(0, 8);
   }
   lc.setLed(0, comida_Y, comida_X, true);
   delay(50); // haremos que parpade
   lc.setLed(0, comida_Y, comida_X, false);
 
   // comprobar si choca consigo misma
   for (int i = 1; i < longitudSerpiente; i++) {
     if (serpiente_X[0] == serpiente_X[i] && serpiente_Y[0] == serpiente_Y[i]) {
       fin = true;
     }
   }
 
   delay(300);
 } else {
   Serial.println("game over");
   if(digitalRead(boton_inicio)==0){
     Serial.println("Nueva");
     // Inicializar otra vez
     // comida
     comida_X = random(0, 8);
     comida_Y = random(0, 8);
     // posicion inicial
     eje_x = 0;
     eje_y = 0;
     // longitud
     longitudSerpiente = 1;
     // dirección
     direccion = "arriba";
     
     fin = false;
   }
 }
}

Registro fotográfico/audiovisual