amazejs
Version:
a simple maze generator
3 lines (2 loc) • 3.05 kB
JavaScript
require=function t(r,i,e){function o(h,s){if(!i[h]){if(!r[h]){var p="function"==typeof require&&require;if(!s&&p)return p(h,!0);if(n)return n(h,!0);var u=new Error("Cannot find module '"+h+"'");throw u.code="MODULE_NOT_FOUND",u}var f=i[h]={exports:{}};r[h][0].call(f.exports,function(t){var i=r[h][1][t];return o(i?i:t)},f,f.exports,t,r,i,e)}return i[h].exports}for(var n="function"==typeof require&&require,h=0;h<e.length;h++)o(e[h]);return o}({1:[function(t,r,i){r.exports=t("./lib/priorityq")},{"./lib/priorityq":2}],2:[function(t,r,i){!function(){"use strict";function t(t){if(!t||2!=t.length)throw"a valid comparator function required";this.comp=t,this.items=[]}t.prototype.push=function(t){for(var r=0;r<this.items.length;r++)if(this.comp(t,this.items[r]))return void this.items.splice(r,0,t);this.items[r]=t},t.prototype.pop=function(){return this.items.shift()},t.prototype.peek=function(){return this.items[0]},t.prototype.size=function(){return this.items.length},t.prototype.clear=function(){this.items=[]},t.prototype.isEmpty=function(){return 0===this.items.length},r.exports.PriorityQ=t}()},{}],maze:[function(t,r,i){!function(){"use strict";function i(t,r){this.width=t,this.height=r,this.grid=new Uint8Array(t*r)}var e=t("priorityjs");Array.prototype.peek=function(){return this.length>0?this[this.length-1]:void 0},i.prototype.test=function(t,r){return!(t<=0||t>=this.height-1||r<=0||r>=this.width-1||this.grid[t*this.width+r])},i.prototype.get=function(t,r){return this.grid[t*this.width+r]},i.prototype.set=function(t,r,i){this.grid[t*this.width+r]=i},i.prototype.fringe=function(t,r){for(var i=[],e=[[-2,0],[0,2],[2,0],[0,-2]],o=0;o<e.length;o++)this.test(t+e[o][0],r+e[o][1])&&i.push([t+e[o][0],r+e[o][1]]);return i},i.prototype.reset=function(){for(var t=this.grid.length;t;)this.grid[--t]=0},i.prototype.generate=function(){for(var t=[],r=[1,1];r;){this.set(r[0],r[1],1);var i=this.fringe(r[0],r[1]);if(i.length>0){var e=i[Math.floor(Math.random()*i.length)];t.push(r),this.set(Math.floor((r[0]+e[0])/2),Math.floor((r[1]+e[1])/2),1),r=e}else r=t.pop()}},i.prototype.solve=function(t,r){var i=new e.PriorityQ(function(t,r){return t.score<r.score}),o=new Set,n=this,h=function(t,r){return Math.abs(t[0]-r[0])+Math.abs(t[1]-r[1])},s=function(t,r){return!(t<=0||t>=n.height-1||r<=0||r>=n.width-1)&&n.grid[t*n.width+r]},p=function(t,r){for(var i=[],e=[[-1,0],[0,1],[1,0],[0,-1]],o=0;o<e.length;o++)s(t+e[o][0],r+e[o][1])&&i.push([t+e[o][0],r+e[o][1]]);return i},u={path:[t],score:h(t,r)};for(o.add(JSON.stringify(u.path.peek()));u&&0!==h(u.path.peek(),r);){for(var f=p(u.path.peek()[0],u.path.peek()[1]),a=0;a<f.length;a++){var c=JSON.stringify(f[a]);if(!o.has(c)){o.add(c);var g=u.path.slice(0);g.push(f[a]),i.push({path:g,score:u.score+h(f[a],r)})}}u=i.pop()}return u?u.path:[]},i.prototype.toString=function(){for(var t="",r=0;r<this.height;r++){t+="\n";for(var i=0;i<this.width;i++)t+=this.grid[r*this.width+i]?" ":"█"}return t},r.exports.Backtracker=i}()},{priorityjs:1}]},{},["maze"]);
//# sourceMappingURL=bundle.js.map