#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);

void setup() {
  setIntensity(NUM_MAT, 16);
  randomSeed(A3);
  makeEat();
}

void loop() {
  makeMove();
  makeEat();
  delay(300);
  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);
  }
}

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;
  }
  head_x = head_x + x_d;
  head_y = head_y + y_d;
  if(head_x > 7) head_x = 0;
  if(head_x < 0) head_x = 7;
  if(head_y < 0) head_y = (8 * NUM_MAT) - 1;
  if(head_y > (8 * NUM_MAT) - 1) head_y = 0;

  setLed(head_x, head_y, true);
}