xxxxxxxxxx
99
let blank, wall;
let grid;
function setup() {
// createCanvas(800, 800);
createCanvas(400, 400);
background(0);
stroke(255);
noFill();
let off = width * 0.25;
rect(off, off, width-2*off, height-2*off);
startpt = createVector(int(random(width-1)), int(random(height-1)));
point(startpt);
blank = color(0,0,0);
wall = color(255,255,255);
grid = [];
loadPixels();
for (let y = 0; y < height; y++) {
grid[y] = []
for (let x = 0; x < width; x++) {
grid[y][x] = false;
}
}
for (let y = off; y < height-off; y++) {
for (let x = off; x < width-off; x++) {
grid[y][x] = true;
}
}
// console.log(grid)
}
let startpt;
function draw() {
// floodFill(startpt.x, startpt.y);
// background(220);
// loadPixels();
// updatePixels();
startpt = bfsFloodFill(startpt.x, startpt.y);
timer = 100;
}
let q = [];
let timer = 100;
function check(x, y) {
if (x >= 0 && x <= width-1 && y >= 0 && y <= height-1) {
if (grid[y][x]) return false;
return true;
}
return false;
}
function bfsFloodFill(x, y) {
q.push(createVector(x, y));
while (q.length > 0 && timer > 0) {
let pt = q.pop();
point(pt.x, pt.y);
grid[pt.y][pt.x] = true;
if (check(pt.x+1, pt.y))
q.push(createVector(pt.x+1,pt.y))
if (check(pt.x-1, pt.y))
q.push(createVector(pt.x-1,pt.y))
if (check(pt.x, pt.y+1))
q.push(createVector(pt.x,pt.y+1))
if (check(pt.x, pt.y-1))
q.push(createVector(pt.x,pt.y-1))
timer--;
}
if (timer == 0) return q[0];
}
function floodFill(x, y)
{
if (x > width-1 || x < 0 || y < 0 || y > height-1) return;
let col = get(x, y);
if (col == wall) return;
point(x, y);
floodFill(x + 1, y); // then i can either go south
floodFill(x - 1, y); // or north
floodFill(x, y + 1); // or east
floodFill(x, y - 1); // or west
return;
}