img = loadImage('https://deckard.openprocessing.org/user168834/visual1055907/h2a6428cafa60b4d8cd7a211724a09acb/ioback.jpg');
function createArray(i) {
for (a = 0; a < numSnake; a++) {
dotX.push(random(10, arenaX))
dotY.push(random(10, arenaY))
colors.push(random(0, 255))
colors.push(random(0, 255))
colors.push(random(0, 255))
speed.push(round(random(5, 10)))
for (var a = 0; a < i; a++) {
for (var o = 0; o < snakeLength[a]; o++) {
function mousePressed() {
function mouseClicked() {
createCanvas(windowWidth, windowHeight);
for (var ww = 0; ww < arenaY / 500; ww++) {
for (var ll = 0; ll < arenaX / 500; ll++) {
image(img, 0 + ll * 500 - (viewX - startX), 0 + ww * 500 - (viewY - startY), 500, 500);
for (var z = 0; z < numSnake; z++) {
fill(colors[z * 2], colors[z * 2 + 3], colors[z * 2 + 1])
randInt[z] = random(-0.1, 0.1)
randDir[z] = round(random(1, 50))
randAngle[z] += randInt[z]
for (var h = 1; h > -2; h += -.5) {
for (var ii = 0; ii < numSnake; ii += 1) {
for (var iii = 0; iii < snakeLength[ii]; iii++) {
if (abs((tarX[z] - snakeX[ii][iii])) + abs((tarY[z] - snakeY[ii][iii])) < snakeLength[ii] / 15 + 10 + 20 && ii != z) {
if (sqrt(pow(abs((snakeX[z][snakeLength[ii] - 1] - snakeX[ii][iii + 5])), 2) + pow(abs((snakeY[z][snakeLength[ii] - 1] - snakeY[ii][iii + 5])), 2)) > sqrt(pow(abs((snakeX[z][snakeLength[ii] - 1] - snakeX[ii][iii - 5])), 2) + pow(abs((snakeY[z][snakeLength[ii] - 1] - snakeY[ii][iii - 5])), 2))) {
direction = abs((snakeX[z][snakeLength[ii] - 1] - snakeX[ii][iii + 5]) + (snakeY[z][snakeLength[ii] - 1] - snakeY[ii][iii + 5])) / ((snakeX[z][snakeLength[ii] - 1] - snakeX[ii][iii + 5]) + (snakeY[z][snakeLength[ii] - 1] - snakeY[ii][iii + 5]))
randAngle[z] += 0.02 * direction
if (abs((dotX[z] - snakeX[ii][iii])) + abs((dotY[z] - snakeY[ii][iii])) < snakeLength[ii] / 15 + 15 && ii != z) {
var randSpawn = random(0, arenaX)
for (var u = snakeLength[z]; u > 0; u += -1) {
snakeLength[ii] = snakeLength[ii] + snakeLength[z]
for (var p = 0; p < snakeLength[z]; p++) {
snakeX[ii].unshift(snakeX[ii][0])
snakeY[ii].unshift(snakeY[ii][0])
tarX[z] = sin(randAngle[z] + h) * (40) + dotX[z]
tarY[z] = cos(randAngle[z] + h) * (40) + dotY[z]
if (tarX[z] > arenaX || tarX[z] < 0 || tarY[z] > arenaY || tarY[z] < 0) {
tarX[z] = sin(randAngle[z]) * (40) + dotX[z]
tarY[z] = cos(randAngle[z]) * (40) + dotY[z]
tarX[0] = mouseX + (viewX - startX)
tarY[0] = mouseY + (viewY - startY)
dotX[z] = dotX[z] + ((tarX[z] - dotX[z]) / (abs((tarX[z] - dotX[z])) + abs((tarY[z] - dotY[z])))) * speed[z]
dotY[z] = dotY[z] + ((tarY[z] - dotY[z]) / (abs((tarY[z] - dotY[z])) + abs((tarX[z] - dotX[z])))) * speed[z]
for (var i = 0; i < snakeLength[z]; i += 1) {
fill(colors[z * 2] + 50, colors[z * 2 + 3] + 50, colors[z * 2 + 1] + 50)
ellipse(snakeX[z][i] - (viewX - startX), snakeY[z][i] - (viewY - startY), 20 + snakeLength[z] / 15+5, 20 + snakeLength[z] / 15 + 5)
fill(colors[z * 2], colors[z * 2 + 3], colors[z * 2 + 1])
ellipse(snakeX[z][i] + -(viewX - startX), snakeY[z][i] - (viewY - startY), 20 + snakeLength[z] / 15, 20 + snakeLength[z] / 15)
fill(colors[z * 2] - 80, colors[z * 2 + 3], colors[z * 2 + 1] - 80)
ellipse(snakeX[z][i] - (viewX - startX), snakeY[z][i] - (viewY - startY), 20 + snakeLength[z] / 15, 20 + snakeLength[z] / 15 - 20)
ellipse(snakeX[z][i] - (viewX - startX), snakeY[z][i] - (viewY - startY), 20 + snakeLength[z] / 15 - 20, 20 + snakeLength[z] / 15)
fill(colors[z * 2] + 90, colors[z * 2 + 3] + 90, colors[z * 2 + 1] + 90)
ellipse(sin(randAngle[z]) * (10 + snakeLength[z] / 60) + dotX[z] - (viewX - startX), cos(randAngle[z]) * (10 + snakeLength[z] / 60) + dotY[z] - (viewY - startY), 10 + snakeLength[z] / 30, 10 + snakeLength[z] / 30)