Random Walk Dungeon + Dragon
Random Walk Dungeon with Random Walk Dragons
let d, g, img, dd;
let wArray = [];
let oldx = 0,
oldy = 0;
function setup() {
b = min(windowWidth, windowHeight);
cnv = createCanvas(b, b);
dd = width / random(20, 30);
np = min(width * 1.5, 1500);
background(0);
g = 20;
d = width / g;
wArray[0] = [];
wArray[1] = [];
wArray[2] = [];
wArray[3] = [];
wArray[4] = [];
wArray[5] = [];
stroke(255);
randomWalk();
frameRate(2);
}
function draw() {
translate(width / 2, width / 2);
drawWalk();
}
function randomWalk() {
for (let t = 0; t < np; t++) {
p = random(-1, 1);
s = random(-1, 1);
if (p > 0) {
p = dd;
}
if (p < 0) {
p = -dd;
}
q = random(-1, 1);
if (q > 0) {
q = dd;
}
if (q < 0) {
q = -dd;
}
x = oldx + p * cos(p + oldx * t) * cos(t + oldy);
y = oldy + q * cos(q + oldy * t) * sin(t + oldx);
if (x > width / 2) {
oldx = oldx - width;
x = x - width;
}
if (x < -width / 2) {
oldx = oldx + width;
x = x + width;
}
if (y > width / 2) {
oldy = oldy - width;
y = y - width;
}
if (y < -width / 2) {
oldy = oldy + width;
y = y + width;
}
strokeWeight((d * abs(s)) / 2);
wArray[0][t] = oldy;
wArray[1][t] = oldx;
wArray[2][t] = y;
wArray[3][t] = x;
wArray[4][t] = (d * abs(s)) / 2;
if (s > 0.93) {
wArray[5][t] = 1;
}
line(oldy, oldx, y, x);
oldx = x;
oldy = y;
}
}
function drawWalk() {
background(0);
for (let t = 0; t < np; t++) {
strokeWeight(wArray[4][t]);
line(wArray[0][t], wArray[1][t], wArray[2][t], wArray[3][t]);
}
for (let t = 0; t < np; t++) {
if (wArray[5][t] === 1) {
push();
stroke(200, 0, 0);
translate(oldy, oldx);
randomDragon(width / 1500);
pop();
}
}
push();
translate(-width / 2, -height / 2);
grid();
pop();
}
function randomDragon(dd) {
oldx1 = 0;
oldy1 = 1;
for (let t = 0; t < 200; t++) {
p = random(-1, 1);
s = random(-1, 1);
if (p > 0) {
p = dd;
}
if (p < 0) {
p = -dd;
}
q = random(-1, 1);
if (q > 0) {
q = dd;
}
if (q < 0) {
q = -dd;
}
x1 = oldx1 + p * cos(p + oldx1 * t) * cos(t + oldy1);
y1 = oldy1 + q * cos(q + oldy1 * t) * sin(t + oldx1);
if (x > width / 2) {
oldx1 = oldx1 - width;
x1 = x1 - width;
}
if (x1 < -width / 2) {
oldx1 = oldx1 + width;
x = x1 + width;
}
if (y1 > width / 2) {
oldy1 = oldy1 - width;
y1 = y1 - width;
}
if (y1 < -width / 2) {
oldy1 = oldy1 + width;
y1 = y1 + width;
}
strokeWeight(width / 5000);
line(oldy1, oldx1, y1, x1);
oldx1 = x1;
oldy1 = y1;
}
}
function grid() {
fill(0);
noStroke();
rect(0, 0, width, d / 3);
rect(0, height - d / 3, width, d / 3);
rect(0, 0, d / 3, height);
rect(width - d / 3, 0, d / 3, height);
strokeWeight(0.5);
stroke(0);
for (let i = 0; i < g; i++) {
for (let j = 0; j < 5; j++) {
line(i * d + (j * d) / 5, 0, i * d + (j * d) / 5, width);
line(0, i * d + (j * d) / 5, width, i * d + (j * d) / 5);
}
}
}
function keyPressed() {
if (keyCode === 32) {
save(cnv, "RandomDungeon.jpg");
}
if (keyCode === 78) {
setup();
draw();
}
}
function windowResized() {
setup();
draw();
}