domino-engine
Version:
Domino Engine to create Domino Games. The library would generate all the tiles and structures to easily create one of the multiple domino games.
3 lines (2 loc) • 1.89 kB
JavaScript
var t;!function(t){t.blank="0",t.one="1",t.two="2",t.tree="3",t.four="4",t.five="5",t.six="6",t.seven="7",t.eight="8",t.nine="9",t.ten="10",t.eleven="11",t.twelve="12"}(t||(t={}));var e=Object.keys(t).map(function(e){return Number(t[e])}),n=Object.keys(t).reduce(function(e,n){return e[t[n]]=n,e},{}),o=Object.keys(t).reduce(function(e,n){return e[n]=Number(t[n]),e},{}),c=function(t,e){var n=this;this.isDouble=!1,this.connected=new Set,this.isRoot=!1,this.value=function(){return[].concat(n.values)},this.toString=function(){return"["+n.values[0]+","+n.values[1]+"]"},this.has=function(t){return n.values.includes(t)},this.canAttach=function(t){var e=t.value(),o=e[1];return!(!n.has(e[0])&&!n.has(o))&&(n.isDouble?n.connected.size<=4:n.connected.size<=2)},this.attach=function(t,e,o){void 0===o&&(o={});var c=[].concat(n.connected).filter(function(t){return t.value===e}).length,r=n.isDouble?c<3:c<2;return!!(n.canAttach(t)&&t.canAttach(n)&&r)&&(n.connected.add({value:e,tile:t}),o.clean||t.attach(n,e,{clean:!0}),!0)},this.attached=function(){return[].concat(n.connected)},this.values=[t,e],t===e&&(this.isDouble=!0)},r=function(o){for(var r=new Set,a=Number(o||e[e.length-1]);a>-1;a--){var u=t[n[a]],i=new c(u,u);r.add(i);for(var s=a-1;s>-1;s--){var h=new c(u,t[n[s]]);r.add(h)}}return r},a=function(t){var e=this;void 0===t&&(t={}),this.next=function(t){void 0===t&&(t=1);for(var n=[];t>0;){var o=e.box.pop();n.push(o),t--}return n},this.draw=function(){return e.box.splice(~~(Math.random()*e.box.length),1)},this.suffle=function(){for(var t=[];0!==e.box.length;){var n=~~(Math.random()*e.box.length);t.push(e.box[n]),e.box.splice(n,1)}e.box=t},this.valueOf=function(){return[].concat(e.box)},this.box=[].concat((t.box||r(t.level)).values())};export{a as Box,o as KeysToValues,t as Pips,c as Tile,e as Values,n as ValuesToKeys,r as generateSuite};
//# sourceMappingURL=index.esm.js.map