xxxxxxxxxx
// By Roni Kaufman
// https://ronikaufman.github.io
// https://twitter.com/KaufmanRoni
let M = 14, N = 4;
let u = 100;
let palette = ["#abcd5e", "#29ac9f", "#14976b", "#b3dce0", "#62b6de", "#2b67af", "#ffd400", "#f589a3", "#f0502a", "#fc8405"];
let squares = [];
let randInt = (a, b) => (floor(random(a, b)));
function setup() {
if (random() < 1/2) [M, N] = [N, M];
createCanvas(M*u, N*u);
noStroke();
for (let i = 0; i < M; i++) {
for (let j = 0; j < N; j++) {
drawSquare(i*u, j*u, u);
}
}
}
function draw() {
for (let i = 0; i < 500; i++) {
let newSqu = generateSquare();
let canAdd = true;
for (let squ of squares) {
if (((newSqu.i <= squ.i && newSqu.i+newSqu.s > squ.i) || (squ.i <= newSqu.i && squ.i+squ.s > newSqu.i)) && ((newSqu.j <= squ.j && newSqu.j+newSqu.s > squ.j) || (squ.j <= newSqu.j && squ.j+squ.s > newSqu.j))) {
canAdd = false;
break;
}
}
if (canAdd) {
drawSquare(newSqu.i*u, newSqu.j*u, newSqu.s*u);
squares.push(newSqu);
}
}
noLoop();
}
function generateSquare() {
let s = randInt(2, 5);
let i = randInt(0, M-s+1);
let j = randInt(0, N-s+1);
let squ = {
i: i,
j: j,
s: s
};
return squ;
}
function drawSquare(x, y, s) {
if (random() < 1/3 && s < 4*u) {
fill(random(palette));
square(x, y, s);
} else {
fill("#fffbe6");
square(x, y, s);
let step = random([1, 2, 4, 8])*u/8;
fill(5);
let i = 0;
for (let x1 = x; x1 < x+s; x1 += step) {
let j = 0;
for (let y1 = y; y1 < y+s; y1 += step) {
if ((i+j) % 2 == 0) {
square(x1, y1, step);
}
j++;
}
i++;
}
}
}