xxxxxxxxxx
89
const W = 401;
const K = 8;
const cols = [
[0, 0, 0, 255],
[255, 255, 255, 255],
[255, 255, 0, 255],
[255, 0, 255, 255],
[255, 0, 0, 255],
[0, 255, 255, 255],
[0, 255, 0, 255],
[0, 0, 255, 255]
];
let grid = [];
function setup() {
createCanvas(1000, 1000);
for (let mi = 0; mi < W; mi++) {
let tmp = [];
for (let ni = 0; ni < W; ni++) {
tmp.push(0);
}
grid.push(tmp);
}
grid[(W - 1) / 2][(W - 1) / 2] = 300000;
background(255);
let bad = true;
while (bad) {
const oldGrid = grid.slice();
bad = false;
for (let mi = 0; mi < W; mi++) {
for (let ni = 0; ni < W; ni++) {
if (oldGrid[mi][ni] >= K) {
bad = true;
grid[mi][ni] -= 4;
if (mi > 0 && mi < W - 1 && ni > 0 && ni < W - 1) {
grid[mi - 1][ni]++;
grid[mi + 1][ni]++;
grid[mi][ni - 1]++;
grid[mi][ni + 1]++;
} else if (mi == 0 && ni == 0) {
grid[mi + 1][ni]++;
grid[mi][ni + 1]++;
} else if (mi == W - 1 && ni == 0) {
grid[mi - 1][ni]++;
grid[mi][ni + 1]++;
} else if (mi == 0 && ni == W - 1) {
grid[mi + 1][ni]++;
grid[mi][ni - 1]++;
} else if (mi == W - 1 && ni == W - 1) {
grid[mi - 1][ni]++;
grid[mi][ni - 1]++;
} else if (mi == 0) {
grid[mi + 1][ni]++;
grid[mi][ni + 1]++;
grid[mi][ni - 1]++;
} else if (mi == W - 1) {
grid[mi - 1][ni]++;
grid[mi][ni + 1]++;
grid[mi][ni - 1]++;
} else if (ni == 0) {
grid[mi + 1][ni]++;
grid[mi - 1][ni]++;
grid[mi][ni + 1]++;
} else if (ni == W - 1) {
grid[mi + 1][ni]++;
grid[mi - 1][ni]++;
grid[mi][ni - 1]++;
}
}
}
}
}
for (let mi = 0; mi < W; mi++) {
for (let ni = 0; ni < W; ni++) {
mySquare(ni * width / W, mi * height / W, width / W, grid[mi][ni]);
}
}
}
function draw() {
}
function mySquare(x, y, w, k) {
fill(cols[k])
noStroke();
rect(x, y, w, w);
}