#include <MD_MAX72xx.h>
#define MAX_DEVICES 1
const int maxX = MAX_DEVICES * 8 - 1;
const int maxY = 7;
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define VERT_PIN A0
#define HORZ_PIN A1
#define SEL_PIN 2
MD_MAX72XX mx = MD_MAX72XX(MD_MAX72XX::PAROLA_HW, CS_PIN, MAX_DEVICES);
int x = 0;
int y = 0;
// Cria a matriz
char matriz [8][8];
//preenchidos
int preenchidos [30][2];
// Cria a variável do Level
byte level = 1;
// cria a variável para a comida
byte comidax;
byte comiday;
// cria a variável para a cabeça da cobra
byte cabx;
byte caby;
// cria a variável para o rado da cobra
// que vai ser necessaria para saber onde apagar
byte rabox;
byte raboy;
byte sentidorabox; // 0 não movimento, 1 vai para direita, 2 vai para esquerda
byte sentidoraboy; // 0 não movimenta, 1 vai para baixo, 2 vai para cima
// Cria variável para o tamanho da cobrinha
int tam = 1;
// cria a variável do sentido/direção que a cobrinha vai
// d vai para direita
// e vai para esquerda
// b vai para baixo
// c vai para cima
char sentido='e';
//Função Inicio zera tudas as variáveis
void inicio(){
x = 0;
y = 0;
tam = 1;
sentido='e';
level = 1;
for (int l = 0; l < 8; l++){
for (int k =0; k < 8; k++){
matriz[l][k]='z';
}
}
//comida();
}
// Função aparece comida
void comida(){
int cx;
int cy;
bool ocupado = true;
cy = random(0, 7);
cx = random(0, 7);
while (ocupado == true){
if (matriz[cy][cx] == 'z'){
cy = random(0, 7);
cx = random(0, 7);
}
else{
comiday=cy;
comidax=cx;
ocupado = false;
matriz[comiday][comidax] = 'x';
//mx.setPoint(comiday, comidax, true);
//mx.update();
}
}
}
void move()
{
if (sentido == 'd'){
x = max(x - 1, 0); // vai para direita
}
if (sentido == 'e'){
x = min(x + 1, maxX); // vai para esquerda
}
if (sentido == 'b'){
y = min(y + 1, maxY); // vai para baixo
}
if (sentido == 'c'){
y = max(y - 1, 0); // vai para cima
}
matriz[y][x]=sentido;
preenchidos[0][0]=y;
preenchidos[0][1]=x;
Serial.println(preenchidos[0][0]);
Serial.println(preenchidos[0][1]);
delay((1/level) * 1000);
}
void exibe()
{
mx.clear();
mx.setPoint(comiday, comidax, true);
for (int l = 0; l < 8; l++){
for (int k =0; k < 8; k++){
if (matriz[l][k] != 'z'){
mx.setPoint(l, k, true);
mx.update();
}
}
}
}
void setup() {
// Serial apenas para printar variáveis na tela e testar
Serial.begin(9600);
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, MAX_INTENSITY / 2);
mx.clear();
pinMode(VERT_PIN, INPUT);
pinMode(HORZ_PIN, INPUT);
pinMode(SEL_PIN, INPUT_PULLUP);
inicio();
}
// the loop function runs over and over again forever
void loop() {
int horz = analogRead(HORZ_PIN);
int vert = analogRead(VERT_PIN);
if (vert < 300) {
//y = min(y + 1, maxY);
// vai para baixo
sentido = 3;
}
if (vert > 700) {
//y = max(y - 1, 0);
// vai para cima
sentido = 4;
}
if (horz > 700) {
//x = min(x + 1, maxX);
// vai para esquerda
sentido = 2;
}
if (horz < 300) {
//x = max(x - 1, 0);
// vai para direita
sentido = 1;
}
move();
exibe();
//if (digitalRead(SEL_PIN) == LOW) {
// mx.clear();
//}
//mx.setPoint(y, x, true);
//mx.update();
//delay(100);
Serial.print("Y: ");
Serial.print(y);
Serial.print(" X: ");
Serial.println(x);
}