added 4 diagonals to maze generator
spaced it out a bit
Log in to post a comment.
Canvas.setpenopacity(-1); const turtle = new Turtle(); // adjustments var lim = 99; // dimensional (100 = full) var extent = 99; // (100 best) less frame, more is off screen var interations = 2*lim*lim; // (maze fullness) var darken = true; // redraw lines to darken them var staying = .7; // 0 (curvy) to 1 (straight) var step = 3; // keeping track of where it has been var hit = new Array(); var max = Math.max(lim, extent); for (var x = -max; x <= max; x++) { hit[x] = new Array(); for (var y = -max; y <= max; y++) { hit[x][y] = false; } } function logHit() { hit[turtle.x()][turtle.y()] = true; } function isValidDestination(x,y) { if (x < -extent || x > extent || y < -extent || y > extent || hit[x][y]) return false; return true; } var lastdir; function pickDirection() { var okdirs = new Array(); if (isValidDestination(turtle.x()+step,turtle.y())) okdirs.push(1); if (isValidDestination(turtle.x()-step,turtle.y())) okdirs.push(2); if (isValidDestination(turtle.x(),turtle.y()+step)) okdirs.push(3); if (isValidDestination(turtle.x(),turtle.y()-step)) okdirs.push(4); if (isValidDestination(turtle.x()+step,turtle.y()+step)) okdirs.push(5); if (isValidDestination(turtle.x()-step,turtle.y()-step)) okdirs.push(6); if (isValidDestination(turtle.x()-step,turtle.y()+step)) okdirs.push(7); if (isValidDestination(turtle.x()+step,turtle.y()-step)) okdirs.push(8); if (okdirs.length == 0) return 0; if (Math.random() < staying && okdirs.indexOf(lastdir) != -1) { return lastdir; } else { return okdirs[Math.floor(Math.random()*okdirs.length)]; } } function drawTo(x,y) { var fromx = turtle.x(); var fromy = turtle.y(); turtle.goto(x,y); if (darken) { //redraw at slight offset to darken lines var offset = .1; turtle.goto(fromx+offset,fromy+offset); turtle.goto(x+offset,y+offset); turtle.goto(x,y); } } function move() { var newdir = pickDirection(); if (newdir == 0) { restartTurtle(); return; } lastdir = newdir; var newx = turtle.x(); var newy = turtle.y(); switch(newdir) { case 1: newx += step; break; case 2: newx -= step; break; case 3: newy += step; break; case 4: newy -= step; break; case 5: newx += step; newy += step; break; case 6: newx -= step; newy -= step; break; case 7: newx -= step; newy += step; break; case 8: newx += step; newy -= step; break; default: console.log('move switch default ('+newdir+') hit oops!'); } drawTo(newx, newy); logHit(); } function restartTurtle() { turtle.penup(); turtle.setx(randInt(-lim/step, lim/step)*step); turtle.sety(randInt(-lim/step, lim/step)*step); logHit(); turtle.pendown(); } // utils function randInt(min, max) { var pick = Math.floor(Math.random() * (max - min + 1) + min); return pick; } function outline() { turtle.penup(); turtle.goto(-extent,-extent); turtle.pendown(); drawTo(extent,-extent); drawTo(extent,extent); drawTo(-extent,extent); drawTo(-extent,-extent); } // init outline(); restartTurtle(); function walk(i) { move(); return i < interations; }