#include <LedControl.h>
LedControl lc = LedControl(11, 13, 10, 1);
#define UP 2
#define DOWN 3
#define LEFT 4
#define RIGHT 5
int snakeX[64];
int snakeY[64];
int length = 3;
int dx = 1;
int dy = 0;
int foodX = 5;
int foodY = 5;
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
pinMode(UP, INPUT_PULLUP);
pinMode(DOWN, INPUT_PULLUP);
pinMode(LEFT, INPUT_PULLUP);
pinMode(RIGHT, INPUT_PULLUP);
for (int i = 0; i < length; i++) {
snakeX[i] = i;
snakeY[i] = 0;
}
}
void loop() {
if (!digitalRead(UP)) { dx = 0; dy = -1; }
if (!digitalRead(DOWN)) { dx = 0; dy = 1; }
if (!digitalRead(LEFT)) { dx = -1; dy = 0; }
if (!digitalRead(RIGHT)) { dx = 1; dy = 0; }
for (int i = length - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
snakeX[0] += dx;
snakeY[0] += dy;
if (snakeX[0] < 0) snakeX[0] = 7;
if (snakeX[0] > 7) snakeX[0] = 0;
if (snakeY[0] < 0) snakeY[0] = 7;
if (snakeY[0] > 7) snakeY[0] = 0;
if (snakeX[0] == foodX && snakeY[0] == foodY) {
length++;
foodX = random(0, 8);
foodY = random(0, 8);
}
for (int i = 1; i < length; i++) {
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
length = 3;
}
}
lc.clearDisplay(0);
lc.setLed(0, foodY, foodX, true);
for (int i = 0; i < length; i++) {
lc.setLed(0, snakeY[i], snakeX[i], true);
}
delay(300);
}