#include <LedControl.h>

#define NUM_MAT 2

LedControl matrix = LedControl(12, 11, 10, NUM_MAT);

int head_x = 0;
int head_y = 6;

int x_d = -1;
int y_d = 0;

int eat_x = random(0, 7);
int eat_y = random(0, 15);


int snakeX[3];
int snakeY[3];

int lenSnake = 3;

void setup() {
  snakeX[0] = 4;
  snakeY[0] = 7;

  setIntensity(NUM_MAT, 16);
  randomSeed(A3);
  makeEat();
}

void loop() {
  Serial.begin(9600);
  makeMove();
  makeEat();
  delay(1000);
  clearDisplay();
}

void clearDisplay(){
  for(int i = 0; i < NUM_MAT; i++){
    matrix.clearDisplay(i);
  }
}

void setIntensity(int count, int intensity){
  for(int i = 0; i < count; i++){
      matrix.setIntensity(i, intensity);
  }
}

//              13
void setLed(int x, int y, bool turn){
  int matrix_num = 0; //Номер матрицы
  if(y > 7){ // если y больше 7
    int matrix_diff = y / 8; // вичесления номера матрицы
    matrix_num = matrix_diff;// установить номер матрицы
    y -= 8 * matrix_diff;// получить номер пикселя на соотвествующей матрице
  }
  matrix.setLed(matrix_num, x, y, turn); // установить на соответсвующей матрице необходимый пиксель в состояние
}

int getKey(){
  int key_num = 0;
  if(analogRead(A0) >= 1023){
    key_num = 4;
  }
  if(analogRead(A0) <= 0){
    key_num = 5;
  }
  if(analogRead(A1) >= 1023){
    key_num = 3;
  }
  if(analogRead(A1) <= 0){
    key_num = 6;
  }
  return key_num;
}

void makeEat(){
  setLed(eat_x, eat_y, true);
  if(eat_x == head_x && eat_y == head_y){
    setLed(eat_x, eat_y, false);
    eat_x = random(0, 7);
    eat_y = random(0, 15);
    setLed(eat_x, eat_y, true);
  }
}

void makeMove(){
  switch(getKey()){
    case 4:
      x_d = -1;
      y_d = 0; 
      break;
    case 5: 
      x_d = 1;
      y_d = 0; 
      break;
    case 6: 
      x_d = 0;
      y_d = 1; 
      break;
    case 3: 
      x_d = 0;
      y_d = -1; 
      break;
  }

  snakeX[0] = snakeX[0] + x_d;
  // snakeY[0] = snakeY[0] + y_d;

  // for(int i = lenSnake - 1; i > 0; i--){
  //   snakeX[i] = snakeX[i - 1];
  //   snakeY[i] = snakeY[i - 1];

  //   if(snakeX[i] > 7) snakeX[i] = 0;
  //   if(snakeX[i] < 0) snakeX[i] = 7;
  //   if(snakeY[i] < 0) snakeY[i] = (8 * NUM_MAT) - 1;
  //   if(snakeY[i] > (8 * NUM_MAT) - 1) snakeY[i] = 0;
  // }


  // snakeY[i] = snakeY[0] - i;
  Serial.println();
  for(int i = 1; i < lenSnake; i++){
    snakeX[i] = snakeX[0] + i;
    snakeY[i] = snakeY[0];
    Serial.print(snakeX[i]);
    //     1   =    4    +  1 // 5
    //     2   =    4    +  2 // 6   
  }

  Serial.println();
  for(int i = 0; i < lenSnake; i++){
    
    Serial.print(snakeX[i]);
    setLed(snakeX[i], snakeY[i], true);
  }
}