xxxxxxxxxx
149
let test
function setup() {
createCanvas(windowWidth, windowHeight);
test = generateRooms(12)
}
function windowResized(){
resizeCanvas(windowWidth,windowHeight);
}
function generateRooms(roomCount){
let rooms = [[0,0]]
for(let i = 1; i < roomCount; i++){
let success = false
while(!success){
let source = random(rooms)
let x = source[0]
let y = source[1]
if(Math.random() < 0.5){
x += round(random(-1,1))
}else{
y += round(random(-1,1))
}
// check for overlap
success = true
for(let room of rooms){
if(room[0] == x && room [1] == y){
success = false
}
}
if(success){
rooms[rooms.length] = [x,y]
}
}
}
return rooms
}
let roomSize = 700
wallThickness = 40
doorWidth = 200
let cx = 0
cy = 0
let time = 0
function draw() {
background(220);
let dt = round(deltaTime/1000,3)
time += dt
if(keyIsDown(87)) cy += 300 * dt
if(keyIsDown(83)) cy -= 300 * dt
if(keyIsDown(65)) cx += 300 * dt
if(keyIsDown(68)) cx -= 300 * dt
for(let room of test){
noStroke()
fill(0)
rect(windowWidth - 100 + room[0] * 25,100 + room[1] * 25,20,20)
}
push()
translate(cx,cy)
for(let room of test){
let rx = room[0]*roomSize
let ry = room[1]*roomSize
noFill()
stroke(0)
strokeWeight(2)
strokeCap(PROJECT)
let check = false
for(let place of test){
if(place[0] == room[0] - 1 && place[1] == room[1]) check = true
}
line(rx - roomSize/2 + wallThickness, ry - roomSize/2 + wallThickness, rx - roomSize/2 + wallThickness, ry-doorWidth/2)
line(rx - roomSize/2 + wallThickness, ry-doorWidth/2,rx - roomSize/2, ry-doorWidth/2)
line(rx - roomSize/2 + wallThickness, ry + roomSize/2 - wallThickness, rx - roomSize/2 + wallThickness, ry+doorWidth/2)
line( rx - roomSize/2 + wallThickness, ry+doorWidth/2, rx - roomSize/2, ry+doorWidth/2)
if(!check) line(rx - roomSize/2, ry - doorWidth/2, rx - roomSize/2, ry + doorWidth/2)
check = false
for(let place of test){
if(place[0] == room[0] && place[1] == room[1] - 1) check = true
}
line(rx - roomSize/2 + wallThickness, ry - roomSize/2 + wallThickness, rx - doorWidth/2, ry - roomSize/2 + wallThickness)
line(rx - doorWidth/2, ry - roomSize/2 + wallThickness, rx - doorWidth/2, ry - roomSize/2)
line(rx + roomSize/2 - wallThickness, ry - roomSize/2 + wallThickness, rx + doorWidth/2, ry - roomSize/2 + wallThickness)
line(rx + doorWidth/2, ry - roomSize/2 + wallThickness, rx + doorWidth/2, ry - roomSize/2)
if(!check) line(rx - doorWidth/2, ry - roomSize/2, rx + doorWidth/2, ry - roomSize/2)
check = false
for(let place of test){
if(place[0] == room[0] + 1 && place[1] == room[1]) check = true
}
line(rx + roomSize/2 - wallThickness, ry - roomSize/2 + wallThickness, rx + roomSize/2 - wallThickness, ry-doorWidth/2)
line(rx + roomSize/2 - wallThickness, ry-doorWidth/2,rx + roomSize/2, ry-doorWidth/2)
line(rx + roomSize/2 - wallThickness, ry + roomSize/2 - wallThickness, rx + roomSize/2 - wallThickness, ry+doorWidth/2)
line( rx + roomSize/2 - wallThickness, ry+doorWidth/2, rx + roomSize/2, ry+doorWidth/2)
if(!check) line(rx + roomSize/2, ry - doorWidth/2, rx + roomSize/2, ry + doorWidth/2)
check = false
for(let place of test){
if(place[0] == room[0] && place[1] == room[1] + 1) check = true
}
line(rx - roomSize/2 + wallThickness, ry + roomSize/2 - wallThickness, rx - doorWidth/2, ry + roomSize/2 - wallThickness)
line(rx - doorWidth/2, ry + roomSize/2 - wallThickness, rx - doorWidth/2, ry + roomSize/2)
line(rx + roomSize/2 - wallThickness, ry + roomSize/2 - wallThickness, rx + doorWidth/2, ry + roomSize/2 - wallThickness)
line(rx + doorWidth/2, ry + roomSize/2 - wallThickness, rx + doorWidth/2, ry + roomSize/2)
if(!check) line(rx - doorWidth/2, ry + roomSize/2, rx + doorWidth/2, ry + roomSize/2)
}
pop()
}