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.73 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={}));const e=Object.keys(t).map(e=>Number(t[e])),s=Object.keys(t).reduce((e,s)=>(e[t[s]]=s,e),{}),h=Object.keys(t).reduce((e,s)=>(e[s]=Number(t[s]),e),{});class i{constructor(t,e){this.isDouble=!1,this.connected=new Set,this.isRoot=!1,this.value=()=>[...this.values],this.toString=()=>`[${this.values[0]},${this.values[1]}]`,this.has=t=>this.values.includes(t),this.canAttach=t=>{const[e,s]=t.value();return!(!this.has(e)&&!this.has(s))&&(this.isDouble?this.connected.size<=4:this.connected.size<=2)},this.attach=(t,e,s={})=>{const h=[...this.connected].filter(t=>t.value===e).length,i=this.isDouble?h<3:h<2;return!!(this.canAttach(t)&&t.canAttach(this)&&i)&&(this.connected.add({value:e,tile:t}),s.clean||t.attach(this,e,{clean:!0}),!0)},this.attached=()=>[...this.connected],this.values=[t,e],t===e&&(this.isDouble=!0)}}const n=h=>{const n=new Set;for(let o=Number(h||e[e.length-1]);o>-1;o--){const e=t[s[o]],h=new i(e,e);n.add(h);for(let h=o-1;h>-1;h--){const o=new i(e,t[s[h]]);n.add(o)}}return n};class o{constructor(t={}){this.next=(t=1)=>{const e=[];for(;t>0;){const s=this.box.pop();e.push(s),t--}return e},this.draw=()=>this.box.splice(~~(Math.random()*this.box.length),1),this.suffle=()=>{const t=[];for(;0!==this.box.length;){const e=~~(Math.random()*this.box.length);t.push(this.box[e]),this.box.splice(e,1)}this.box=t},this.valueOf=()=>[...this.box],this.box=[...(t.box||n(t.level)).values()]}}export{o as Box,h as KeysToValues,t as Pips,i as Tile,e as Values,s as ValuesToKeys,n as generateSuite};
//# sourceMappingURL=index.modern.js.map