const leftCornerX = -200;
const leftCornerY = -200;
const rectSize = 10;
const nrFields = 40;
const snakeLen = 5;
var snake = Array(snakeLen);
for(var i = 0; i < snakeLen; i++) {
snake[i] = [i, 0];
}
function isSnakeField(x, y) {
for(var i = 0; i < snakeLen; i++) {
const snakeField = snake[i];
if(snakeField[0] === x && snakeField[1] === y) {
return true;
}
}
return false;
}
function availableMoves(headX, headY) {
var moves = [];
if(headX > 0) {
const move = [headX - 1, headY];
if(!isSnakeField(move[0], move[1])) {
moves.push(move);
}
}
if(headX < nrFields - 1) {
const move = [headX + 1, headY];
if(!isSnakeField(move[0], move[1])) {
moves.push(move);
}
}
if(headY > 0) {
const move = [headX, headY - 1];
if(!isSnakeField(move[0], move[1])) {
moves.push(move);
}
}
if(headY < nrFields - 1) {
const move = [headX, headY + 1];
if(!isSnakeField(move[0], move[1])) {
moves.push(move);
}
}
return moves;
}
function moveSnake() {
const snakeHead = snake[snakeLen - 1];
const headX = snakeHead[0];
const headY = snakeHead[1];
const moves = availableMoves(headX, headY);
const selected = moves[Math.floor(Math.random() * moves.length)];
snake[snakeLen - 1] = selected;
var nextX = headX;
var nextY = headY;
for(var i = snakeLen - 2; i >= 0; i--) {
var movedField = [nextX, nextY];
nextX = snake[i][0];
nextY = snake[i][1];
snake[i] = movedField;
}
}
function setup() // "setup" is called once at start of run
{
createCanvas ( ABWorld.fullwidth(), ABWorld.fullheight(), WEBGL );
}
function draw() // "draw" is called every timestep during run
{
background("lightblue");
for(var i = 0; i < nrFields; i++) {
for(var j = 0; j < nrFields; j++) {
var color = isSnakeField(i, j) ? "black" : "white";
fill(color);
rect(leftCornerX + rectSize * i, leftCornerY + rectSize * j, rectSize, rectSize);
}
}
moveSnake();
}