#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 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;
while (ocupado){
cy = random(0, 8);
cx = random(0, 8);
if (matriz[cy][cx] == 'z'){
comiday=cy;
comidax=cx;
matriz[comiday][comidax] = 'x';
ocupado = false;
}
}
}
// Movimento na tela
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
}
if (matriz[y][x] != 'z') {
// Colisão detectada
Serial.println("Game Over");
//delay(2000);
//inicio();
//return;
}
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);
}
// gera a exibição na matriz
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(); //tirei daqui e coloquei no final do exibe
}
}
}
mx.update();
}
//setup arduino
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();
}
// o loop
void loop() {
int horz = analogRead(HORZ_PIN);
int vert = analogRead(VERT_PIN);
if (vert < 300) {
// vai para baixo
sentido = 'b';
}
if (vert > 700) {
// vai para cima
sentido = 'c';
}
if (horz > 700) {
// vai para esquerda
sentido = 'e';
}
if (horz < 300) {
// vai para direita
sentido = 'd';
}
move();
exibe();
Serial.print("Y: ");
Serial.print(y);
Serial.print(" X: ");
Serial.println(x);
}