#include "MD_MAXPanel.h"
const MD_MAX72XX::moduleType_t   HARDWARE_TYPE = MD_MAX72XX::PAROLA_HW;
MD_MAXPanel matrix = MD_MAXPanel(HARDWARE_TYPE, 11, 12, 10, 4, 1);
int X[64];          int Y[64];
int n=1;		        int xa,ya;  /*ябл*/    int d=0;
int newA() { xa=random(31);   ya=random(7);  } 

void setup() { Serial.begin(9600); matrix.begin(); newA(); X[0]=0; Y[0]=0; }   //нач.полож змеи       

unsigned long Time, Time1=0;    int i, x, y;
void loop() {
    x = analogRead(A1);      y = analogRead(A0);

    if (y < 100)  d=0;  //вниз   (по увеличению Y)
    if (y > 900)  d=1;  //вверх  (по уменьшению Y)
  
    if (x < 100)  d=2;  //влево  (по увеличению Х)
    if (x > 900)  d=3;  //вправо (по уменьшению Х)  // Serial.println(x);
    
    Time = millis();  
    if(Time-Time1>200)               
    { Time1 = Time;  
      if(Y[0]==ya && X[0]==xa)     { n++;       newA(); }   

      for(i=n-1; i>0; i--) { //сдвиг координат хвоста, с уменьшением индекса массива
       Y[i]=Y[i-1];       X[i]=X[i-1];         }
                                            
      if(d==0)  Y[0]=(Y[0]+1)%8;  // остаток от дел на 8
      if(d==1)  Y[0]=(Y[0]+7)%8;  // Serial.println(Y[0]);  
      if(d==2)  X[0]=(X[0]+31)%32;
      if(d==3)  X[0]=(X[0]+1)%32;
    
      for(i=n-1; i>=1; i--) 
      if(X[0]==X[i] && Y[0]==Y[i]) { n=1; Serial.println("YKYC XBOCTA"); }
      
      matrix.clear();
      for(i=0; i<n; i++)  matrix.setPoint(X[i], Y[i], true);    //змея
                          matrix.setPoint(xa,   ya,   true);    //яблоко
    }         }