Random Cave Generator

HTML

<canvas id='canvas'></canvas>

JavaScript

Math.seed = 6;
Math.seededRandom = function (max, min) {
    max = max || 1;
    min = min || 0;

    Math.seed = (Math.seed * 9301 + 49297) % 233280;
    var rnd = Math.seed / 233280;

    return min + rnd * (max - min);
}

function get2DArray(size) {
    var map = [];
    for (var i = 0; i < size; i++) {
        map.push([]);
        for (var j = 0; j < size; j++) {
            map[i].push(0);
        }
    }
    
    return map;
}

var size = 64;
var map = get2DArray(size);
for (var i = 0; i < size; i++) {
    for (var j = 0; j < size; j++) {
        map[i][j] = ~~Math.seededRandom(2, 0);
    }
}

var smoothness = 3;
for (var i = 0; i < smoothness; i++) {
    var new_map = get2DArray(size);
    for (var x = 0; x < size; x++) {
        for (var y = 0; y < size; y++) {
            var x_range = {low: Math.max(0, x - 1), high: Math.min(size - 1, x + 1)};  
            var y_range = {low: Math.max(0, y - 1), high: Math.min(size - 1, y + 1)};  
            var wall_count = 0;
            for (var a = x_range.low; a <= x_range.high; a++) {
                for (var b = y_range.low; b <= y_range.high; b++) {
                    if ((a == x) && (b == y))
                        continue;
                    
                    wall_count += 1 - map[a][b];
                }
            }
            if (((map[x][y] == 0) && (wall_count >= 4)) ||
                ((map[x][y] == 1) && (wall_count >= 5)) ||
                ((x == 0) || (y == 0) || (x == size - 1) || (y == size - 1)))
                    new_map[x][y] = 0;
            else
                new_map[x][y] = 1;
        }
    }
    map = new_map;
}

for (var i = 0; i < size; i++) {
    for (var j = 0; j < size; j++) {
        var cell = map[i][j];
        if (cell == 0) {
            if (((i > 0) && (map[i - 1][j] == 1)) ||
                ((j > 0) && (map[i][j - 1] == 1)) ||
                ((i < size - 1) && (map[i + 1][j] == 1)) ||
                ((j < size - 1) && (map[i][j + 1] == 1)))
                   ...