ENIB 2022 - groupe C : Snarkade

De Les Fabriques du Ponant
Révision datée du 17 janvier 2022 à 17:05 par Marceau (discussion | contributions) (Page créée avec « ==Que fait ce projet ? == Tentative de création d'une petite borne d'arcade avec le jeu Snake. Étant donné que les matrices de LED utilisées pour le projet ne marche... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Que fait ce projet ?

Tentative de création d'une petite borne d'arcade avec le jeu Snake.

Étant donné que les matrices de LED utilisées pour le projet ne marche qu'à moitié, le projet n'a pas pu être terminé.

Liste des composants

  • 4 matrices de LED 8x8 1088AS
  • 6 boutons
  • 1 interrupteur
  • 1 Arduino Nano
  • Pleins de cables

Code

Programme principal

#include <Vector.h>
#include "snake.h"
#include "LedControl.h"

snake::snake(int l = 1, char dir ='r' , Vector<int> initial_pos ={}):
lenght(l),direction(dir)
{
  initial_pos.push_back(8);
  initial_pos.push_back(8);
  body.push_back(initial_pos);
};
//pin 2 pour gauche, pin 3 pour bas, pin 4 pour haut et pin 5 pour droite
void snake::change_direction(){
  if(digitalRead(2) == true){
    direction = 'l';
  }else{if(digitalRead(3) == true){
    direction = 'd';
  }else{if(digitalRead(4) == true){
    direction = 'u';
  }else{if(digitalRead(5) == true){
    direction = 'r';}}}
  }
};


void snake::grow(){
  lenght += 1;
  Vector<int> v;
  switch(direction)
  {
    case 'u':
    v.push_back(body[0][0]);
    v.push_back(body[0][1] + 1);
    body.push_back(v);
    break;

    case 'd':
    v.push_back(body[0][0]);
    v.push_back(body[0][1] - 1);
    body.push_back(v);
    break;

    case 'r':
    v.push_back(body[0][0] + 1);
    v.push_back(body[0][1]);
    body.push_back(v);
    break;

    case 'l':
    v.push_back(body[0][0] - 1);
    v.push_back(body[0][1]);
    body.push_back(v);
    break;
  }
  v.clear();
};

void snake::move(){
  Vector<int> v;
  Vector<Vector<int>> b;
  for(long unsigned int a = 1; a < body.size() - 1; a++){
    b.push_back(body[a]);
  }
  switch(direction)
  {
    case 'u':
    v.push_back(body[0][0]);
    v.push_back(body[0][1] + 1);
    b.push_back(v);
    break;

    case 'd':
    v.push_back(body[0][0]);
    v.push_back(body[0][1] - 1);
    b.push_back(v);
    break;

    case 'r':
    v.push_back(body[0][0] + 1);
    v.push_back(body[0][1]);
    b.push_back(v);
    break;

    case 'l':
    v.push_back(body[0][0] - 1);
    v.push_back(body[0][1]);
    b.push_back(v);
    break;
  }
  body.clear();
  body = b;
  v.clear();
};

void snake::death(){
  alive = false;
};

bool snake::getAlive(){
  return alive;
}

char snake::getDirection(){
  return direction;
}

Vector<Vector<int>> snake::getBody(){
  return body;
}

void snake::setAlive(bool status){
  alive = status;
}

int snake::getLenght(){
  return body.size();
}

LedControl lc1=LedControl(12,11,10,2);
LedControl lc2=LedControl(9,8,7,2);
int longueur;
int ligne;
int colonne;
int adresse;

void affichageSerpent(snake snake1){
  Vector<Vector<int>> corps = snake1.getBody();

  longueur = corps.size();

  //[0] = x
  //[1] = y
  int x,y;

  for(int i = 0; longueur; i++){
    while(corps[i][0]>15){
      x = corps[i][0]-16;
    }

    while(corps[i][1]>7){
      y = corps[i][1]-16;
    }

    if(x>7){
      adresse=1;
    }
    else {
      adresse=0;
    }

    if(y>7){
      y-=8;
      lc2.setLed(adresse,y,x,1);
    }

    else{
      lc1.setLed(adresse,y,x,1);
    }
  }
}

////////////////////////////////////////////////////////////////
/*int boutons = {2,3,4,5};
bool buttons = {false,false,false,false};
snake snake1;

void traitement_bouton(){
for(int h=0,h<4,h++){
  int z = digitalRead(boutons[h]);
  if(z==1){buttons[h]=true;}
  else if(z==0){buttons[h]=false;}
}*/

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);

  lc1.shutdown(0,false);
  lc1.shutdown(1,false);
  lc1.setIntensity(0,8);
  lc1.setIntensity(1,8);
}

void loop() {
  lc1.setLed(1,5,5,1);
  delay(500);
  lc1.setLed(1,5,5,0);
  delay(500);

  if(digitalRead(5) == 1){
    Serial.print("yay");
  }

  //affichageSerpent(snake1);
  //snake1.move();
}

Module

#ifndef SNAKE_H
#define SNAKE_H
#include <Vector.h>

class snake{

  private:
  int lenght;
  char direction;
  Vector<Vector<int>> body;//de taille 1 à l'initialisation (c-a-d il n'y a qye la tete)
  bool alive;

  public:
  snake(int l = 1,char dir ='r', Vector<int> initial_pos = {});
  void change_direction();
  void grow();
  void move();
  void death();
  bool getAlive();
  char getDirection();
  Vector<Vector<int>> getBody();
  void setAlive(bool status);
  int getLenght();
};

#endif

Catégories