JSFiddle - React, Tailwind, and code Playground

by bigbadwaffle

HTML

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

CSS

body {
    margin:0
}

JavaScript

var Dungeon = {
    size: 64,
    data: [],
    Generate: function () {
        for (var i = 0; i < this.size; i++) {
            this.data.push([]);
            for (var j = 0; j < this.size; j++) {
                this.data[i].push(0);
            }
        }

        var min_size = 10;
        var max_size = 20;

        var pos = {
            x: 0,
            y: 0
        };

        for (var a = 0; a < 25; a++) {
            var size = Helpers.GetRandom(min_size, max_size);
            pos.x = Helpers.GetRandom(0, this.size - max_size);
            pos.y = Helpers.GetRandom(0, this.size - max_size);

            for (var i = pos.x; i <= pos.x + size; i++) {
                for (var j = pos.y; j <= pos.y + size; j++) {
                    var tile = this.data[i][j];
                    if (tile != 0)
                        continue;
                    if ((i == pos.x) || (j == pos.y) || (i == pos.x + size) || (j == pos.y + size)) this.data[i][j] = 2;
                    else this.data[i][j] = 1;
                }
            }
        }
        
        var count = 0;
        while (true) {
            count++;
            var pos = {};
            for (var i = 0; i < this.size; i++) {
                for (var j = 0; j < this.size; j++) {
                    if (this.data[i][j] == 1) {
                        pos.x = i;
                        pos.y = j;
                        i = this.size;
                        j = this.size;
                    }
                }
            }
            
            this.recurse(pos.x, pos.y, 1, 100);
            this.recurse_find(pos.x, pos.y, 100, 1);
            
            var found = false;
            for (var i = 0; i < this.size; i++) {
                for (var j = 0; j < this.size; j++) {
                    if (this.data[i][j] == 1) {
                        found = true
                        i = this.size;
                        j = this.size;
                    }
                }
            }
 ...