Random Dungeon Generator
More info on this can be found on my site: http://bigbadwofl.me/random-dungeon-generator/
by realhunts
HTML
<canvas id='canvas'></canvas>
CSS
body {
margin:0
}
JavaScript
var Dungeon = {
map: null,
map_size: 64,
rooms: [],
Generate: function () {
this.map = [];
for (var x = 0; x < this.map_size; x++) {
this.map[x] = [];
for (var y = 0; y < this.map_size; y++) {
this.map[x][y] = 0;
}
}
var room_count = Helpers.GetRandom(10, 20);
var min_size = 5;
var max_size = 15;
for (var i = 0; i < room_count; i++) {
var room = {};
room.x = Helpers.GetRandom(1, this.map_size - max_size - 1);
room.y = Helpers.GetRandom(1, this.map_size - max_size - 1);
room.w = Helpers.GetRandom(min_size, max_size);
room.h = Helpers.GetRandom(min_size, max_size);
if (this.DoesCollide(room)) {
i--;
continue;
}
room.w--;
room.h--;
this.rooms.push(room);
}
this.SquashRooms();
for (i = 0; i < room_count; i++) {
var roomA = this.rooms[i];
var roomB = this.FindClosestRoom(roomA);
pointA = {
x: Helpers.GetRandom(roomA.x, roomA.x + roomA.w),
y: Helpers.GetRandom(roomA.y, roomA.y + roomA.h)
};
pointB = {
x: Helpers.GetRandom(roomB.x, roomB.x + roomB.w),
y: Helpers.GetRandom(roomB.y, roomB.y + roomB.h)
};
while ((pointB.x != pointA.x) || (pointB.y != pointA.y)) {
if (pointB.x != pointA.x) {
if (pointB.x > pointA.x) pointB.x--;
else pointB.x++;
} else if (pointB.y != pointA.y) {
if (pointB.y > pointA.y) pointB.y--;
else pointB.y++;
}
this.map[pointB.x][pointB.y] = 1;
}
}
for (i = 0; i < room_count; i++) {
var room = this.rooms[i];
...