From b56af2906e9be9c87aa56f8a8e70b3696ec296a3 Mon Sep 17 00:00:00 2001 From: Didictateur Date: Tue, 18 Nov 2025 16:40:52 +0100 Subject: [PATCH] removed build/ --- .gitignore | 3 ++- build/dp0.js | 1 - build/dp1.js | 1 - build/dp2.js | 1 - build/dp3.js | 1 - build/dp4.js | 1 - build/dp5.js | 1 - build/dp6.js | 1 - build/dp7.js | 1 - build/test.js | 1 - build/test_hand.js | 1 - build/test_yakus.js | 1 - build/txt.js | 1 - build/txt0.js | 1 - build/txt1.js | 1 - build/txt2.js | 1 - build/txt3.js | 1 - build/txt4.js | 1 - build/txt5.js | 1 - build/txt6.js | 1 - build/txt7.js | 1 - 21 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 build/dp0.js delete mode 100644 build/dp1.js delete mode 100644 build/dp2.js delete mode 100644 build/dp3.js delete mode 100644 build/dp4.js delete mode 100644 build/dp5.js delete mode 100644 build/dp6.js delete mode 100644 build/dp7.js delete mode 100644 build/test.js delete mode 100644 build/test_hand.js delete mode 100644 build/test_yakus.js delete mode 100644 build/txt.js delete mode 100644 build/txt0.js delete mode 100644 build/txt1.js delete mode 100644 build/txt2.js delete mode 100644 build/txt3.js delete mode 100644 build/txt4.js delete mode 100644 build/txt5.js delete mode 100644 build/txt6.js delete mode 100644 build/txt7.js diff --git a/.gitignore b/.gitignore index ccb2c80..7d245c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ -package-lock.json \ No newline at end of file +package-lock.json +build/ \ No newline at end of file diff --git a/build/dp0.js b/build/dp0.js deleted file mode 100644 index 1616fc8..0000000 --- a/build/dp0.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,e){this.family=t,this.value=i,this.red=e,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((e=void 0)||(e=Promise))((function(n,l){function h(t){try{a(s.next(t))}catch(t){l(t)}}function r(t){try{a(s.throw(t))}catch(t){l(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(h,r)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}loadImg(t,i){return new Promise(((e,s)=>{t.onload=()=>e(),t.onerror=()=>s(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,e){this.tiles=t,this.stolenFrom=i,this.belongsTo=e}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,e,s,n,l,h){t.save(),t.translate(525,525),t.rotate(l),t.translate(-525,-525);const r=75*n,a=90*n,o=25*n/2,c=(this.belongsTo-this.stolenFrom-1+4)%4,u=void 0===h?-1:h.getFamily(),d=void 0===h?0:h.getValue(),g=(i,e,s,l)=>{i.drawTile(t,e,s,n,!1,l,i.isEqual(u,d))},m=Math.PI/2;switch(c){case 0:g(this.tiles[0],i,e+o,m),g(this.tiles[1],i+a,e,0),g(this.tiles[2],i+a+r+s*n,e,0);break;case 1:g(this.tiles[0],i,e,0),g(this.tiles[1],i+a,e+o,-m),g(this.tiles[2],i+a+r+3*s*n,e,0);break;case 2:g(this.tiles[0],i,e,0),g(this.tiles[1],i+r+s*n,e,0),g(this.tiles[2],i+a+r+s*n,e+o,-m);break;default:console.error(`Position non prise en charge: ${c}`)}t.restore()}}const e="m",s=1,n="p",l=2,h="s",r=3,a="w",o=4,c="d",u=5;class d{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const e=this.findTileIndex(t,i);if(-1!==e){[this.tiles[e],this.tiles[0]]=[this.tiles[0],this.tiles[e]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((e=>e.getFamily()===t&&e.getValue()===i))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),e=i.getFamily(),s=i.getValue();if(this.count(e,s)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(e,s)>=2){const e=this.tryFormTriplet(i,t);if(e)return e}if(e<=3){const n=this.count(e,s-1)>0,l=this.count(e,s-2)>0;if(n&&l){const e=this.tryFormSequence(i,t);if(e)return e}}this.tiles.push(i),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),s=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==s)return this.tiles.push(t),this.sort(),s.push(new i([t,e],0,0)),s}tryFormTriplet(t,e){const s=this.find(t.getFamily(),t.getValue()),n=this.find(t.getFamily(),t.getValue()),l=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==l)return l.push(new i([t,s,n],0,0)),this.tiles.push(t),this.sort(),l}tryFormSequence(t,e){const s=this.find(t.getFamily(),t.getValue()-1),n=this.find(t.getFamily(),t.getValue()-2),l=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==l)return l.push(new i([n,s,t],0,0)),this.tiles.push(t),this.sort(),l}}class g{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;ie.getFamily()===t&&e.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}toGroup(t=!1){return new d(this.tiles).findGroups(t)}drawHand(t,i,e,s,n,l=void 0,h=!1,r=0){const a=(75+s)*n,o=Math.cos(r)*a,c=Math.sin(r)*a;for(let s=0;st.preloadImg())))},new((e=void 0)||(e=Promise))((function(n,l){function h(t){try{a(s.next(t))}catch(t){l(t)}}function r(t){try{a(s.throw(t))}catch(t){l(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(h,r)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class m{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,e,s,n=0,l=0){let h=i,r=e;const a=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const e of a){for(let i=e.start;i<=e.end;i++){const l=this.find(e.family,i);l&&(l.drawTile(t,h,r,s,!1,0,!1),h+=(75+n)*s)}h=i,r+=(100+l)*s}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(i);return e&&e.length>0&&(e.pop(),0===e.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,e)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const e=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(e)||[];s.push(i),this.tileIndexMap.set(e,s)}find(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);if(!s||0===s.length)return;const n=s[0];if(n>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[n],this.tiles[0]]=[this.tiles[0],this.tiles[n]],this.updateIndicesAfterSwap(0,n);const l=this.tiles.shift();return this.decrementIndicesAfterShift(),l}count(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);return s?s.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new g;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,s=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((e=void 0)||(e=Promise))((function(n,l){function h(t){try{a(s.next(t))}catch(t){l(t)}}function r(t){try{a(s.throw(t))}catch(t){l(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(h,r)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const e=this.tiles[t],s=this.tiles[i],n=this.getTileKey(e.getFamily(),e.getValue()),l=this.getTileKey(s.getFamily(),s.getValue()),h=this.tileIndexMap.get(n)||[],r=this.tileIndexMap.get(l)||[],a=h.indexOf(i),o=r.indexOf(t);-1!==a&&(h[a]=t),-1!==o&&(r[o]=i),this.tileIndexMap.set(n,h),this.tileIndexMap.set(l,r)}decrementIndicesAfterShift(){var t;for(const[i,e]of this.tileIndexMap.entries())this.tileIndexMap.set(i,e.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;t1100}getTile(){return this.tile}drawFallingTile(t){var i;null===(i=this.tile)||void 0===i||i.drawTile(t,this.x,this.y,1,!1,this.orientation,!1,!1)}}const y=new class{constructor(){this.tiles=[],this.tileAddTimer=0,this.deck=new m(!0)}update(t){let i=this.tiles.length;for(;i--;){const e=this.tiles[i];e.update(t),e.isOutside()&&(this.deck.push(e.getTile()),this.tiles.splice(i,1))}this.tileAddTimer+=t,this.tileAddTimer>=1/.75?(this.addFallingTile(),this.tileAddTimer=0):Math.random()<.75*t&&this.addFallingTile()}addFallingTile(){if(0===this.deck.length())return;this.deck.length()>1&&this.deck.shuffle();const t=new p(this.deck.pop(),Math.floor(1e3*Math.random()),-150,Math.random()*f,1*(2*Math.random()-1));this.tiles.push(t)}drawRain(t){for(const i of this.tiles)i.drawFallingTile(t)}preloadRain(){return t=this,i=void 0,s=function*(){console.log("preload rain"),yield this.deck.preload()},new((e=void 0)||(e=Promise))((function(n,l){function h(t){try{a(s.next(t))}catch(t){l(t)}}function r(t){try{a(s.throw(t))}catch(t){l(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(h,r)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}};let v,w=0,I=0;const x=[],F=1/60,T=document.getElementById("myCanvas"),M=T.getContext("2d",{alpha:!1});T.width=1050,T.height=1050;const S=document.createElement("canvas"),V=S.getContext("2d",{alpha:!1});function k(t){if(!w)return w=t,void(v=requestAnimationFrame(k));const i=t-w;w=t,i<100&&function(t){if(M){for(I+=t/1e3;I>=F;)y.update(F),I-=F;V.fillStyle="#007730",V.fillRect(0,0,1050,1050),y.drawRain(V),M.drawImage(S,0,0)}}(i),v=requestAnimationFrame(k)}function P(){cancelAnimationFrame(v),x.forEach((t=>t()))}S.width=T.width,S.height=T.height,"undefined"!=typeof window&&function(){return t=this,i=void 0,s=function*(){if(M){console.log("Load beginning");try{yield y.preloadRain(),console.log("Loading completed"),function(){const t=()=>{document.hidden?(cancelAnimationFrame(v),w=0):(w=performance.now(),v=requestAnimationFrame(k))};document.addEventListener("visibilitychange",t),x.push((()=>{document.removeEventListener("visibilitychange",t)}))}(),w=performance.now(),v=requestAnimationFrame(k),window.cleanup=P}catch(t){console.error("Erreur lors de l'initialisation:",t)}}else console.error("Context canvas indisponible")},new((e=void 0)||(e=Promise))((function(n,l){function h(t){try{a(s.next(t))}catch(t){l(t)}}function r(t){try{a(s.throw(t))}catch(t){l(t)}}function a(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(h,r)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}().catch(console.error)})(); \ No newline at end of file diff --git a/build/dp1.js b/build/dp1.js deleted file mode 100644 index 1adfd19..0000000 --- a/build/dp1.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,e){this.family=t,this.value=i,this.red=e,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((e=void 0)||(e=Promise))((function(l,n){function r(t){try{a(s.next(t))}catch(t){n(t)}}function h(t){try{a(s.throw(t))}catch(t){n(t)}}function a(t){var i;t.done?l(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(r,h)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}loadImg(t,i){return new Promise(((e,s)=>{t.onload=()=>e(),t.onerror=()=>s(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,e){this.tiles=t,this.stolenFrom=i,this.belongsTo=e}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,e,s,l,n,r){t.save(),t.translate(525,525),t.rotate(n),t.translate(-525,-525);const h=75*l,a=90*l,o=25*l/2,u=(this.belongsTo-this.stolenFrom-1+4)%4,c=void 0===r?-1:r.getFamily(),f=void 0===r?0:r.getValue(),d=(i,e,s,n)=>{i.drawTile(t,e,s,l,!1,n,i.isEqual(c,f))},g=Math.PI/2;switch(u){case 0:d(this.tiles[0],i,e+o,g),d(this.tiles[1],i+a,e,0),d(this.tiles[2],i+a+h+s*l,e,0);break;case 1:d(this.tiles[0],i,e,0),d(this.tiles[1],i+a,e+o,-g),d(this.tiles[2],i+a+h+3*s*l,e,0);break;case 2:d(this.tiles[0],i,e,0),d(this.tiles[1],i+h+s*l,e,0),d(this.tiles[2],i+a+h+s*l,e+o,-g);break;default:console.error(`Position non prise en charge: ${u}`)}t.restore()}}const e="m",s=1,l="p",n=2,r="s",h=3,a="w",o=4,u="d",c=5;class f{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const e=this.findTileIndex(t,i);if(-1!==e){[this.tiles[e],this.tiles[0]]=[this.tiles[0],this.tiles[e]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((e=>e.getFamily()===t&&e.getValue()===i))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),e=i.getFamily(),s=i.getValue();if(this.count(e,s)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(e,s)>=2){const e=this.tryFormTriplet(i,t);if(e)return e}if(e<=3){const l=this.count(e,s-1)>0,n=this.count(e,s-2)>0;if(l&&n){const e=this.tryFormSequence(i,t);if(e)return e}}this.tiles.push(i),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),s=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==s)return this.tiles.push(t),this.sort(),s.push(new i([t,e],0,0)),s}tryFormTriplet(t,e){const s=this.find(t.getFamily(),t.getValue()),l=this.find(t.getFamily(),t.getValue()),n=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(l),this.sort(),void 0!==n)return n.push(new i([t,s,l],0,0)),this.tiles.push(t),this.sort(),n}tryFormSequence(t,e){const s=this.find(t.getFamily(),t.getValue()-1),l=this.find(t.getFamily(),t.getValue()-2),n=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(l),this.sort(),void 0!==n)return n.push(new i([l,s,t],0,0)),this.tiles.push(t),this.sort(),n}}class d{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;ie.getFamily()===t&&e.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}toGroup(t=!1){return new f(this.tiles).findGroups(t)}drawHand(t,i,e,s,l,n=void 0,r=!1,h=0){const a=(75+s)*l,o=Math.cos(h)*a,u=Math.sin(h)*a;for(let s=0;st.preloadImg())))},new((e=void 0)||(e=Promise))((function(l,n){function r(t){try{a(s.next(t))}catch(t){n(t)}}function h(t){try{a(s.throw(t))}catch(t){n(t)}}function a(t){var i;t.done?l(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(r,h)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class g{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,e,s,l=0,n=0){let r=i,h=e;const a=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const e of a){for(let i=e.start;i<=e.end;i++){const n=this.find(e.family,i);n&&(n.drawTile(t,r,h,s,!1,0,!1),r+=(75+l)*s)}r=i,h+=(100+n)*s}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(i);return e&&e.length>0&&(e.pop(),0===e.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,e)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const e=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(e)||[];s.push(i),this.tileIndexMap.set(e,s)}find(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);if(!s||0===s.length)return;const l=s[0];if(l>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[l],this.tiles[0]]=[this.tiles[0],this.tiles[l]],this.updateIndicesAfterSwap(0,l);const n=this.tiles.shift();return this.decrementIndicesAfterShift(),n}count(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);return s?s.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new d;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,s=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((e=void 0)||(e=Promise))((function(l,n){function r(t){try{a(s.next(t))}catch(t){n(t)}}function h(t){try{a(s.throw(t))}catch(t){n(t)}}function a(t){var i;t.done?l(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(r,h)}a((s=s.apply(t,i||[])).next())}));var t,i,e,s}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const e=this.tiles[t],s=this.tiles[i],l=this.getTileKey(e.getFamily(),e.getValue()),n=this.getTileKey(s.getFamily(),s.getValue()),r=this.tileIndexMap.get(l)||[],h=this.tileIndexMap.get(n)||[],a=r.indexOf(i),o=h.indexOf(t);-1!==a&&(r[a]=t),-1!==o&&(h[o]=i),this.tileIndexMap.set(l,r),this.tileIndexMap.set(n,h)}decrementIndicesAfterShift(){var t;for(const[i,e]of this.tileIndexMap.entries())this.tileIndexMap.set(i,e.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;t{r.cleanup()}}else console.error("Impossible d'obtenir le contexte du canvas.")}else console.error("Canvas introuvable dans le DOM.")}))}()})(); \ No newline at end of file diff --git a/build/dp2.js b/build/dp2.js deleted file mode 100644 index dab7b6f..0000000 --- a/build/dp2.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,e){this.family=t,this.value=i,this.red=e,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((e=void 0)||(e=Promise))((function(n,h){function l(t){try{r(s.next(t))}catch(t){h(t)}}function a(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(l,a)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}loadImg(t,i){return new Promise(((e,s)=>{t.onload=()=>e(),t.onerror=()=>s(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,e){this.tiles=t,this.stolenFrom=i,this.belongsTo=e}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,e,s,n,h,l){t.save(),t.translate(525,525),t.rotate(h),t.translate(-525,-525);const a=75*n,r=90*n,o=25*n/2,c=(this.belongsTo-this.stolenFrom-1+4)%4,d=void 0===l?-1:l.getFamily(),u=void 0===l?0:l.getValue(),f=(i,e,s,h)=>{i.drawTile(t,e,s,n,!1,h,i.isEqual(d,u))},m=Math.PI/2;switch(c){case 0:f(this.tiles[0],i,e+o,m),f(this.tiles[1],i+r,e,0),f(this.tiles[2],i+r+a+s*n,e,0);break;case 1:f(this.tiles[0],i,e,0),f(this.tiles[1],i+r,e+o,-m),f(this.tiles[2],i+r+a+3*s*n,e,0);break;case 2:f(this.tiles[0],i,e,0),f(this.tiles[1],i+a+s*n,e,0),f(this.tiles[2],i+r+a+s*n,e+o,-m);break;default:console.error(`Position non prise en charge: ${c}`)}t.restore()}}const e="m",s=1,n="p",h=2,l="s",a=3,r="w",o=4,c="d",d=5;class u{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const e=this.findTileIndex(t,i);if(-1!==e){[this.tiles[e],this.tiles[0]]=[this.tiles[0],this.tiles[e]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((e=>e.getFamily()===t&&e.getValue()===i))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),e=i.getFamily(),s=i.getValue();if(this.count(e,s)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(e,s)>=2){const e=this.tryFormTriplet(i,t);if(e)return e}if(e<=3){const n=this.count(e,s-1)>0,h=this.count(e,s-2)>0;if(n&&h){const e=this.tryFormSequence(i,t);if(e)return e}}this.tiles.push(i),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),s=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==s)return this.tiles.push(t),this.sort(),s.push(new i([t,e],0,0)),s}tryFormTriplet(t,e){const s=this.find(t.getFamily(),t.getValue()),n=this.find(t.getFamily(),t.getValue()),h=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([t,s,n],0,0)),this.tiles.push(t),this.sort(),h}tryFormSequence(t,e){const s=this.find(t.getFamily(),t.getValue()-1),n=this.find(t.getFamily(),t.getValue()-2),h=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([n,s,t],0,0)),this.tiles.push(t),this.sort(),h}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;ie.getFamily()===t&&e.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}toGroup(t=!1){return new u(this.tiles).findGroups(t)}drawHand(t,i,e,s,n,h=void 0,l=!1,a=0){const r=(75+s)*n,o=Math.cos(a)*r,c=Math.sin(a)*r;for(let s=0;st.preloadImg())))},new((e=void 0)||(e=Promise))((function(n,h){function l(t){try{r(s.next(t))}catch(t){h(t)}}function a(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(l,a)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class m{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,e,s,n=0,h=0){let l=i,a=e;const r=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const e of r){for(let i=e.start;i<=e.end;i++){const h=this.find(e.family,i);h&&(h.drawTile(t,l,a,s,!1,0,!1),l+=(75+n)*s)}l=i,a+=(100+h)*s}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(i);return e&&e.length>0&&(e.pop(),0===e.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,e)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const e=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(e)||[];s.push(i),this.tileIndexMap.set(e,s)}find(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);if(!s||0===s.length)return;const n=s[0];if(n>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[n],this.tiles[0]]=[this.tiles[0],this.tiles[n]],this.updateIndicesAfterSwap(0,n);const h=this.tiles.shift();return this.decrementIndicesAfterShift(),h}count(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);return s?s.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new f;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,s=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((e=void 0)||(e=Promise))((function(n,h){function l(t){try{r(s.next(t))}catch(t){h(t)}}function a(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(l,a)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const e=this.tiles[t],s=this.tiles[i],n=this.getTileKey(e.getFamily(),e.getValue()),h=this.getTileKey(s.getFamily(),s.getValue()),l=this.tileIndexMap.get(n)||[],a=this.tileIndexMap.get(h)||[],r=l.indexOf(i),o=a.indexOf(t);-1!==r&&(l[r]=t),-1!==o&&(a[o]=i),this.tileIndexMap.set(n,l),this.tileIndexMap.set(h,a)}decrementIndicesAfterShift(){var t;for(const[i,e]of this.tileIndexMap.entries())this.tileIndexMap.set(i,e.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;t=i.x&&e<=i.x+i.width&&s>=i.y&&s<=i.y+i.height){this.selectedTile=t;break}}n!==this.selectedTile&&(this.isDirty=!0)}handleMouseDown(){void 0!==this.selectedTile&&(this.edeck.push(this.ehand.eject(this.selectedTile)),this.edeck.shuffle(),this.ehand.sort(),this.ehand.push(this.edeck.pop()),this.isDirty=!0)}initialize(){return t=this,i=void 0,s=function*(){yield Promise.all([this.deck.preload(),this.edeck.preload()]);for(let t=0;t<4;t++){const t=this.deck.getRandomHand();t.sort(),this.hands.push(t)}this.ehand=this.edeck.getRandomHand(),this.ehand.push(this.edeck.pop()),this.ehand.sort(),this.drawCanvas(),this.startAnimationLoop()},new((e=void 0)||(e=Promise))((function(n,h){function l(t){try{r(s.next(t))}catch(t){h(t)}}function a(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(l,a)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}drawCanvas(){if(!this.isDirty)return;const t=this.offScreenCtx;t.clearRect(0,0,this.offScreenCanvas.width,this.offScreenCanvas.height),t.fillStyle="#007730",t.fillRect(50,50,1e3,1e3),t.fillStyle="#DFDFFF",t.font="50px serif",t.fillText("Exemples de main:",65,100);for(let i=0;i{const s=e-t;s>=this.INTERVAL&&(t=e-s%this.INTERVAL,this.drawCanvas()),this.animationFrameId=requestAnimationFrame(i)};this.animationFrameId=requestAnimationFrame(i)}cleanup(){null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.deck.cleanup(),this.hands.forEach((t=>t.cleanup())),this.hands=[],this.edeck.cleanup(),this.ehand.cleanup(),this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.offScreenCtx.clearRect(0,0,this.offScreenCanvas.width,this.offScreenCanvas.height),this.selectedTile=void 0,this.isDirty=!0}};g.initialize().catch((t=>{console.error("Erreur lors de l'initialisation:",t)})),window.cleanup=()=>{g.cleanup()}})(); \ No newline at end of file diff --git a/build/dp3.js b/build/dp3.js deleted file mode 100644 index d74e3a0..0000000 --- a/build/dp3.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,s){this.family=t,this.value=i,this.red=s,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,e=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((s=void 0)||(s=Promise))((function(h,n){function a(t){try{r(e.next(t))}catch(t){n(t)}}function l(t){try{r(e.throw(t))}catch(t){n(t)}}function r(t){var i;t.done?h(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}loadImg(t,i){return new Promise(((s,e)=>{t.onload=()=>s(),t.onerror=()=>e(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,s){this.tiles=t,this.stolenFrom=i,this.belongsTo=s}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,s,e,h,n,a){t.save(),t.translate(525,525),t.rotate(n),t.translate(-525,-525);const l=75*h,r=90*h,o=25*h/2,c=(this.belongsTo-this.stolenFrom-1+4)%4,d=void 0===a?-1:a.getFamily(),u=void 0===a?0:a.getValue(),m=(i,s,e,n)=>{i.drawTile(t,s,e,h,!1,n,i.isEqual(d,u))},f=Math.PI/2;switch(c){case 0:m(this.tiles[0],i,s+o,f),m(this.tiles[1],i+r,s,0),m(this.tiles[2],i+r+l+e*h,s,0);break;case 1:m(this.tiles[0],i,s,0),m(this.tiles[1],i+r,s+o,-f),m(this.tiles[2],i+r+l+3*e*h,s,0);break;case 2:m(this.tiles[0],i,s,0),m(this.tiles[1],i+l+e*h,s,0),m(this.tiles[2],i+r+l+e*h,s+o,-f);break;default:console.error(`Position non prise en charge: ${c}`)}t.restore()}}const s="m",e=1,h="p",n=2,a="s",l=3,r="w",o=4,c="d",d=5;class u{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const s=this.findTileIndex(t,i);if(-1!==s){[this.tiles[s],this.tiles[0]]=[this.tiles[0],this.tiles[s]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((s=>s.getFamily()===t&&s.getValue()===i))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),s=i.getFamily(),e=i.getValue();if(this.count(s,e)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(s,e)>=2){const s=this.tryFormTriplet(i,t);if(s)return s}if(s<=3){const h=this.count(s,e-1)>0,n=this.count(s,e-2)>0;if(h&&n){const s=this.tryFormSequence(i,t);if(s)return s}}this.tiles.push(i),this.sort()}tryFormPair(t){const s=this.find(t.getFamily(),t.getValue()),e=this.findGroups(!0);if(this.tiles.push(s),this.sort(),void 0!==e)return this.tiles.push(t),this.sort(),e.push(new i([t,s],0,0)),e}tryFormTriplet(t,s){const e=this.find(t.getFamily(),t.getValue()),h=this.find(t.getFamily(),t.getValue()),n=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(h),this.sort(),void 0!==n)return n.push(new i([t,e,h],0,0)),this.tiles.push(t),this.sort(),n}tryFormSequence(t,s){const e=this.find(t.getFamily(),t.getValue()-1),h=this.find(t.getFamily(),t.getValue()-2),n=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(h),this.sort(),void 0!==n)return n.push(new i([h,e,t],0,0)),this.tiles.push(t),this.sort(),n}}class m{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;is.getFamily()===t&&s.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}toGroup(t=!1){return new u(this.tiles).findGroups(t)}drawHand(t,i,s,e,h,n=void 0,a=!1,l=0){const r=(75+e)*h,o=Math.cos(l)*r,c=Math.sin(l)*r;for(let e=0;et.preloadImg())))},new((s=void 0)||(s=Promise))((function(h,n){function a(t){try{r(e.next(t))}catch(t){n(t)}}function l(t){try{r(e.throw(t))}catch(t){n(t)}}function r(t){var i;t.done?h(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class f{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,s,e,h=0,n=0){let a=i,l=s;const r=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const s of r){for(let i=s.start;i<=s.end;i++){const n=this.find(s.family,i);n&&(n.drawTile(t,a,l,e,!1,0,!1),a+=(75+h)*e)}a=i,l+=(100+n)*e}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(i);return s&&s.length>0&&(s.pop(),0===s.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,s)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const s=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(s)||[];e.push(i),this.tileIndexMap.set(s,e)}find(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);if(!e||0===e.length)return;const h=e[0];if(h>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[h],this.tiles[0]]=[this.tiles[0],this.tiles[h]],this.updateIndicesAfterSwap(0,h);const n=this.tiles.shift();return this.decrementIndicesAfterShift(),n}count(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);return e?e.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new m;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,e=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((s=void 0)||(s=Promise))((function(h,n){function a(t){try{r(e.next(t))}catch(t){n(t)}}function l(t){try{r(e.throw(t))}catch(t){n(t)}}function r(t){var i;t.done?h(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const s=this.tiles[t],e=this.tiles[i],h=this.getTileKey(s.getFamily(),s.getValue()),n=this.getTileKey(e.getFamily(),e.getValue()),a=this.tileIndexMap.get(h)||[],l=this.tileIndexMap.get(n)||[],r=a.indexOf(i),o=l.indexOf(t);-1!==r&&(a[r]=t),-1!==o&&(l[o]=i),this.tileIndexMap.set(h,a),this.tileIndexMap.set(n,l)}decrementIndicesAfterShift(){var t;for(const[i,s]of this.tileIndexMap.entries())this.tileIndexMap.set(i,s.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;t{this.animationFrameId=requestAnimationFrame(t);const s=i-this.lastFrameTime;s{this.canvas.removeEventListener("mousemove",t),this.canvas.removeEventListener("mousedown",i)}))}handleMouseMove(t){const i=this.canvas.getBoundingClientRect(),s=t.clientX-i.left,e=t.clientY-i.top,h=this.selectedTile;this.selectedTile=void 0;for(let t=0;t=i.x&&s<=i.x+i.width&&e>=i.y&&e<=i.y+i.height){this.selectedTile=t;break}}h!==this.selectedTile&&(this.isDirty=!0)}handleMouseDown(){void 0!==this.selectedTile&&(this.decks[0].push(this.hands[8].eject(this.selectedTile)),this.decks[0].shuffle(),this.hands[8].sort(),this.hands[8].push(this.decks[0].pop()),this.isDirty=!0)}preloadDeck(t){return g(this,void 0,void 0,(function*(){yield t.preload()}))}preloadHand(t){return g(this,void 0,void 0,(function*(){yield t.preload()}))}initialize(){return g(this,void 0,void 0,(function*(){try{this.decks.push(new f(!1)),this.hands.push(new m("s1s2s3"),new m("m2m3m4"),new m("p5p5p5"),new m("w2w2w2"),new m("d3d3d3"),new m("s4p5m6"),new m("m9s9p9"),new m("d1d2d3"),this.decks[0].getRandomHand()),yield Promise.all([...this.decks.map((t=>this.preloadDeck(t))),...this.hands.map((t=>this.preloadHand(t)))]),this.hands[8].push(this.decks[0].pop()),this.hands[8].sort(),this.initEventListeners(),this.isDirty=!0,this.drawFrame(),this.startAnimationLoop()}catch(t){console.error("Erreur d'initialisation:",t)}}))}cleanup(){null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanupCallbacks.forEach((t=>t())),this.cleanupCallbacks=[],this.decks.forEach((t=>t.cleanup())),this.hands.forEach((t=>t.cleanup())),this.decks=[],this.hands=[],this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.staticCtx.clearRect(0,0,this.staticCanvas.width,this.staticCanvas.height)}}let v=null;function w(){v&&(v.cleanup(),v=null)}"undefined"!=typeof window&&function(){return g(this,void 0,void 0,(function*(){try{v=new E(p),yield v.initialize(),window.cleanup=w}catch(t){console.error("Erreur lors de l'initialisation:",t)}}))}().catch(console.error)})(); \ No newline at end of file diff --git a/build/dp4.js b/build/dp4.js deleted file mode 100644 index 3d786fa..0000000 --- a/build/dp4.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,s){this.family=t,this.value=i,this.red=s,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,e=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}loadImg(t,i){return new Promise(((s,e)=>{t.onload=()=>s(),t.onerror=()=>e(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,s){this.tiles=t,this.stolenFrom=i,this.belongsTo=s}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,s,e,n,h,a){t.save(),t.translate(525,525),t.rotate(h),t.translate(-525,-525);const l=75*n,r=90*n,o=25*n/2,c=(this.belongsTo-this.stolenFrom-1+4)%4,d=void 0===a?-1:a.getFamily(),u=void 0===a?0:a.getValue(),f=(i,s,e,h)=>{i.drawTile(t,s,e,n,!1,h,i.isEqual(d,u))},g=Math.PI/2;switch(c){case 0:f(this.tiles[0],i,s+o,g),f(this.tiles[1],i+r,s,0),f(this.tiles[2],i+r+l+e*n,s,0);break;case 1:f(this.tiles[0],i,s,0),f(this.tiles[1],i+r,s+o,-g),f(this.tiles[2],i+r+l+3*e*n,s,0);break;case 2:f(this.tiles[0],i,s,0),f(this.tiles[1],i+l+e*n,s,0),f(this.tiles[2],i+r+l+e*n,s+o,-g);break;default:console.error(`Position non prise en charge: ${c}`)}t.restore()}}const s="m",e=1,n="p",h=2,a="s",l=3,r="w",o=4,c="d",d=5;class u{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const s=this.findTileIndex(t,i);if(-1!==s){[this.tiles[s],this.tiles[0]]=[this.tiles[0],this.tiles[s]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((s=>s.getFamily()===t&&s.getValue()===i))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),s=i.getFamily(),e=i.getValue();if(this.count(s,e)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(s,e)>=2){const s=this.tryFormTriplet(i,t);if(s)return s}if(s<=3){const n=this.count(s,e-1)>0,h=this.count(s,e-2)>0;if(n&&h){const s=this.tryFormSequence(i,t);if(s)return s}}this.tiles.push(i),this.sort()}tryFormPair(t){const s=this.find(t.getFamily(),t.getValue()),e=this.findGroups(!0);if(this.tiles.push(s),this.sort(),void 0!==e)return this.tiles.push(t),this.sort(),e.push(new i([t,s],0,0)),e}tryFormTriplet(t,s){const e=this.find(t.getFamily(),t.getValue()),n=this.find(t.getFamily(),t.getValue()),h=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([t,e,n],0,0)),this.tiles.push(t),this.sort(),h}tryFormSequence(t,s){const e=this.find(t.getFamily(),t.getValue()-1),n=this.find(t.getFamily(),t.getValue()-2),h=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([n,e,t],0,0)),this.tiles.push(t),this.sort(),h}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;is.getFamily()===t&&s.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}toGroup(t=!1){return new u(this.tiles).findGroups(t)}drawHand(t,i,s,e,n,h=void 0,a=!1,l=0){const r=(75+e)*n,o=Math.cos(l)*r,c=Math.sin(l)*r;for(let e=0;et.preloadImg())))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class g{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,s,e,n=0,h=0){let a=i,l=s;const r=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const s of r){for(let i=s.start;i<=s.end;i++){const h=this.find(s.family,i);h&&(h.drawTile(t,a,l,e,!1,0,!1),a+=(75+n)*e)}a=i,l+=(100+h)*e}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(i);return s&&s.length>0&&(s.pop(),0===s.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,s)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const s=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(s)||[];e.push(i),this.tileIndexMap.set(s,e)}find(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);if(!e||0===e.length)return;const n=e[0];if(n>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[n],this.tiles[0]]=[this.tiles[0],this.tiles[n]],this.updateIndicesAfterSwap(0,n);const h=this.tiles.shift();return this.decrementIndicesAfterShift(),h}count(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);return e?e.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new f;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,e=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const s=this.tiles[t],e=this.tiles[i],n=this.getTileKey(s.getFamily(),s.getValue()),h=this.getTileKey(e.getFamily(),e.getValue()),a=this.tileIndexMap.get(n)||[],l=this.tileIndexMap.get(h)||[],r=a.indexOf(i),o=l.indexOf(t);-1!==r&&(a[r]=t),-1!==o&&(l[o]=i),this.tileIndexMap.set(n,a),this.tileIndexMap.set(h,l)}decrementIndicesAfterShift(){var t;for(const[i,s]of this.tileIndexMap.entries())this.tileIndexMap.set(i,s.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;tt)).map((([,t])=>t));return h.length>0&&h.push(p.action),h}(s,e,n,h,a);if(0===l.length)return-1;const r=960-l.length*m;if(!(838=0&&o10?l[o]:-1}(t.x-i.x,t.y-i.y,this.canDoAChii().length>0,this.canDoAPon(),!1,!1,!1);this.canCall&&-1!==s?this.handleCallAction(s):0===this.turn&&void 0!==this.selectedTile&&this.handlePlayerDiscard()}handleChiiSelection(t,i){const s=this.getChii(0),e=function(t,i,s){if(0===s.length)return-1;const e=960-(s.length+1)*m;if(!(838=0&&n10?n===s.length?0:s[n][0].getValue():-1}(t.x-i.x,t.y-i.y,s);0===e?this.chooseChii=!1:(this.chooseChii=!1,this.chii(e,0))}handleCallAction(t){if(0===t)this.canCall=!1,this.advanceTurn();else if(1===t){const t=this.canDoAChii();1===t.length?this.chii(t[0],0):(this.chooseChii=!0,this.drawGame())}else 2===t&&this.pon(this.turn)}handlePlayerDiscard(){if(this.discard(0,this.selectedTile),!this.checkPon()){const t=this.canDoAChii(1);if(t.length>0){const i=Math.floor(Math.random()*t.length);this.chii(t[i],1)}else this.advanceTurn()}}advanceTurn(){this.updateWaitingTime(),this.turn=(this.turn+1)%4,this.pick(this.turn),this.hasPicked=!0,this.hasPlayed=!1}getSelected(t){this.cv.getBoundingClientRect();const i=M.HAND_SIZE,s=t.x-140.625,e=t.y,n=Math.floor(s/(83.9*i));s-83.9*n*i<=80.9*i&&n>=0&&n=900&&e<=900+100*i?this.selectedTile=n:this.selectedTile=void 0}updateWaitingTime(){this.waitingTime=Math.floor(Math.random()*(k-S)+S)}play(){0===this.turn||this.end||(this.hasPicked?this.hasPlayed?this.canCall||this.advanceBotTurn():this.handleBotTurn():(this.lastPlayed=Date.now(),this.pick(this.turn),this.hasPicked=!0))}handleBotTurn(){if(this.hasWin(this.turn))return this.end=!0,void(this.result=2);if(Date.now()-this.lastPlayed>this.waitingTime){this.lastPlayed=Date.now();const t=Math.floor(this.hands[this.turn].length()*Math.random());if(this.discard(this.turn,t),this.hasPlayed=!0,this.deck.length()<=0)return this.result=0,void(this.end=!0);this.end||(this.checkPon(),this.checkForChii(),this.canCall=this.canDoAChii().length>0||this.canDoAPon())}}checkForChii(){if(3===this.turn)return;const t=this.turn+1,i=this.canDoAChii(t);if(i.length>0){const s=Math.floor(Math.random()*i.length);this.chii(i[s],t)}}advanceBotTurn(){3===this.turn?(this.turn=0,this.pick(0),this.hasWin(0)&&(this.end=!0,this.result=1)):this.turn++,this.updateWaitingTime(),this.hasPicked=!1,this.hasPlayed=!1}pick(t){this.hands[t].push(this.deck.pop()),this.hands[t].isolate=!0}discard(t,i){const s=this.hands[t].eject(i);this.hands[t].sort(),s.setTilt(),this.discards[t].push(s),this.hands[t].isolate=!1,this.hands[t].sort(),this.lastDiscard=t,this.lastPlayed=Date.now()}canDoAChii(t=0){const i=[];if(void 0===this.lastDiscard||(this.lastDiscard+1)%4!==t||(this.turn+1)%4!==t||this.discards[this.lastDiscard][this.discards[this.lastDiscard].length-1].getFamily()>=4)return i;const s=this.discards[this.lastDiscard][this.discards[this.lastDiscard].length-1],e=this.hands[t],n=s.getFamily(),h=s.getValue();return e.count(n,h-2)>0&&e.count(n,h-1)>0&&i.push(h-2),e.count(n,h-1)>0&&e.count(n,h+1)>0&&i.push(h-1),e.count(n,h+1)>0&&e.count(n,h+2)>0&&i.push(h),i}chii(t,s){const e=0===s?3:s-1,n=this.discards[e].pop();this.lastDiscard=void 0;const h=[];let a=0,l=t;for(;a<2;)l===n.getValue()||(h[a]=this.hands[s].find(n.getFamily(),l),a++),l++;[n,h[0],h[1]].forEach((t=>t.setTilt())),this.groups[s].push(new i([n,h[0],h[1]],e,s)),this.hasWin(s)&&(this.end=!0,this.result=0===s?1:2),this.updateWaitingTime(),this.turn=s,this.hasPicked=!0,this.hasPlayed=!1}getChii(t){const i=[],s=this.canDoAChii(),e=0===t?3:t-1,n=this.discards[e],h=n[n.length-1];for(let e=0;e=2}pon(t,s=0){const e=this.discards[t].pop();this.lastDiscard=void 0;const n=this.hands[s].find(e.getFamily(),e.getValue()),h=this.hands[s].find(e.getFamily(),e.getValue());[e,n,h].forEach((t=>t.setTilt())),this.groups[s].push(new i([e,n,h],t,s)),this.hasWin(s)&&(this.end=!0,this.result=0===s?1:2),this.updateWaitingTime(),this.turn=s,this.hasPicked=!0,this.hasPlayed=!1}hasWin(t){return void 0!==this.hands[t].toGroup()}drawGame(){this.play(),function(t,i=0,s=0){let e=525,n=Math.PI,h=630;t.save(),t.translate(525,525),t.rotate([0,-n/2,n,n/2][i]),t.translate(-525,-525),t.fillStyle="#ffcc33",t.beginPath(),t.moveTo(e,h),t.lineTo(452,h),t.quadraticCurveTo(450,h,450,632),t.lineTo(450,632),t.quadraticCurveTo(450,634,452,634),t.lineTo(598,634),t.quadraticCurveTo(600,634,600,632),t.lineTo(600,632),t.quadraticCurveTo(600,h,598,h),t.lineTo(e,h),t.fill(),t.stroke(),t.restore(),t.save(),t.translate(525,525),t.rotate(s),t.translate(-525,-525),t.fillStyle="#e0e0f0",t.beginPath(),t.moveTo(425,e),t.lineTo(425,595),t.quadraticCurveTo(425,625,455,625),t.lineTo(595,625),t.quadraticCurveTo(625,625,625,595),t.lineTo(625,455),t.quadraticCurveTo(625,425,595,425),t.lineTo(455,425),t.quadraticCurveTo(425,425,425,455),t.lineTo(425,e),t.fill(),t.stroke(),t.fillStyle="#000000",t.font="40px garamond",t.fillText("Est",505,615),t.save(),t.translate(525,525),t.rotate(-1.570796),t.translate(-525,-525),t.fillText("Sud",500,615),t.restore(),t.save(),t.translate(525,525),t.rotate(3.141592),t.translate(-525,-525),t.fillText("Ouest",480,615),t.restore(),t.save(),t.translate(525,525),t.rotate(1.570796),t.translate(-525,-525),t.fillText("Nord",485,615),t.restore(),t.restore()}(this.staticCtx,this.turn,A/2*this.windPlayer),this.drawDiscardSize(),this.drawResult(),this.drawHands(),this.drawGroups(M.GROUP_SIZE);for(let t=0;t<4;t++)this.drawDiscard(t,void 0!==this.selectedTile?this.hands[0].get(this.selectedTile):void 0);this.chooseChii?function(t,i){const s=[...i].reverse();F(t,850,835,w);let e=1;for(const i of s)I(t,850-e*m,835,i),e++}(this.staticCtx,this.getChii(0)):function(t,i,s){const e=[[i,(t,i,s)=>F(t,i,s,v)],[s,(t,i,s)=>F(t,i,s,y)],[!1,(t,i,s)=>F(t,i,s,C)],[!1,(t,i,s)=>F(t,i,s,x)],[!1,(t,i,s)=>F(t,i,s,T)]];if(!e.some((([t])=>t)))return;e.unshift([!0,(t,i,s)=>F(t,i,s,p)]);let n=0;for(const[i,s]of e)i&&(s(t,850-n*m,835),n++)}(this.staticCtx,this.canDoAChii().length>0,this.canDoAPon())}drawHands(){const{HAND_SIZE:t,HIDDEN_HAND_SIZE:i}=M;this.hands[0].drawHand(this.staticCtx,140.625,1e3-150*t,5*t,.75,this.selectedTile,!1,0),this.hands[1].drawHand(this.staticCtx,1e3-150*i,1e3-375*i,5*i,i,void 0,!0,-A/2),this.hands[2].drawHand(this.staticCtx,1e3-375*i,150*i,5*i,i,void 0,!0,-A),this.hands[3].drawHand(this.staticCtx,150*i,375*i,5*i,i,void 0,!0,A/2)}drawGroups(t){for(let i=0;i<4;i++){const s=this.rotations[i],e=this.groups[i];if(e.length>0)for(let i=e.length-1;i>=0;i--)e[i].drawGroup(this.staticCtx,810-285*t*i,988,5,.6,s,void 0!==this.selectedTile?this.hands[0].get(this.selectedTile):void 0)}}drawDiscard(t,i){const s=M.DISCARD_SIZE;this.staticCtx.save(),this.staticCtx.translate(525,525),this.staticCtx.rotate(this.rotations[t]);const e=475*-s/2,n=242.5*s;for(let h=0;ht.preload())))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}}var V=function(t,i,s,e){return new(s||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}))};class G{constructor(){this.CANVAS_ID="myCanvas",this.BG_RECT={x:0,y:0,w:1050,h:1050},this.FPS=60,this.FRAME_INTERVAL=1e3/this.FPS,this.mouse={x:0,y:0},this.game=null,this.decks=[],this.hands=[],this.animationFrameId=null,this.lastFrameTime=0,this.isInitialized=!1,this.cleanupCallbacks=[];const t=document.getElementById(this.CANVAS_ID);if(!t)throw new Error(`Canvas avec ID '${this.CANVAS_ID}' introuvable`);this.canvas=t,this.canvas.width=this.BG_RECT.w,this.canvas.height=this.BG_RECT.h;const i=t.getContext("2d",{alpha:!1});if(!i)throw new Error("Impossible d'obtenir le contexte 2D du canvas");this.ctx=i,this.staticCanvas=document.createElement("canvas"),this.staticCanvas.width=t.width,this.staticCanvas.height=t.height;const s=this.staticCanvas.getContext("2d",{alpha:!1});if(!s)throw new Error("Impossible d'obtenir le contexte du canvas statique");this.staticCtx=s}static getInstance(){return G.instance||(G.instance=new G),G.instance}drawFrame(){this.game&&this.game.draw(this.mouse)}startAnimationLoop(){const t=i=>{this.animationFrameId=requestAnimationFrame(t);const s=i-this.lastFrameTime;s{const i=this.canvas.getBoundingClientRect();this.mouse.x=t.clientX-i.left,this.mouse.y=t.clientY-i.top},i=t=>{this.game&&this.game.click(t)};this.canvas.addEventListener("mousemove",t),this.canvas.addEventListener("mousedown",i),this.cleanupCallbacks.push((()=>{this.canvas.removeEventListener("mousemove",t),this.canvas.removeEventListener("mousedown",i)}))}preloadDeck(t){return V(this,void 0,void 0,(function*(){yield t.preload()}))}preloadHand(t){return V(this,void 0,void 0,(function*(){yield t.preload()}))}initialize(){return V(this,void 0,void 0,(function*(){if(!this.isInitialized)try{console.log("Chargement en cours..."),this.game=new R(this.ctx,this.canvas,this.staticCtx,this.staticCanvas),yield Promise.all([...this.decks.map((t=>this.preloadDeck(t))),...this.hands.map((t=>this.preloadHand(t))),this.game.preload()]),console.log("Chargement terminé"),this.initEventListeners(),this.startAnimationLoop(),this.isInitialized=!0,window.cleanup=this.cleanup.bind(this)}catch(t){console.error("Erreur lors de l'initialisation:",t)}}))}cleanup(){var t,i;null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanupCallbacks.forEach((t=>t())),this.cleanupCallbacks=[],this.game&&(null===(i=(t=this.game).cleanup)||void 0===i||i.call(t),this.game=null),this.decks.forEach((t=>t.cleanup())),this.hands.forEach((t=>t.cleanup())),this.decks=[],this.hands=[],this.isInitialized=!1,this.lastFrameTime=0,this.mouse={x:0,y:0},this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.staticCtx.clearRect(0,0,this.staticCanvas.width,this.staticCanvas.height)}}"undefined"!=typeof window&&function(){const t=document.createElement("button");t.id="playButton",t.textContent="Jouer",t.style.position="absolute",t.style.left="525px",t.style.top="525px",t.style.transform="translate(-50%, -50%)",t.style.fontSize="2rem",t.style.padding="1em 2em",t.style.zIndex="1000",document.body.appendChild(t),t.addEventListener("click",(()=>V(this,void 0,void 0,(function*(){t.disabled=!0,t.textContent="Chargement...",yield function(){return V(this,void 0,void 0,(function*(){yield G.getInstance().initialize()}))}(),t.remove()}))))}()})(); \ No newline at end of file diff --git a/build/dp5.js b/build/dp5.js deleted file mode 100644 index 00f64dd..0000000 --- a/build/dp5.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const n=document.getElementById("myCanvas"),t=n.getContext("2d");n.width=1050,n.height=1050;const e=document.createElement("canvas");e.getContext("2d"),e.width=n.width,e.height=n.height,"undefined"!=typeof window&&function(){return n=this,e=void 0,i=function*(){t?console.log("Load begining\n"):console.error("Context canvas indisponible")},new((o=void 0)||(o=Promise))((function(t,c){function a(n){try{r(i.next(n))}catch(n){c(n)}}function d(n){try{r(i.throw(n))}catch(n){c(n)}}function r(n){var e;n.done?t(n.value):(e=n.value,e instanceof o?e:new o((function(n){n(e)}))).then(a,d)}r((i=i.apply(n,e||[])).next())}));var n,e,o,i}().catch(console.error)})(); \ No newline at end of file diff --git a/build/dp6.js b/build/dp6.js deleted file mode 100644 index beb5922..0000000 --- a/build/dp6.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,s){this.family=t,this.value=i,this.red=s,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,e=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}loadImg(t,i){return new Promise(((s,e)=>{t.onload=()=>s(),t.onerror=()=>e(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,s){this.tiles=t,this.stolenFrom=i,this.belongsTo=s}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,s,e,n,h,a){t.save(),t.translate(525,525),t.rotate(h),t.translate(-525,-525);const l=75*n,r=90*n,o=25*n/2,c=(this.belongsTo-this.stolenFrom-1+4)%4,d=void 0===a?-1:a.getFamily(),u=void 0===a?0:a.getValue(),f=(i,s,e,h)=>{i.drawTile(t,s,e,n,!1,h,i.isEqual(d,u))},g=Math.PI/2;switch(c){case 0:f(this.tiles[0],i,s+o,g),f(this.tiles[1],i+r,s,0),f(this.tiles[2],i+r+l+e*n,s,0);break;case 1:f(this.tiles[0],i,s,0),f(this.tiles[1],i+r,s+o,-g),f(this.tiles[2],i+r+l+3*e*n,s,0);break;case 2:f(this.tiles[0],i,s,0),f(this.tiles[1],i+l+e*n,s,0),f(this.tiles[2],i+r+l+e*n,s+o,-g);break;default:console.error(`Position non prise en charge: ${c}`)}t.restore()}}const s="m",e=1,n="p",h=2,a="s",l=3,r="w",o=4,c="d",d=5;class u{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const s=this.findTileIndex(t,i);if(-1!==s){[this.tiles[s],this.tiles[0]]=[this.tiles[0],this.tiles[s]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((s=>s.getFamily()===t&&s.getValue()===i))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),s=i.getFamily(),e=i.getValue();if(this.count(s,e)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(s,e)>=2){const s=this.tryFormTriplet(i,t);if(s)return s}if(s<=3){const n=this.count(s,e-1)>0,h=this.count(s,e-2)>0;if(n&&h){const s=this.tryFormSequence(i,t);if(s)return s}}this.tiles.push(i),this.sort()}tryFormPair(t){const s=this.find(t.getFamily(),t.getValue()),e=this.findGroups(!0);if(this.tiles.push(s),this.sort(),void 0!==e)return this.tiles.push(t),this.sort(),e.push(new i([t,s],0,0)),e}tryFormTriplet(t,s){const e=this.find(t.getFamily(),t.getValue()),n=this.find(t.getFamily(),t.getValue()),h=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([t,e,n],0,0)),this.tiles.push(t),this.sort(),h}tryFormSequence(t,s){const e=this.find(t.getFamily(),t.getValue()-1),n=this.find(t.getFamily(),t.getValue()-2),h=this.findGroups(s);if(this.tiles.push(e),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([n,e,t],0,0)),this.tiles.push(t),this.sort(),h}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;is.getFamily()===t&&s.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}toGroup(t=!1){return new u(this.tiles).findGroups(t)}drawHand(t,i,s,e,n,h=void 0,a=!1,l=0){const r=(75+e)*n,o=Math.cos(l)*r,c=Math.sin(l)*r;for(let e=0;et.preloadImg())))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class g{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,s,e,n=0,h=0){let a=i,l=s;const r=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const s of r){for(let i=s.start;i<=s.end;i++){const h=this.find(s.family,i);h&&(h.drawTile(t,a,l,e,!1,0,!1),a+=(75+n)*e)}a=i,l+=(100+h)*e}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(i);return s&&s.length>0&&(s.pop(),0===s.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,s)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const s=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(s)||[];e.push(i),this.tileIndexMap.set(s,e)}find(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);if(!e||0===e.length)return;const n=e[0];if(n>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[n],this.tiles[0]]=[this.tiles[0],this.tiles[n]],this.updateIndicesAfterSwap(0,n);const h=this.tiles.shift();return this.decrementIndicesAfterShift(),h}count(t,i){const s=this.getTileKey(t,i),e=this.tileIndexMap.get(s);return e?e.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new f;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,e=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const s=this.tiles[t],e=this.tiles[i],n=this.getTileKey(s.getFamily(),s.getValue()),h=this.getTileKey(e.getFamily(),e.getValue()),a=this.tileIndexMap.get(n)||[],l=this.tileIndexMap.get(h)||[],r=a.indexOf(i),o=l.indexOf(t);-1!==r&&(a[r]=t),-1!==o&&(l[o]=i),this.tileIndexMap.set(n,a),this.tileIndexMap.set(h,l)}decrementIndicesAfterShift(){var t;for(const[i,s]of this.tileIndexMap.entries())this.tileIndexMap.set(i,s.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;tt)).map((([,t])=>t));return h.length>0&&h.push(p.action),h}(s,e,n,h,a);if(0===l.length)return-1;const r=960-l.length*m;if(!(838=0&&o10?l[o]:-1}(t.x-i.x,t.y-i.y,this.canDoAChii().length>0,this.canDoAPon(),!1,!1,!1);this.canCall&&-1!==s?this.handleCallAction(s):0===this.turn&&void 0!==this.selectedTile&&this.handlePlayerDiscard()}handleChiiSelection(t,i){const s=this.getChii(0),e=function(t,i,s){if(0===s.length)return-1;const e=960-(s.length+1)*m;if(!(838=0&&n10?n===s.length?0:s[n][0].getValue():-1}(t.x-i.x,t.y-i.y,s);0===e?this.chooseChii=!1:(this.chooseChii=!1,this.chii(e,0))}handleCallAction(t){if(0===t)this.canCall=!1,this.advanceTurn();else if(1===t){const t=this.canDoAChii();1===t.length?this.chii(t[0],0):(this.chooseChii=!0,this.drawGame())}else 2===t&&this.pon(this.turn)}handlePlayerDiscard(){if(this.discard(0,this.selectedTile),!this.checkPon()){const t=this.canDoAChii(1);if(t.length>0){const i=Math.floor(Math.random()*t.length);this.chii(t[i],1)}else this.advanceTurn()}}advanceTurn(){this.updateWaitingTime(),this.turn=(this.turn+1)%4,this.pick(this.turn),this.hasPicked=!0,this.hasPlayed=!1}getSelected(t){this.cv.getBoundingClientRect();const i=M.HAND_SIZE,s=t.x-140.625,e=t.y,n=Math.floor(s/(83.9*i));s-83.9*n*i<=80.9*i&&n>=0&&n=900&&e<=900+100*i?this.selectedTile=n:this.selectedTile=void 0}updateWaitingTime(){this.waitingTime=Math.floor(Math.random()*(k-S)+S)}play(){0===this.turn||this.end||(this.hasPicked?this.hasPlayed?this.canCall||this.advanceBotTurn():this.handleBotTurn():(this.lastPlayed=Date.now(),this.pick(this.turn),this.hasPicked=!0))}handleBotTurn(){if(this.hasWin(this.turn))return this.end=!0,void(this.result=2);if(Date.now()-this.lastPlayed>this.waitingTime){this.lastPlayed=Date.now();const t=Math.floor(this.hands[this.turn].length()*Math.random());if(this.discard(this.turn,t),this.hasPlayed=!0,this.deck.length()<=0)return this.result=0,void(this.end=!0);this.end||(this.checkPon(),this.checkForChii(),this.canCall=this.canDoAChii().length>0||this.canDoAPon())}}checkForChii(){if(3===this.turn)return;const t=this.turn+1,i=this.canDoAChii(t);if(i.length>0){const s=Math.floor(Math.random()*i.length);this.chii(i[s],t)}}advanceBotTurn(){3===this.turn?(this.turn=0,this.pick(0),this.hasWin(0)&&(this.end=!0,this.result=1)):this.turn++,this.updateWaitingTime(),this.hasPicked=!1,this.hasPlayed=!1}pick(t){this.hands[t].push(this.deck.pop()),this.hands[t].isolate=!0}discard(t,i){const s=this.hands[t].eject(i);this.hands[t].sort(),s.setTilt(),this.discards[t].push(s),this.hands[t].isolate=!1,this.hands[t].sort(),this.lastDiscard=t,this.lastPlayed=Date.now()}canDoAChii(t=0){const i=[];if(void 0===this.lastDiscard||(this.lastDiscard+1)%4!==t||(this.turn+1)%4!==t||this.discards[this.lastDiscard][this.discards[this.lastDiscard].length-1].getFamily()>=4)return i;const s=this.discards[this.lastDiscard][this.discards[this.lastDiscard].length-1],e=this.hands[t],n=s.getFamily(),h=s.getValue();return e.count(n,h-2)>0&&e.count(n,h-1)>0&&i.push(h-2),e.count(n,h-1)>0&&e.count(n,h+1)>0&&i.push(h-1),e.count(n,h+1)>0&&e.count(n,h+2)>0&&i.push(h),i}chii(t,s){const e=0===s?3:s-1,n=this.discards[e].pop();this.lastDiscard=void 0;const h=[];let a=0,l=t;for(;a<2;)l===n.getValue()||(h[a]=this.hands[s].find(n.getFamily(),l),a++),l++;[n,h[0],h[1]].forEach((t=>t.setTilt())),this.groups[s].push(new i([n,h[0],h[1]],e,s)),this.hasWin(s)&&(this.end=!0,this.result=0===s?1:2),this.updateWaitingTime(),this.turn=s,this.hasPicked=!0,this.hasPlayed=!1}getChii(t){const i=[],s=this.canDoAChii(),e=0===t?3:t-1,n=this.discards[e],h=n[n.length-1];for(let e=0;e=2}pon(t,s=0){const e=this.discards[t].pop();this.lastDiscard=void 0;const n=this.hands[s].find(e.getFamily(),e.getValue()),h=this.hands[s].find(e.getFamily(),e.getValue());[e,n,h].forEach((t=>t.setTilt())),this.groups[s].push(new i([e,n,h],t,s)),this.hasWin(s)&&(this.end=!0,this.result=0===s?1:2),this.updateWaitingTime(),this.turn=s,this.hasPicked=!0,this.hasPlayed=!1}hasWin(t){return void 0!==this.hands[t].toGroup()}drawGame(){this.play(),function(t,i=0,s=0){let e=525,n=Math.PI,h=630;t.save(),t.translate(525,525),t.rotate([0,-n/2,n,n/2][i]),t.translate(-525,-525),t.fillStyle="#ffcc33",t.beginPath(),t.moveTo(e,h),t.lineTo(452,h),t.quadraticCurveTo(450,h,450,632),t.lineTo(450,632),t.quadraticCurveTo(450,634,452,634),t.lineTo(598,634),t.quadraticCurveTo(600,634,600,632),t.lineTo(600,632),t.quadraticCurveTo(600,h,598,h),t.lineTo(e,h),t.fill(),t.stroke(),t.restore(),t.save(),t.translate(525,525),t.rotate(s),t.translate(-525,-525),t.fillStyle="#e0e0f0",t.beginPath(),t.moveTo(425,e),t.lineTo(425,595),t.quadraticCurveTo(425,625,455,625),t.lineTo(595,625),t.quadraticCurveTo(625,625,625,595),t.lineTo(625,455),t.quadraticCurveTo(625,425,595,425),t.lineTo(455,425),t.quadraticCurveTo(425,425,425,455),t.lineTo(425,e),t.fill(),t.stroke(),t.fillStyle="#000000",t.font="40px garamond",t.fillText("Est",505,615),t.save(),t.translate(525,525),t.rotate(-1.570796),t.translate(-525,-525),t.fillText("Sud",500,615),t.restore(),t.save(),t.translate(525,525),t.rotate(3.141592),t.translate(-525,-525),t.fillText("Ouest",480,615),t.restore(),t.save(),t.translate(525,525),t.rotate(1.570796),t.translate(-525,-525),t.fillText("Nord",485,615),t.restore(),t.restore()}(this.staticCtx,this.turn,A/2*this.windPlayer),this.drawDiscardSize(),this.drawResult(),this.drawHands(),this.drawGroups(M.GROUP_SIZE);for(let t=0;t<4;t++)this.drawDiscard(t,void 0!==this.selectedTile?this.hands[0].get(this.selectedTile):void 0);this.chooseChii?function(t,i){const s=[...i].reverse();F(t,850,835,w);let e=1;for(const i of s)I(t,850-e*m,835,i),e++}(this.staticCtx,this.getChii(0)):function(t,i,s){const e=[[i,(t,i,s)=>F(t,i,s,v)],[s,(t,i,s)=>F(t,i,s,y)],[!1,(t,i,s)=>F(t,i,s,C)],[!1,(t,i,s)=>F(t,i,s,x)],[!1,(t,i,s)=>F(t,i,s,T)]];if(!e.some((([t])=>t)))return;e.unshift([!0,(t,i,s)=>F(t,i,s,p)]);let n=0;for(const[i,s]of e)i&&(s(t,850-n*m,835),n++)}(this.staticCtx,this.canDoAChii().length>0,this.canDoAPon())}drawHands(){const{HAND_SIZE:t,HIDDEN_HAND_SIZE:i}=M;this.hands[0].drawHand(this.staticCtx,140.625,1e3-150*t,5*t,.75,this.selectedTile,!1,0),this.hands[1].drawHand(this.staticCtx,1e3-150*i,1e3-375*i,5*i,i,void 0,!0,-A/2),this.hands[2].drawHand(this.staticCtx,1e3-375*i,150*i,5*i,i,void 0,!0,-A),this.hands[3].drawHand(this.staticCtx,150*i,375*i,5*i,i,void 0,!0,A/2)}drawGroups(t){for(let i=0;i<4;i++){const s=this.rotations[i],e=this.groups[i];if(e.length>0)for(let i=e.length-1;i>=0;i--)e[i].drawGroup(this.staticCtx,810-285*t*i,988,5,.6,s,void 0!==this.selectedTile?this.hands[0].get(this.selectedTile):void 0)}}drawDiscard(t,i){const s=M.DISCARD_SIZE;this.staticCtx.save(),this.staticCtx.translate(525,525),this.staticCtx.rotate(this.rotations[t]);const e=475*-s/2,n=242.5*s;for(let h=0;ht.preload())))},new((s=void 0)||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}));var t,i,s,e}}var V=function(t,i,s,e){return new(s||(s=Promise))((function(n,h){function a(t){try{r(e.next(t))}catch(t){h(t)}}function l(t){try{r(e.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(a,l)}r((e=e.apply(t,i||[])).next())}))};class G{constructor(){this.CANVAS_ID="myCanvas",this.BG_RECT={x:0,y:0,w:1050,h:1050},this.FPS=60,this.FRAME_INTERVAL=1e3/this.FPS,this.mouse={x:0,y:0},this.game=null,this.decks=[],this.hands=[],this.animationFrameId=null,this.lastFrameTime=0,this.isInitialized=!1,this.cleanupCallbacks=[];const t=document.getElementById(this.CANVAS_ID);if(!t)throw new Error(`Canvas avec ID '${this.CANVAS_ID}' introuvable`);this.canvas=t,this.canvas.width=this.BG_RECT.w,this.canvas.height=this.BG_RECT.h;const i=t.getContext("2d",{alpha:!1});if(!i)throw new Error("Impossible d'obtenir le contexte 2D du canvas");this.ctx=i,this.staticCanvas=document.createElement("canvas"),this.staticCanvas.width=t.width,this.staticCanvas.height=t.height;const s=this.staticCanvas.getContext("2d",{alpha:!1});if(!s)throw new Error("Impossible d'obtenir le contexte du canvas statique");this.staticCtx=s}static getInstance(){return G.instance||(G.instance=new G),G.instance}drawFrame(){this.game&&this.game.draw(this.mouse)}startAnimationLoop(){const t=i=>{this.animationFrameId=requestAnimationFrame(t);const s=i-this.lastFrameTime;s{const i=this.canvas.getBoundingClientRect();this.mouse.x=t.clientX-i.left,this.mouse.y=t.clientY-i.top},i=t=>{this.game&&this.game.click(t)};this.canvas.addEventListener("mousemove",t),this.canvas.addEventListener("mousedown",i),this.cleanupCallbacks.push((()=>{this.canvas.removeEventListener("mousemove",t),this.canvas.removeEventListener("mousedown",i)}))}preloadDeck(t){return V(this,void 0,void 0,(function*(){yield t.preload()}))}preloadHand(t){return V(this,void 0,void 0,(function*(){yield t.preload()}))}initialize(){return V(this,void 0,void 0,(function*(){if(!this.isInitialized)try{console.log("Chargement en cours..."),this.game=new R(this.ctx,this.canvas,this.staticCtx,this.staticCanvas,!1,0,Math.floor(4*Math.random())),yield Promise.all([...this.decks.map((t=>this.preloadDeck(t))),...this.hands.map((t=>this.preloadHand(t))),this.game.preload()]),console.log("Chargement terminé"),this.initEventListeners(),this.startAnimationLoop(),this.isInitialized=!0,window.cleanup=this.cleanup.bind(this)}catch(t){console.error("Erreur lors de l'initialisation:",t)}}))}cleanup(){var t,i;null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanupCallbacks.forEach((t=>t())),this.cleanupCallbacks=[],this.game&&(null===(i=(t=this.game).cleanup)||void 0===i||i.call(t),this.game=null),this.decks.forEach((t=>t.cleanup())),this.hands.forEach((t=>t.cleanup())),this.decks=[],this.hands=[],this.isInitialized=!1,this.lastFrameTime=0,this.mouse={x:0,y:0},this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.staticCtx.clearRect(0,0,this.staticCanvas.width,this.staticCanvas.height)}}"undefined"!=typeof window&&function(){const t=document.createElement("button");t.id="playButton",t.textContent="Jouer",t.style.position="absolute",t.style.left="525px",t.style.top="525px",t.style.transform="translate(-50%, -50%)",t.style.fontSize="2rem",t.style.padding="1em 2em",t.style.zIndex="1000",document.body.appendChild(t),t.addEventListener("click",(()=>V(this,void 0,void 0,(function*(){t.disabled=!0,t.textContent="Chargement...",yield function(){return V(this,void 0,void 0,(function*(){yield G.getInstance().initialize()}))}(),t.remove()}))))}()})(); \ No newline at end of file diff --git a/build/dp7.js b/build/dp7.js deleted file mode 100644 index f6e3874..0000000 --- a/build/dp7.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class t{constructor(t,i,e){this.family=t,this.value=i,this.red=e,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((e=void 0)||(e=Promise))((function(n,h){function a(t){try{r(s.next(t))}catch(t){h(t)}}function l(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,l)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}loadImg(t,i){return new Promise(((e,s)=>{t.onload=()=>e(),t.onerror=()=>s(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}class i{constructor(t,i,e){this.tiles=t,this.stolenFrom=i,this.belongsTo=e}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,e,s,n,h,a){t.save(),t.translate(525,525),t.rotate(h),t.translate(-525,-525);const l=75*n,r=90*n,o=25*n/2,u=(this.belongsTo-this.stolenFrom-1+4)%4,d=void 0===a?-1:a.getFamily(),f=void 0===a?0:a.getValue(),c=(i,e,s,h)=>{i.drawTile(t,e,s,n,!1,h,i.isEqual(d,f))},m=Math.PI/2;switch(u){case 0:c(this.tiles[0],i,e+o,m),c(this.tiles[1],i+r,e,0),c(this.tiles[2],i+r+l+s*n,e,0);break;case 1:c(this.tiles[0],i,e,0),c(this.tiles[1],i+r,e+o,-m),c(this.tiles[2],i+r+l+3*s*n,e,0);break;case 2:c(this.tiles[0],i,e,0),c(this.tiles[1],i+l+s*n,e,0),c(this.tiles[2],i+r+l+s*n,e+o,-m);break;default:console.error(`Position non prise en charge: ${u}`)}t.restore()}}const e="m",s=1,n="p",h=2,a="s",l=3,r="w",o=4,u="d",d=5;class f{constructor(i){this.tiles=i.map((i=>new t(i.getFamily(),i.getValue(),i.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const e=this.findTileIndex(t,i);if(-1!==e){[this.tiles[e],this.tiles[0]]=[this.tiles[0],this.tiles[e]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((e=>e.getFamily()===t&&e.getValue()===i))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),e=i.getFamily(),s=i.getValue();if(this.count(e,s)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(e,s)>=2){const e=this.tryFormTriplet(i,t);if(e)return e}if(e<=3){const n=this.count(e,s-1)>0,h=this.count(e,s-2)>0;if(n&&h){const e=this.tryFormSequence(i,t);if(e)return e}}this.tiles.push(i),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),s=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==s)return this.tiles.push(t),this.sort(),s.push(new i([t,e],0,0)),s}tryFormTriplet(t,e){const s=this.find(t.getFamily(),t.getValue()),n=this.find(t.getFamily(),t.getValue()),h=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([t,s,n],0,0)),this.tiles.push(t),this.sort(),h}tryFormSequence(t,e){const s=this.find(t.getFamily(),t.getValue()-1),n=this.find(t.getFamily(),t.getValue()-2),h=this.findGroups(e);if(this.tiles.push(s),this.tiles.push(n),this.sort(),void 0!==h)return h.push(new i([n,s,t],0,0)),this.tiles.push(t),this.sort(),h}}class c{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;ie.getFamily()===t&&e.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((e=>e.getFamily()===t&&e.getValue()===i)).length}toGroup(t=!1){return new f(this.tiles).findGroups(t)}drawHand(t,i,e,s,n,h=void 0,a=!1,l=0){const r=(75+s)*n,o=Math.cos(l)*r,u=Math.sin(l)*r;for(let s=0;st.preloadImg())))},new((e=void 0)||(e=Promise))((function(n,h){function a(t){try{r(s.next(t))}catch(t){h(t)}}function l(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,l)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}class m{constructor(t=!1){this.tiles=[],this.tileIndexMap=new Map,this.initTiles(t)}displayFamilies(t,i,e,s,n=0,h=0){let a=i,l=e;const r=[{family:1,start:1,end:9},{family:2,start:1,end:9},{family:3,start:1,end:9},{family:4,start:1,end:4},{family:5,start:1,end:3}];for(const e of r){for(let i=e.start;i<=e.end;i++){const h=this.find(e.family,i);h&&(h.drawTile(t,a,l,s,!1,0,!1),a+=(75+n)*s)}a=i,l+=(100+h)*s}}length(){return this.tiles.length}pop(){if(0===this.tiles.length)throw new Error("Cannot pop from an empty deck");const t=this.tiles.pop(),i=this.getTileKey(t.getFamily(),t.getValue()),e=this.tileIndexMap.get(i);return e&&e.length>0&&(e.pop(),0===e.length?this.tileIndexMap.delete(i):this.tileIndexMap.set(i,e)),t}push(t){const i=this.tiles.length;this.tiles.push(t);const e=this.getTileKey(t.getFamily(),t.getValue()),s=this.tileIndexMap.get(e)||[];s.push(i),this.tileIndexMap.set(e,s)}find(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);if(!s||0===s.length)return;const n=s[0];if(n>=this.tiles.length)return this.rebuildIndexMap(),this.find(t,i);[this.tiles[n],this.tiles[0]]=[this.tiles[0],this.tiles[n]],this.updateIndicesAfterSwap(0,n);const h=this.tiles.shift();return this.decrementIndicesAfterShift(),h}count(t,i){const e=this.getTileKey(t,i),s=this.tileIndexMap.get(e);return s?s.length:0}shuffle(){for(let t=this.tiles.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[this.tiles[t],this.tiles[i]]=[this.tiles[i],this.tiles[t]]}this.rebuildIndexMap()}getRandomHand(){const t=new c;if(this.shuffle(),this.tiles.length<13)throw new Error("Not enough tiles in deck to create a hand");for(let i=0;i<13;i++)t.push(this.pop());return t}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[],this.tileIndexMap.clear()}preload(){return t=this,i=void 0,s=function*(){const t=this.tiles.map((t=>t.preloadImg()));yield Promise.all(t)},new((e=void 0)||(e=Promise))((function(n,h){function a(t){try{r(s.next(t))}catch(t){h(t)}}function l(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,l)}r((s=s.apply(t,i||[])).next())}));var t,i,e,s}getTileKey(t,i){return`${t}-${i}`}updateIndicesAfterSwap(t,i){if(t===i)return;const e=this.tiles[t],s=this.tiles[i],n=this.getTileKey(e.getFamily(),e.getValue()),h=this.getTileKey(s.getFamily(),s.getValue()),a=this.tileIndexMap.get(n)||[],l=this.tileIndexMap.get(h)||[],r=a.indexOf(i),o=l.indexOf(t);-1!==r&&(a[r]=t),-1!==o&&(l[o]=i),this.tileIndexMap.set(n,a),this.tileIndexMap.set(h,l)}decrementIndicesAfterShift(){var t;for(const[i,e]of this.tileIndexMap.entries())this.tileIndexMap.set(i,e.filter((t=>0!==t)).map((t=>t>0?t-1:t))),0===(null===(t=this.tileIndexMap.get(i))||void 0===t?void 0:t.length)&&this.tileIndexMap.delete(i)}rebuildIndexMap(){this.tileIndexMap.clear();for(let t=0;t1){let a=e.find(s,n),l=e.find(s,n);i.push(t),i.push(a),i.push(l),h+=3}else e.push(t),e.shuffle()}else{let t=e.pop(),s=t.getFamily(),n=t.getValue();if(s<4&&1!==n&&n<6&&e.count(s,n+1)>0&&e.count(s,n+2)>0){let a=e.find(s,n+1),l=e.find(s,n+2);i.push(t),i.push(a),i.push(l),h+=3}else e.push(t),e.shuffle()}return i.sort(),i},brelan_valeur(t=0){let i,e,s=new c,n=new m;n.shuffle(),Math.random()<1/3?(i=5,e=Math.floor(3*Math.random())+1):Math.random()<.5?(i=4,e=1):(i=4,e=t+1),s.push(n.find(i,e)),s.push(n.find(i,e)),s.push(n.find(i,e));let h=3;for(i=Math.floor(3*Math.random())+1,e=Math.floor(9*Math.random())+1;n.count(i,e)<2;)i=Math.floor(3*Math.random())+1,e=Math.floor(9*Math.random())+1;for(s.push(n.find(i,e)),s.push(n.find(i,e)),h+=2;14!==h;)if(Math.random()<.5){let t=n.pop(),i=t.getFamily(),e=t.getValue();n.count(i,e)>1?(s.push(t),s.push(n.find(i,e)),s.push(n.find(i,e)),h+=3):(n.push(t),n.shuffle())}else{let t=Math.floor(3*Math.random())+1,i=Math.floor(7*Math.random())+1;n.count(t,i)>1&&n.count(t,i+1)>1&&n.count(t,i+2)>1&&(s.push(n.find(t,i)),s.push(n.find(t,i+1)),s.push(n.find(t,i+2)),h+=3)}return s.sort(),s},main_pure(t=0){let i=new c,e=new m;e.shuffle();let s=Math.floor(3*Math.random())+1,n=Math.floor(9*Math.random())+1;i.push(e.find(s,n)),i.push(e.find(s,n));let h=2;for(;h<14;)if(Math.random()<.5){let t=Math.floor(9*Math.random())+1;if(e.count(s,t)>2)for(let n=0;n<3;n++)i.push(e.find(s,t)),h++}else{let t=Math.floor(7*Math.random())+1;if(e.count(s,t)>0&&e.count(s,t+1)>0&&e.count(s,t+2)>0)for(let n=0;n<3;n++)i.push(e.find(s,t+n)),h++}return i.sort(),i},main_semi_pure(t=0){let i=new c,e=new m;e.shuffle();let s=Math.floor(3*Math.random())+1,n=Math.floor(9*Math.random())+1;i.push(e.find(s,n)),i.push(e.find(s,n));let h=2,a=Math.floor(2*Math.random())+4,l=Math.floor(3*Math.random())+1;for(i.push(e.find(a,l)),i.push(e.find(a,l)),i.push(e.find(a,l)),h+=3;h<14;)if(Math.random()<.5)if(Math.random()<.5){let t=Math.floor(9*Math.random())+1;if(e.count(s,t)>2)for(let n=0;n<3;n++)i.push(e.find(s,t)),h++}else if(Math.random()<.5){let t=Math.floor(4*Math.random())+1;if(e.count(4,t)>2)for(let s=0;s<3;s++)i.push(e.find(4,t)),h++}else{let t=Math.floor(3*Math.random())+1;if(e.count(5,t)>2)for(let s=0;s<3;s++)i.push(e.find(5,t)),h++}else{let t=Math.floor(7*Math.random())+1;if(e.count(s,t)>0&&e.count(s,t+1)>0&&e.count(s,t+2)>0)for(let n=0;n<3;n++)i.push(e.find(s,t+n)),h++}return i.sort(),i},double_suite(t=0){let i=new c,e=new m;e.shuffle();let s=e.pop(),n=e.find(s.getFamily(),s.getValue());i.push(s),i.push(n);let h=2,a=Math.floor(3*Math.random())+1,l=Math.floor(7*Math.random())+1;for(;e.count(a,l)<2||e.count(a,l+1)<2||e.count(a,l+2)<2;)a=Math.floor(3*Math.random())+1,l=Math.floor(7*Math.random())+1;for(i.push(e.find(a,l)),i.push(e.find(a,l)),i.push(e.find(a,l+1)),i.push(e.find(a,l+1)),i.push(e.find(a,l+2)),i.push(e.find(a,l+2)),h+=6;14!==h;)if(Math.random()<.5){let t=e.pop(),s=t.getFamily(),n=t.getValue();e.count(s,n)>1?(i.push(t),i.push(e.find(s,n)),i.push(e.find(s,n)),h+=3):(e.push(t),e.shuffle())}else{let t=Math.floor(3*Math.random())+1,s=Math.floor(7*Math.random())+1;e.count(t,s)>1&&e.count(t,s+1)>1&&e.count(t,s+2)>1&&(i.push(e.find(t,s)),i.push(e.find(t,s+1)),i.push(e.find(t,s+2)),h+=3)}return i.sort(),i},sept_pairs(i=0){let e=new c,s=new m;s.shuffle();let n=0;for(;7!==n;){let i=s.pop();e.getTiles().every((t=>0!==t.compare(i)))&&(n++,e.push(i),e.push(new t(i.getFamily(),i.getValue(),!1)))}return e.sort(),e}};var g=function(t,i,e,s){return new(e||(e=Promise))((function(n,h){function a(t){try{r(s.next(t))}catch(t){h(t)}}function l(t){try{r(s.throw(t))}catch(t){h(t)}}function r(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e((function(t){t(i)}))).then(a,l)}r((s=s.apply(t,i||[])).next())}))};const M="myCanvas",y=1e3/30;class w{constructor(t=M){this.hands=[],this.handTexts=[],this.wind=Math.floor(4*Math.random()),this.animationFrameId=null,this.lastFrameTime=0,this.cleanupCallbacks=[],this.BASE_X=50,this.BASE_Y=90,this.DY=160,this.SIZE=.75;const i=document.getElementById(t);if(!i)throw new Error(`Canvas avec ID '${t}' introuvable`);this.canvas=i;const e=i.getContext("2d");if(!e)throw new Error("Impossible d'obtenir le contexte 2D du canvas");this.ctx=e}drawFrame(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.drawHandsAndLabels()}drawHandsAndLabels(){for(let t=0;t{this.animationFrameId=requestAnimationFrame(t);const e=i-this.lastFrameTime;ethis.preloadHand(t)))]),this.drawFrame(),this.startAnimationLoop()}catch(t){console.error("Erreur d'initialisation:",t)}}))}cleanup(){null!==this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.cleanupCallbacks.forEach((t=>t())),this.cleanupCallbacks=[],this.hands.forEach((t=>t.cleanup())),this.hands=[]}}let v=null;function F(){v&&(v.cleanup(),v=null)}"undefined"!=typeof window&&function(){return g(this,void 0,void 0,(function*(){try{v=new w(M),yield v.initialize(),window.cleanup=F}catch(t){console.error("Erreur lors de l'initialisation:",t)}}))}().catch(console.error)})(); \ No newline at end of file diff --git a/build/test.js b/build/test.js deleted file mode 100644 index 3211fd3..0000000 --- a/build/test.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var t={274:(t,e,i)=>{i.d(e,{F:()=>s});class s{constructor(t,e,i){this.family=t,this.value=e,this.red=i,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,e){return this.family===t&&this.value===e}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,e=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:e})=>this.loadImg(t,e))))},new((i=void 0)||(i=Promise))((function(n,u){function o(t){try{r(s.next(t))}catch(t){u(t)}}function l(t){try{r(s.throw(t))}catch(t){u(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((s=s.apply(t,e||[])).next())}));var t,e,i,s}loadImg(t,e){return new Promise(((i,s)=>{t.onload=()=>i(),t.onerror=()=>s(),t.src=e}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}},305:(t,e,i)=>{function s(t,e){return t?(console.log("%c[SUCCES] "+e,"color: green"),1):(console.log("%c[ECHEC] "+e,"color: red"),0)}i.d(e,{v:()=>s})},679:(t,e,i)=>{var s,n,u,o,l,r=i(959),m=i(305);let a=new r.U("s1s1"),h=new r.U("m1m2m3"),g=new r.U("m2m2m2 p1p1"),p=new r.U("m1m2m3 p1p2p3 s1s2s3 m9m9m9 p9p9"),c=new r.U("m2m2m2 p1p1p1"),d=0,f=0;d+=(0,m.v)(1===(null===(s=a.toGroup())||void 0===s?void 0:s.length),"s11 has 1 group"),d+=(0,m.v)(1===(null===(n=h.toGroup())||void 0===n?void 0:n.length),"m123 has 1 group"),d+=(0,m.v)(2===(null===(u=g.toGroup())||void 0===u?void 0:u.length),"m222 p11 has 2 groups"),(0,m.v)(5===(null===(o=p.toGroup())||void 0===o?void 0:o.length),"m123 p123 s123 m999 p99 has 5 groups"),d+=(0,m.v)(2===(null===(l=c.toGroup())||void 0===l?void 0:l.length),"m222 p111 has 2 groups"),f+=4,console.log("Succès: "+d.toString()+"/"+f.toString())},762:(t,e,i)=>{var s=i(305);function n(t){return t.getTiles().every((t=>t.getFamily()<4&&t.getValue()>1&&t.getValue()<9))}function u(t){return t.getTiles().every((t=>t.getFamily()>=4))}function o(t){let e=t.getTiles();return e[0].getValue()!==e[1].getValue()}function l(t){let e=t.getTiles();return e[0].getValue()===e[1].getValue()}const r={lipekou:function(t,e,i){if(e.length>0&&!r.ryanpeikou(t,e,i))return 0;let s=t.toGroup();s.sort(((t,e)=>t.compare(e)));for(let t=0;t<3;t++){let e=s[t].getTiles(),i=s[t+1].getTiles();if(e[0].isEqual(i[0].getFamily(),i[0].getValue())&&o(s[t])&&o(s[t+1]))return 1}return 0},ryanpeikou:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();if(s.filter((t=>o(t))),s.length<4)return 0;s.sort(((t,e)=>t.compare(e)));let n=s[0].getTiles()[0],u=s[1].getTiles()[0],l=s[2].getTiles()[0],r=s[3].getTiles()[0];return 0===n.compare(u)&&0===l.compare(r)?3:0},pinfu:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();return void 0!==s&&s.every((t=>{let e=t.getTiles();return o(t)||2===e.length}))?1:0},sanshokuDoujun:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n=n.filter((t=>o(t))),n.sort(((t,e)=>t.compare(e))),n.length<3)return 0;if(3===n.length){let t=n[0].getTiles(),i=n[1].getTiles(),s=n[2].getTiles();return t[0].getValue()===i[0].getValue()&&t[0].getValue()===s[0].getValue()&&t[0].getFamily()!==i[0].getFamily()&&t[0].getFamily()!==s[0].getFamily()&&i[0].getFamily()!==s[0].getFamily()?e.length>0?1:2:0}for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let s=n[i[0]].getTiles(),u=n[i[1]].getTiles(),o=n[i[2]].getTiles();if(s[0].getValue()===u[0].getValue()&&s[0].getValue()===o[0].getValue()&&s[0].getFamily()!==u[0].getFamily()&&s[0].getFamily()!==o[0].getFamily()&&u[0].getFamily()!==o[0].getFamily())return e.length>0?1:2}return 0},ittsuu:function(t,e,i){let s=e.concat(t.toGroup());if(s=s.filter((t=>o(t))),s.sort(((t,e)=>t.compare(e))),s.length<3)return 0;if(3!==s.length){for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let n=s[i[0]].getTiles(),u=s[i[1]].getTiles(),o=s[i[2]].getTiles();if(1===n[0].getValue()&&4===u[0].getValue()&&7===o[0].getValue()&&n[0].getFamily()===u[0].getFamily()&&n[0].getFamily()===o[0].getFamily())return e.length>0?1:2}return 0}{let t=s[0].getTiles(),i=s[1].getTiles(),n=s[2].getTiles();if(t[0].getFamily()===i[0].getFamily()&&i[0].getFamily()===n[0].getFamily()&&1===t[0].getValue()&&4===i[0].getValue()&&7===n[0].getValue())return e.length>0?1:2}return 0},tanyao:function(t,e,i){let s=t.toGroup();return void 0===s?0:e.every((t=>n(t)))&&s.every((t=>n(t)))?1:0},yakuhai:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)&&3===t.getTiles().length));let n=0;return s.forEach((t=>{let e=t.getTiles(),s=e[0].getFamily(),u=e[0].getValue();5===s&&n++,4===s&&0===u&&n++,4===s&&u===i&&n++})),n},shousangen:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();5===e[0].getFamily()&&(3===e.length?n++:u++)})),2==n&&1==u?2:0},daisangen:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>l(t)&&3===t.getTiles().length&&5===t.getTiles()[0].getFamily())),3===s.length?13:0},shousuushii:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();4===e[0].getFamily()&&(3===e.length?n++:u++)})),3==n&&1==u?13:0},daisuushi:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();4===e[0].getFamily()&&(3===e.length?n++:u++)})),4==n&&0==u?13:0},chanta:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[0].getValue(),n=e[e.length-1].getValue();return i<4&&1!==s&&9!==n})),s.length>0?0:e.length>0?1:2},junchan:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[0].getValue(),n=e[e.length-1].getValue();return i>3||1!==s&&9!==n})),s.length>0?0:e.length>0?2:3},honroutou:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[1].getValue();return i<4&&1!==s&&9!==s})),s.length>0?0:2},chinroutou:function(t,e,i){return e.concat(t.toGroup()).every((t=>function(t){return t.getTiles().every((t=>t.getFamily()<4&&(1===t.getValue()||9===t.getValue())))}(t)))?13:0},tsuuiisou:function(t,e,i){let s=t.toGroup();return void 0===s?0:e.every((t=>u(t)))&&s.every((t=>u(t)))?13:0},kokushiMusou:function(t,e,i){if(e.length>0)return 0;let s=t.getTiles();if(s.some((t=>t.getFamily()<4&&t.getValue()>1&&t.getValue()<9)))return 0;let n=0;for(let t=0;t1));t++);return 1===n?13:0},chiitoitsu:function(t,e,i){if(e.length>0)return 0;let s=t.getTiles();if(14!==s.length)return 0;for(let t=0;t<14;t+=2)if(0!==s[t].compare(s[t+1])||t>0&&0===s[t].compare(s[t-1]))return 0;return 2},toitoi:function(t,e,i){let s=t.toGroup();return e.every((t=>l(t)))&&(null==s?void 0:s.every((t=>l(t))))?2:0},sanankou:function(t,e,i){let s=t.toGroup(),n=0;return null==s||s.forEach((t=>{l(t)&&3===t.getTiles().length&&n++})),3===n?2:0},suuankou:function(t,e,i){let s=t.toGroup(),n=0;return null==s||s.forEach((t=>{l(t)&&3===t.getTiles().length&&n++})),4===n?13:0},sanshokuDoukou:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n=n.filter((t=>l(t)&&3===t.getTiles().length)),n.sort(((t,e)=>t.compare(e))),n.length<3)return 0;if(3===n.length){let t=n[0].getTiles(),i=n[1].getTiles(),s=n[2].getTiles();return t[0].getValue()===i[0].getValue()&&t[0].getValue()===s[0].getValue()&&t[0].getFamily()!==i[0].getFamily()&&t[0].getFamily()!==s[0].getFamily()&&i[0].getFamily()!==s[0].getFamily()?e.length>0?1:2:0}for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let s=n[i[0]].getTiles(),u=n[i[1]].getTiles(),o=n[i[2]].getTiles();if(s[0].getValue()===u[0].getValue()&&s[0].getValue()===o[0].getValue()&&s[0].getFamily()!==u[0].getFamily()&&s[0].getFamily()!==o[0].getFamily()&&u[0].getFamily()!==o[0].getFamily())return e.length>0?1:2}return 0},sankantsu:function(t,e,i){return 0},suukantsu:function(t,e,i){return 0},honitsu:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n.sort(((t,e)=>t.compare(e))),0===n.length)return 0;if(n[n.length-1].getTiles()[0].getFamily()<4)return 0;let u=n[0].getTiles()[0].getFamily();return u>3?0:n.every((t=>{let e=t.getTiles()[0].getFamily();return e>3||u===e}))?e.length>0?2:3:0},chinitsu:function(t,e,i){let s=t.getTiles(),n=s[0];return s.every((t=>t.getFamily()===n.getFamily()))&&e.every((t=>t.getTiles().every((t=>t.getFamily()===n.getFamily()))))?e.length>0?5:6:0},ryuuisou:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();return(null==s?void 0:s.every((t=>t.getTiles().every((t=>function(t){let e=t.getFamily(),i=t.getValue();return(5===e||3===e)&&(5===e?2===i:i%2==0||3===i)}(t))))))?13:0},chuurenPoutou:function(t,e,i){if(e.length>0||0===r.chinitsu(t,e,i))return 0;let s=t.getTiles();if(s[0].getFamily()>=4)return 0;let n=[s[0].getValue()],u=1;for(let t=1;t4)return 0}else u=1,n.push(e);else if(e===i){if(u++,u<2)n.push(e);else if(u>2)return 0}else u=1,n.push(e)}return n.toString()===[1,1,1,2,3,4,5,6,7,8,9,9,9].toString()?13:0}};var m=i(959);let a=0,h=0,g=new m.U("m1m2m3 m4m5m6 m7m8m9 m1m2m3 m5m5"),p=new m.U("m1m1m1 m4m4m4 m7m7m7 p1p1p1 p5p5"),c=new m.U("m1m1m1 p9p9p9 s1s1s1 w2w2w2 d1d1"),d=new m.U("m2m3m4 p3p3p3 p4p5p6 s4s4 s6s7s8"),f=new m.U("m1m2m3 m1m2m3 p7p8p9 p7p8p9 w3w3"),w=new m.U("m1m2m3 m1m2m3 p6p7p8 p7p8p9 w3w3"),v=new m.U("m1m2m3 p1p2p3 s1s2s3 m7m8m9 p9p9"),y=new m.U("m1m2m3 m1m2m3 p6p6 w0w0w0 w3w3w3"),F=new m.U("m1m2m3 m1m2m3 d1d1d1 d2d2d2 d3d3"),T=new m.U("m1m2m3 p6p6 d1d1d1 d2d2d2 d3d3d3"),k=new m.U("m1m2m3 w1w1w1 w2w2w2 w3w3w3 w4w4"),V=new m.U("m1m1 w1w1w1 w2w2w2 w3w3w3 w4w4w4"),S=new m.U("d1d1 w1w1w1 w2w2w2 w3w3w3 w4w4w4"),G=new m.U("m1m1 m9m9m9 p1p1p1 p9p9p9 s1s1s1"),U=new m.U("m1m9m9 p1p9 s1s9 w1w2w3w4 d1d2d3"),C=new m.U("m1m1 m2m2 m3m3 m4m4 m5m5 m6m6 m7m7"),I=new m.U("m1m1 m2m2 m3m3 m4m4 m5m5 m6m6 m6m6"),P=new m.U("m1m2m3 m4m4m4 m7m7m7 p1p1p1 p5p5"),D=new m.U("m1m1m1 p1p1p1 s1s1s1 s1s2s3 p5p5"),E=new m.U("m1m1m1 p1p1p1 s1s1 s1s2s3 p5p5p5"),x=new m.U("m1m1m1 m2m3m4 m5m6m7 m8m8 m9m9m9"),M=new m.U("s2s2s2 s8s8s8 s4s4s4 s6s6 d2d2d2"),b=new m.U("m1m1m1 m2m3m4 m5m6m7 m8m8m8 m9m9m9"),j=new m.U("m1m1m1 m2m3m4 m6m6 m5m6m7 m9m9m9");a+=(0,s.v)(1===r.lipekou(f,[],0),"m123 m123 p789 p789 w33 is Lipeikou"),a+=(0,s.v)(0===r.lipekou(c,[],0),"m111 p999 s111 w222 d11 is not Lipeikou"),h+=2,a+=(0,s.v)(3===r.ryanpeikou(f,[],0),"m123 m123 p789 p789 w33 is Ryanpeikou"),a+=(0,s.v)(0===r.ryanpeikou(w,[],0),"m1123 m123 p678 p789 w33 is not Ryanpeikou"),h+=2,a+=(0,s.v)(1===r.pinfu(g,[],0),"m123 m456 m789 m123 p55 is Pinfu"),a+=(0,s.v)(0===r.pinfu(p,[],0),"m111 m444 m777 p111 p55 is not Pinfu"),h+=2,a+=(0,s.v)(2===r.sanshokuDoujun(v,[],0),"m123 p123 s123 m789 p99 is Shanshokou Doujun"),a+=(0,s.v)(0===r.sanshokuDoujun(p,[],0),"m111 m444 m777 p111 p55 is not Shanshokou Doujun"),h+=2,a+=(0,s.v)(2===r.ittsuu(g,[],0),"m123 m456 m789 m123 m55 is Ittsuu"),a+=(0,s.v)(0===r.ittsuu(p,[],0),"m111 m444 m777 p111 p55 is not Ittsu"),h+=2,a+=(0,s.v)(1===r.tanyao(d,[],0),"m234 p333 p456 s44 s678 is Tanyao"),a+=(0,s.v)(0===r.tanyao(g,[],0),"m123 m456 m789 m123 p55 is not Tanyao"),h+=2,a+=(0,s.v)(1===r.yakuhai(c,[],2),"m111 p999 s111 w222 d11 West is Yakuhai"),a+=(0,s.v)(2===r.yakuhai(y,[],3),"m123 m123 p66 w000 w333 North is double Yakuhai"),a+=(0,s.v)(0===r.yakuhai(c,[],0),"m111 p999 s111 w222 d11 Est is not Yakuhai"),h+=3,a+=(0,s.v)(2===r.shousangen(F,[],0),"m123 m123 d111 d222 d33 is Shousangen"),a+=(0,s.v)(0===r.shousangen(T,[],0),"m123 p66 d111 d222 d333 is not Shousangen"),a+=(0,s.v)(0===r.shousangen(c,[],0),"m111 p999 s111 w222 d11 is not Shousangen"),h+=3,a+=(0,s.v)(13===r.daisangen(T,[],0),"m123 p66 d111 d222 d333 is Daisangen"),a+=(0,s.v)(0===r.daisangen(F,[],0),"m123 m123 d111 d222 d33 is not Daisangen"),a+=(0,s.v)(0===r.daisangen(c,[],0),"m111 p999 s111 w222 d11 is not Daisangen"),h+=3,a+=(0,s.v)(13===r.shousuushii(k,[],0),"m123 w111 w222 w333 w44 is Shousuushi"),a+=(0,s.v)(0===r.shousuushii(V,[],0),"m11 w111 w222 w333 w444 is not Shousuushi"),a+=(0,s.v)(0===r.shousuushii(c,[],0),"m111 p999 s111 w222 d11 is not Shousuushi"),h+=3,a+=(0,s.v)(13===r.daisuushi(V,[],0),"m11 w111 w222 w333 w444 is Daisuushi"),a+=(0,s.v)(0===r.daisuushi(k,[],0),"m123 w111 w222 w333 w44 is not Daisuushi"),a+=(0,s.v)(0===r.daisuushi(c,[],0),"m111 p999 s111 w222 d11 is not Daisuushi"),h+=3,a+=(0,s.v)(2===r.chanta(S,[],0),"d11 w111 w222 w333 w444 is Chanta"),a+=(0,s.v)(2===r.chanta(V,[],0),"m11 w111 w222 w333 w444 is Chanta"),a+=(0,s.v)(0===r.chanta(T,[],0),"m123 p66 d111 d222 d333 is not Chanta"),h+=3,a+=(0,s.v)(3===r.junchan(v,[],0),"m123 p123 s123 m789 p99 is Junchan"),a+=(0,s.v)(0===r.junchan(T,[],0),"m123 p66 d111 d222 d333 is not Junchan"),h+=2,a+=(0,s.v)(2===r.honroutou(G,[],0),"m11 m999 p111 p999 s111 is Honroutou"),a+=(0,s.v)(2===r.honroutou(c,[],0),"m111 p999 s111 w222 d11 is Honroutou"),a+=(0,s.v)(0===r.honroutou(T,[],0),"m123 p66 d111 d222 d333 is not Honroutou"),h+=3,a+=(0,s.v)(13===r.chinroutou(G,[],0),"m11 m999 p111 p999 s111 is Chinroutou"),a+=(0,s.v)(0===r.chinroutou(c,[],0),"m111 p999 s111 w222 d11 is not Chinroutou"),a+=(0,s.v)(0===r.chinroutou(T,[],0),"m123 p66 d111 d222 d333 is not Chinroutou"),h+=3,a+=(0,s.v)(13===r.tsuuiisou(S,[],0),"d11 w111 w222 w333 w444 is Tsuuisou"),a+=(0,s.v)(0===r.tsuuiisou(c,[],0),"m111 p999 s111 w222 d11 is not Tsuuisou"),h+=2,a+=(0,s.v)(13===r.kokushiMusou(U,[],0),"m199 p19 s19 w1234 d123 is Kokushi Musou"),a+=(0,s.v)(0===r.kokushiMusou(c,[],0),"m111 p999 s111 w222 d11 is not Kokushi Musou"),h+=2,a+=(0,s.v)(2===r.chiitoitsu(C,[],0),"m11 m22 m33 m44 m55 m66 m77 is Chiitoitsu"),a+=(0,s.v)(0===r.chiitoitsu(I,[],0),"m11 m22 m33 m44 m55 m66 m66 is not Chiitoitsu"),a+=(0,s.v)(0===r.chiitoitsu(c,[],0),"m111 p999 s111 w222 d11 is not Chiitoitsu"),h+=3,a+=(0,s.v)(2===r.toitoi(p,[],0),"m111 m444 m777 p111 p55 is Toitoi"),a+=(0,s.v)(0===r.toitoi(v,[],0),"m123 p123 s123 m789 p99 is not Toitoi"),h+=2,a+=(0,s.v)(2===r.sanankou(P,[],0),"m123 m444 m777 p111 p55 is Sanankou"),a+=(0,s.v)(0===r.sanankou(p,[],0),"m111 m444 m777 p111 p55 is not Sanankou"),a+=(0,s.v)(0===r.sanankou(v,[],0),"m123 p123 s123 m789 p99 is not Sanankou"),h+=3,a+=(0,s.v)(13===r.suuankou(p,[],0),"m111 m444 m777 p111 p55 is Sanankou"),a+=(0,s.v)(0===r.suuankou(P,[],0),"m123 m444 m777 p111 p55 is not Sanankou"),a+=(0,s.v)(0===r.suuankou(v,[],0),"m123 p123 s123 m789 p99 is not Sanankou"),h+=3,a+=(0,s.v)(2===r.sanshokuDoukou(D,[],0),"m111 p111 s111 s123 p55 is Shanshoku Doukou"),a+=(0,s.v)(0===r.sanshokuDoukou(E,[],0),"m11 p111 s111 s123 p555 is not Shanshoku Doukou"),a+=(0,s.v)(0===r.sanshokuDoukou(v,[],0),"m123 p123 s123 m789 p99 is not Shanshoku Doukou"),h+=3,a+=(0,s.v)(!1,"sankantsu not implemented"),h+=1,a+=(0,s.v)(!1,"suukantsu not implemented"),h+=1,a+=(0,s.v)(3===r.honitsu(F,[],0),"m123 m123 d111 d222 d33 is Honitsu"),a+=(0,s.v)(0===r.honitsu(S,[],0),"d11 w111 w222 w333 w444 is not Honitsu"),a+=(0,s.v)(0===r.honitsu(g,[],0),"m123 m456 m789 m123 m55 is not Honitsu"),a+=(0,s.v)(0===r.honitsu(v,[],0),"m123 p123 s123 m789 p99 is not Honitsu"),h+=4,a+=(0,s.v)(6===r.chinitsu(g,[],0),"m123 m456 m789 m123 m55 is Chinitsu"),a+=(0,s.v)(0===r.chinitsu(F,[],0),"m123 m123 d111 d222 d33 is not Chinitsu"),a+=(0,s.v)(0===r.chinitsu(S,[],0),"d11 w111 w222 w333 w444 is not Chinitsu"),a+=(0,s.v)(0===r.chinitsu(v,[],0),"m123 p123 s123 m789 p99 is not Chinitsu"),h+=4,a+=(0,s.v)(13===r.ryuuisou(M,[],0),"s222 s888 s444 s66 d222 is Ryuuisou"),a+=(0,s.v)(0===r.ryuuisou(g,[],0),"m123 m456 m789 m123 m55 is not Ryuuisou"),h+=2,a+=(0,s.v)(13===r.chuurenPoutou(x,[],0),"m111 m234 m567 m88 m999 is Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(b,[],0),"m111 m234 m567 m888 m999 is not Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(j,[],0),"m111 m234 m66 m567 m999 is not Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(g,[],0),"m123 m456 m789 m123 m55 is not Chuuren Poutou"),h+=4,console.log("Succès: "+a.toString()+"/"+h.toString())},879:(t,e,i)=>{i.d(e,{Y:()=>s});class s{constructor(t,e,i){this.tiles=t,this.stolenFrom=e,this.belongsTo=i}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const e=this.tiles[0].compare(t.tiles[0]);return 0!==e?e:this.tiles[1].compare(t.tiles[1])}drawGroup(t,e,i,s,n,u,o){t.save(),t.translate(525,525),t.rotate(u),t.translate(-525,-525);const l=75*n,r=90*n,m=25*n/2,a=(this.belongsTo-this.stolenFrom-1+4)%4,h=void 0===o?-1:o.getFamily(),g=void 0===o?0:o.getValue(),p=(e,i,s,u)=>{e.drawTile(t,i,s,n,!1,u,e.isEqual(h,g))},c=Math.PI/2;switch(a){case 0:p(this.tiles[0],e,i+m,c),p(this.tiles[1],e+r,i,0),p(this.tiles[2],e+r+l+s*n,i,0);break;case 1:p(this.tiles[0],e,i,0),p(this.tiles[1],e+r,i+m,-c),p(this.tiles[2],e+r+l+3*s*n,i,0);break;case 2:p(this.tiles[0],e,i,0),p(this.tiles[1],e+l+s*n,i,0),p(this.tiles[2],e+r+l+s*n,i+m,-c);break;default:console.error(`Position non prise en charge: ${a}`)}t.restore()}}},959:(t,e,i)=>{i.d(e,{U:()=>f});var s=i(274),n=i(879);const u="m",o=1,l="p",r=2,m="s",a=3,h="w",g=4,p="d",c=5;class d{constructor(t){this.tiles=t.map((t=>new s.F(t.getFamily(),t.getValue(),t.isRed()))),this.sort()}sort(){this.tiles.sort(((t,e)=>t.isLessThan(e)?-1:1))}find(t,e){const i=this.findTileIndex(t,e);if(-1!==i){[this.tiles[i],this.tiles[0]]=[this.tiles[0],this.tiles[i]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,e){return this.tiles.findIndex((i=>i.getFamily()===t&&i.getValue()===e))}count(t,e){return this.tiles.filter((i=>i.getFamily()===t&&i.getValue()===e)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const e=this.tiles.pop(),i=e.getFamily(),s=e.getValue();if(this.count(i,s)>=1&&!t){const t=this.tryFormPair(e);if(t)return t}if(this.count(i,s)>=2){const i=this.tryFormTriplet(e,t);if(i)return i}if(i<=3){const n=this.count(i,s-1)>0,u=this.count(i,s-2)>0;if(n&&u){const i=this.tryFormSequence(e,t);if(i)return i}}this.tiles.push(e),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),i=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==i)return this.tiles.push(t),this.sort(),i.push(new n.Y([t,e],0,0)),i}tryFormTriplet(t,e){const i=this.find(t.getFamily(),t.getValue()),s=this.find(t.getFamily(),t.getValue()),u=this.findGroups(e);if(this.tiles.push(i),this.tiles.push(s),this.sort(),void 0!==u)return u.push(new n.Y([t,i,s],0,0)),this.tiles.push(t),this.sort(),u}tryFormSequence(t,e){const i=this.find(t.getFamily(),t.getValue()-1),s=this.find(t.getFamily(),t.getValue()-2),u=this.findGroups(e);if(this.tiles.push(i),this.tiles.push(s),this.sort(),void 0!==u)return u.push(new n.Y([s,i,t],0,0)),this.tiles.push(t),this.sort(),u}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let e=0;ei.getFamily()===t&&i.getValue()===e))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const e=this.tiles.shift();return this.sort(),e}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,e)=>t.isLessThan(e)?-1:1))}count(t,e){return this.tiles.filter((i=>i.getFamily()===t&&i.getValue()===e)).length}toGroup(t=!1){return new d(this.tiles).findGroups(t)}drawHand(t,e,i,s,n,u=void 0,o=!1,l=0){const r=(75+s)*n,m=Math.cos(l)*r,a=Math.sin(l)*r;for(let s=0;st.preloadImg())))},new((i=void 0)||(i=Promise))((function(n,u){function o(t){try{r(s.next(t))}catch(t){u(t)}}function l(t){try{r(s.throw(t))}catch(t){u(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((s=s.apply(t,e||[])).next())}));var t,e,i,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}}},e={};function i(s){var n=e[s];if(void 0!==n)return n.exports;var u=e[s]={exports:{}};return t[s](u,u.exports,i),u.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i(679),i(762)})(); \ No newline at end of file diff --git a/build/test_hand.js b/build/test_hand.js deleted file mode 100644 index 0aedf02..0000000 --- a/build/test_hand.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var t={274:(t,i,s)=>{s.d(i,{F:()=>e});class e{constructor(t,i,s){this.family=t,this.value=i,this.red=s,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,i){return this.family===t&&this.value===i}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,i=void 0,e=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:i})=>this.loadImg(t,i))))},new((s=void 0)||(s=Promise))((function(r,l){function n(t){try{h(e.next(t))}catch(t){l(t)}}function o(t){try{h(e.throw(t))}catch(t){l(t)}}function h(t){var i;t.done?r(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(n,o)}h((e=e.apply(t,i||[])).next())}));var t,i,s,e}loadImg(t,i){return new Promise(((s,e)=>{t.onload=()=>s(),t.onerror=()=>e(),t.src=i}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}},305:(t,i,s)=>{function e(t,i){return t?(console.log("%c[SUCCES] "+i,"color: green"),1):(console.log("%c[ECHEC] "+i,"color: red"),0)}s.d(i,{v:()=>e})},879:(t,i,s)=>{s.d(i,{Y:()=>e});class e{constructor(t,i,s){this.tiles=t,this.stolenFrom=i,this.belongsTo=s}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const i=this.tiles[0].compare(t.tiles[0]);return 0!==i?i:this.tiles[1].compare(t.tiles[1])}drawGroup(t,i,s,e,r,l,n){t.save(),t.translate(525,525),t.rotate(l),t.translate(-525,-525);const o=75*r,h=90*r,a=25*r/2,u=(this.belongsTo-this.stolenFrom-1+4)%4,m=void 0===n?-1:n.getFamily(),c=void 0===n?0:n.getValue(),g=(i,s,e,l)=>{i.drawTile(t,s,e,r,!1,l,i.isEqual(m,c))},d=Math.PI/2;switch(u){case 0:g(this.tiles[0],i,s+a,d),g(this.tiles[1],i+h,s,0),g(this.tiles[2],i+h+o+e*r,s,0);break;case 1:g(this.tiles[0],i,s,0),g(this.tiles[1],i+h,s+a,-d),g(this.tiles[2],i+h+o+3*e*r,s,0);break;case 2:g(this.tiles[0],i,s,0),g(this.tiles[1],i+o+e*r,s,0),g(this.tiles[2],i+h+o+e*r,s+a,-d);break;default:console.error(`Position non prise en charge: ${u}`)}t.restore()}}},959:(t,i,s)=>{s.d(i,{U:()=>f});var e=s(274),r=s(879);const l="m",n=1,o="p",h=2,a="s",u=3,m="w",c=4,g="d",d=5;class p{constructor(t){this.tiles=t.map((t=>new e.F(t.getFamily(),t.getValue(),t.isRed()))),this.sort()}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}find(t,i){const s=this.findTileIndex(t,i);if(-1!==s){[this.tiles[s],this.tiles[0]]=[this.tiles[0],this.tiles[s]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,i){return this.tiles.findIndex((s=>s.getFamily()===t&&s.getValue()===i))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const i=this.tiles.pop(),s=i.getFamily(),e=i.getValue();if(this.count(s,e)>=1&&!t){const t=this.tryFormPair(i);if(t)return t}if(this.count(s,e)>=2){const s=this.tryFormTriplet(i,t);if(s)return s}if(s<=3){const r=this.count(s,e-1)>0,l=this.count(s,e-2)>0;if(r&&l){const s=this.tryFormSequence(i,t);if(s)return s}}this.tiles.push(i),this.sort()}tryFormPair(t){const i=this.find(t.getFamily(),t.getValue()),s=this.findGroups(!0);if(this.tiles.push(i),this.sort(),void 0!==s)return this.tiles.push(t),this.sort(),s.push(new r.Y([t,i],0,0)),s}tryFormTriplet(t,i){const s=this.find(t.getFamily(),t.getValue()),e=this.find(t.getFamily(),t.getValue()),l=this.findGroups(i);if(this.tiles.push(s),this.tiles.push(e),this.sort(),void 0!==l)return l.push(new r.Y([t,s,e],0,0)),this.tiles.push(t),this.sort(),l}tryFormSequence(t,i){const s=this.find(t.getFamily(),t.getValue()-1),e=this.find(t.getFamily(),t.getValue()-2),l=this.findGroups(i);if(this.tiles.push(s),this.tiles.push(e),this.sort(),void 0!==l)return l.push(new r.Y([e,s,t],0,0)),this.tiles.push(t),this.sort(),l}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let i=0;is.getFamily()===t&&s.getValue()===i))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const i=this.tiles.shift();return this.sort(),i}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,i)=>t.isLessThan(i)?-1:1))}count(t,i){return this.tiles.filter((s=>s.getFamily()===t&&s.getValue()===i)).length}toGroup(t=!1){return new p(this.tiles).findGroups(t)}drawHand(t,i,s,e,r,l=void 0,n=!1,o=0){const h=(75+e)*r,a=Math.cos(o)*h,u=Math.sin(o)*h;for(let e=0;et.preloadImg())))},new((s=void 0)||(s=Promise))((function(r,l){function n(t){try{h(e.next(t))}catch(t){l(t)}}function o(t){try{h(e.throw(t))}catch(t){l(t)}}function h(t){var i;t.done?r(t.value):(i=t.value,i instanceof s?i:new s((function(t){t(i)}))).then(n,o)}h((e=e.apply(t,i||[])).next())}));var t,i,s,e}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}}},i={};function s(e){var r=i[e];if(void 0!==r)return r.exports;var l=i[e]={exports:{}};return t[e](l,l.exports,s),l.exports}s.d=(t,i)=>{for(var e in i)s.o(i,e)&&!s.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:i[e]})},s.o=(t,i)=>Object.prototype.hasOwnProperty.call(t,i);var e,r,l,n,o,h=s(959),a=s(305);let u=new h.U("s1s1"),m=new h.U("m1m2m3"),c=new h.U("m2m2m2 p1p1"),g=new h.U("m1m2m3 p1p2p3 s1s2s3 m9m9m9 p9p9"),d=new h.U("m2m2m2 p1p1p1"),p=0,f=0;p+=(0,a.v)(1===(null===(e=u.toGroup())||void 0===e?void 0:e.length),"s11 has 1 group"),p+=(0,a.v)(1===(null===(r=m.toGroup())||void 0===r?void 0:r.length),"m123 has 1 group"),p+=(0,a.v)(2===(null===(l=c.toGroup())||void 0===l?void 0:l.length),"m222 p11 has 2 groups"),(0,a.v)(5===(null===(n=g.toGroup())||void 0===n?void 0:n.length),"m123 p123 s123 m999 p99 has 5 groups"),p+=(0,a.v)(2===(null===(o=d.toGroup())||void 0===o?void 0:o.length),"m222 p111 has 2 groups"),f+=4,console.log("Succès: "+p.toString()+"/"+f.toString())})(); \ No newline at end of file diff --git a/build/test_yakus.js b/build/test_yakus.js deleted file mode 100644 index 8632c26..0000000 --- a/build/test_yakus.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var t={274:(t,e,i)=>{i.d(e,{F:()=>s});class s{constructor(t,e,i){this.family=t,this.value=e,this.red=i,this.imgFront=new Image,this.imgBack=new Image,this.imgGray=new Image,this.img=new Image,this.imgSrc="",this.tilt=0,this.setImgSrc()}getFamily(){return this.family}getValue(){return this.value}isEqual(t,e){return this.family===t&&this.value===e}isRed(){return this.red}compare(t){return this.family!==t.family?this.family{t.onload=null,t.onerror=null}))}preloadImg(){return t=this,e=void 0,s=function*(){const t=[{img:this.imgFront,src:"img/Regular/Front.svg"},{img:this.imgBack,src:"img/Regular/Back.svg"},{img:this.imgGray,src:"img/Regular/Gray.svg"},{img:this.img,src:this.imgSrc}];yield Promise.all(t.map((({img:t,src:e})=>this.loadImg(t,e))))},new((i=void 0)||(i=Promise))((function(n,u){function o(t){try{r(s.next(t))}catch(t){u(t)}}function l(t){try{r(s.throw(t))}catch(t){u(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((s=s.apply(t,e||[])).next())}));var t,e,i,s}loadImg(t,e){return new Promise(((i,s)=>{t.onload=()=>i(),t.onerror=()=>s(),t.src=e}))}setImgSrc(){if(this.imgSrc="img/Regular/",this.family<=3){const t=["","Man","Pin","Sou"];this.imgSrc+=t[this.family]+String(this.value),this.red&&(this.imgSrc+="-Dora")}else if(4===this.family){const t=["","Ton","Nan","Shaa","Pei"];this.imgSrc+=t[this.value]}else if(5===this.family){const t=["","Chun","Hatsu","Haku"];this.imgSrc+=t[this.value]}this.imgSrc+=".svg"}}},305:(t,e,i)=>{function s(t,e){return t?(console.log("%c[SUCCES] "+e,"color: green"),1):(console.log("%c[ECHEC] "+e,"color: red"),0)}i.d(e,{v:()=>s})},879:(t,e,i)=>{i.d(e,{Y:()=>s});class s{constructor(t,e,i){this.tiles=t,this.stolenFrom=e,this.belongsTo=i}push(t){this.tiles.push(t)}pop(){return this.tiles.pop()}getTiles(){return this.tiles}compare(t){const e=this.tiles[0].compare(t.tiles[0]);return 0!==e?e:this.tiles[1].compare(t.tiles[1])}drawGroup(t,e,i,s,n,u,o){t.save(),t.translate(525,525),t.rotate(u),t.translate(-525,-525);const l=75*n,r=90*n,m=25*n/2,a=(this.belongsTo-this.stolenFrom-1+4)%4,h=void 0===o?-1:o.getFamily(),g=void 0===o?0:o.getValue(),p=(e,i,s,u)=>{e.drawTile(t,i,s,n,!1,u,e.isEqual(h,g))},c=Math.PI/2;switch(a){case 0:p(this.tiles[0],e,i+m,c),p(this.tiles[1],e+r,i,0),p(this.tiles[2],e+r+l+s*n,i,0);break;case 1:p(this.tiles[0],e,i,0),p(this.tiles[1],e+r,i+m,-c),p(this.tiles[2],e+r+l+3*s*n,i,0);break;case 2:p(this.tiles[0],e,i,0),p(this.tiles[1],e+l+s*n,i,0),p(this.tiles[2],e+r+l+s*n,i+m,-c);break;default:console.error(`Position non prise en charge: ${a}`)}t.restore()}}},959:(t,e,i)=>{i.d(e,{U:()=>f});var s=i(274),n=i(879);const u="m",o=1,l="p",r=2,m="s",a=3,h="w",g=4,p="d",c=5;class d{constructor(t){this.tiles=t.map((t=>new s.F(t.getFamily(),t.getValue(),t.isRed()))),this.sort()}sort(){this.tiles.sort(((t,e)=>t.isLessThan(e)?-1:1))}find(t,e){const i=this.findTileIndex(t,e);if(-1!==i){[this.tiles[i],this.tiles[0]]=[this.tiles[0],this.tiles[i]];const t=this.tiles.shift();return this.sort(),t}}findTileIndex(t,e){return this.tiles.findIndex((i=>i.getFamily()===t&&i.getValue()===e))}count(t,e){return this.tiles.filter((i=>i.getFamily()===t&&i.getValue()===e)).length}findGroups(t=!1){if(0===this.tiles.length)return[];const e=this.tiles.pop(),i=e.getFamily(),s=e.getValue();if(this.count(i,s)>=1&&!t){const t=this.tryFormPair(e);if(t)return t}if(this.count(i,s)>=2){const i=this.tryFormTriplet(e,t);if(i)return i}if(i<=3){const n=this.count(i,s-1)>0,u=this.count(i,s-2)>0;if(n&&u){const i=this.tryFormSequence(e,t);if(i)return i}}this.tiles.push(e),this.sort()}tryFormPair(t){const e=this.find(t.getFamily(),t.getValue()),i=this.findGroups(!0);if(this.tiles.push(e),this.sort(),void 0!==i)return this.tiles.push(t),this.sort(),i.push(new n.Y([t,e],0,0)),i}tryFormTriplet(t,e){const i=this.find(t.getFamily(),t.getValue()),s=this.find(t.getFamily(),t.getValue()),u=this.findGroups(e);if(this.tiles.push(i),this.tiles.push(s),this.sort(),void 0!==u)return u.push(new n.Y([t,i,s],0,0)),this.tiles.push(t),this.sort(),u}tryFormSequence(t,e){const i=this.find(t.getFamily(),t.getValue()-1),s=this.find(t.getFamily(),t.getValue()-2),u=this.findGroups(e);if(this.tiles.push(i),this.tiles.push(s),this.sort(),void 0!==u)return u.push(new n.Y([s,i,t],0,0)),this.tiles.push(t),this.sort(),u}}class f{constructor(t=""){this.isolate=!1,this.tiles=[],this.initializeFromString(t)}initializeFromString(t){for(let e=0;ei.getFamily()===t&&i.getValue()===e))}eject(t){if(t<0||t>=this.tiles.length)throw new Error("Invalid tile index");[this.tiles[0],this.tiles[t]]=[this.tiles[t],this.tiles[0]];const e=this.tiles.shift();return this.sort(),e}get(t){if(!(void 0===t||t<0||t>=this.tiles.length))return this.tiles[t]}sort(){this.tiles.sort(((t,e)=>t.isLessThan(e)?-1:1))}count(t,e){return this.tiles.filter((i=>i.getFamily()===t&&i.getValue()===e)).length}toGroup(t=!1){return new d(this.tiles).findGroups(t)}drawHand(t,e,i,s,n,u=void 0,o=!1,l=0){const r=(75+s)*n,m=Math.cos(l)*r,a=Math.sin(l)*r;for(let s=0;st.preloadImg())))},new((i=void 0)||(i=Promise))((function(n,u){function o(t){try{r(s.next(t))}catch(t){u(t)}}function l(t){try{r(s.throw(t))}catch(t){u(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((s=s.apply(t,e||[])).next())}));var t,e,i,s}cleanup(){this.tiles.forEach((t=>t.cleanup())),this.tiles=[]}}}},e={};function i(s){var n=e[s];if(void 0!==n)return n.exports;var u=e[s]={exports:{}};return t[s](u,u.exports,i),u.exports}i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var s=i(305);function n(t){return t.getTiles().every((t=>t.getFamily()<4&&t.getValue()>1&&t.getValue()<9))}function u(t){return t.getTiles().every((t=>t.getFamily()>=4))}function o(t){let e=t.getTiles();return e[0].getValue()!==e[1].getValue()}function l(t){let e=t.getTiles();return e[0].getValue()===e[1].getValue()}const r={lipekou:function(t,e,i){if(e.length>0&&!r.ryanpeikou(t,e,i))return 0;let s=t.toGroup();s.sort(((t,e)=>t.compare(e)));for(let t=0;t<3;t++){let e=s[t].getTiles(),i=s[t+1].getTiles();if(e[0].isEqual(i[0].getFamily(),i[0].getValue())&&o(s[t])&&o(s[t+1]))return 1}return 0},ryanpeikou:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();if(s.filter((t=>o(t))),s.length<4)return 0;s.sort(((t,e)=>t.compare(e)));let n=s[0].getTiles()[0],u=s[1].getTiles()[0],l=s[2].getTiles()[0],r=s[3].getTiles()[0];return 0===n.compare(u)&&0===l.compare(r)?3:0},pinfu:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();return void 0!==s&&s.every((t=>{let e=t.getTiles();return o(t)||2===e.length}))?1:0},sanshokuDoujun:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n=n.filter((t=>o(t))),n.sort(((t,e)=>t.compare(e))),n.length<3)return 0;if(3===n.length){let t=n[0].getTiles(),i=n[1].getTiles(),s=n[2].getTiles();return t[0].getValue()===i[0].getValue()&&t[0].getValue()===s[0].getValue()&&t[0].getFamily()!==i[0].getFamily()&&t[0].getFamily()!==s[0].getFamily()&&i[0].getFamily()!==s[0].getFamily()?e.length>0?1:2:0}for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let s=n[i[0]].getTiles(),u=n[i[1]].getTiles(),o=n[i[2]].getTiles();if(s[0].getValue()===u[0].getValue()&&s[0].getValue()===o[0].getValue()&&s[0].getFamily()!==u[0].getFamily()&&s[0].getFamily()!==o[0].getFamily()&&u[0].getFamily()!==o[0].getFamily())return e.length>0?1:2}return 0},ittsuu:function(t,e,i){let s=e.concat(t.toGroup());if(s=s.filter((t=>o(t))),s.sort(((t,e)=>t.compare(e))),s.length<3)return 0;if(3!==s.length){for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let n=s[i[0]].getTiles(),u=s[i[1]].getTiles(),o=s[i[2]].getTiles();if(1===n[0].getValue()&&4===u[0].getValue()&&7===o[0].getValue()&&n[0].getFamily()===u[0].getFamily()&&n[0].getFamily()===o[0].getFamily())return e.length>0?1:2}return 0}{let t=s[0].getTiles(),i=s[1].getTiles(),n=s[2].getTiles();if(t[0].getFamily()===i[0].getFamily()&&i[0].getFamily()===n[0].getFamily()&&1===t[0].getValue()&&4===i[0].getValue()&&7===n[0].getValue())return e.length>0?1:2}return 0},tanyao:function(t,e,i){let s=t.toGroup();return void 0===s?0:e.every((t=>n(t)))&&s.every((t=>n(t)))?1:0},yakuhai:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)&&3===t.getTiles().length));let n=0;return s.forEach((t=>{let e=t.getTiles(),s=e[0].getFamily(),u=e[0].getValue();5===s&&n++,4===s&&0===u&&n++,4===s&&u===i&&n++})),n},shousangen:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();5===e[0].getFamily()&&(3===e.length?n++:u++)})),2==n&&1==u?2:0},daisangen:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>l(t)&&3===t.getTiles().length&&5===t.getTiles()[0].getFamily())),3===s.length?13:0},shousuushii:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();4===e[0].getFamily()&&(3===e.length?n++:u++)})),3==n&&1==u?13:0},daisuushi:function(t,e,i){let s=e.concat(t.toGroup());s=s.filter((t=>l(t)));let n=0,u=0;return s.forEach((t=>{let e=t.getTiles();4===e[0].getFamily()&&(3===e.length?n++:u++)})),4==n&&0==u?13:0},chanta:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[0].getValue(),n=e[e.length-1].getValue();return i<4&&1!==s&&9!==n})),s.length>0?0:e.length>0?1:2},junchan:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[0].getValue(),n=e[e.length-1].getValue();return i>3||1!==s&&9!==n})),s.length>0?0:e.length>0?2:3},honroutou:function(t,e,i){let s=e.concat(t.toGroup());return s=s.filter((t=>{let e=t.getTiles(),i=e[0].getFamily(),s=e[1].getValue();return i<4&&1!==s&&9!==s})),s.length>0?0:2},chinroutou:function(t,e,i){return e.concat(t.toGroup()).every((t=>function(t){return t.getTiles().every((t=>t.getFamily()<4&&(1===t.getValue()||9===t.getValue())))}(t)))?13:0},tsuuiisou:function(t,e,i){let s=t.toGroup();return void 0===s?0:e.every((t=>u(t)))&&s.every((t=>u(t)))?13:0},kokushiMusou:function(t,e,i){if(e.length>0)return 0;let s=t.getTiles();if(s.some((t=>t.getFamily()<4&&t.getValue()>1&&t.getValue()<9)))return 0;let n=0;for(let t=0;t1));t++);return 1===n?13:0},chiitoitsu:function(t,e,i){if(e.length>0)return 0;let s=t.getTiles();if(14!==s.length)return 0;for(let t=0;t<14;t+=2)if(0!==s[t].compare(s[t+1])||t>0&&0===s[t].compare(s[t-1]))return 0;return 2},toitoi:function(t,e,i){let s=t.toGroup();return e.every((t=>l(t)))&&(null==s?void 0:s.every((t=>l(t))))?2:0},sanankou:function(t,e,i){let s=t.toGroup(),n=0;return null==s||s.forEach((t=>{l(t)&&3===t.getTiles().length&&n++})),3===n?2:0},suuankou:function(t,e,i){let s=t.toGroup(),n=0;return null==s||s.forEach((t=>{l(t)&&3===t.getTiles().length&&n++})),4===n?13:0},sanshokuDoukou:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n=n.filter((t=>l(t)&&3===t.getTiles().length)),n.sort(((t,e)=>t.compare(e))),n.length<3)return 0;if(3===n.length){let t=n[0].getTiles(),i=n[1].getTiles(),s=n[2].getTiles();return t[0].getValue()===i[0].getValue()&&t[0].getValue()===s[0].getValue()&&t[0].getFamily()!==i[0].getFamily()&&t[0].getFamily()!==s[0].getFamily()&&i[0].getFamily()!==s[0].getFamily()?e.length>0?1:2:0}for(let t=0;t<4;t++){let i=[];for(let e=0;e<4;e++)e!==t&&i.push(e);let s=n[i[0]].getTiles(),u=n[i[1]].getTiles(),o=n[i[2]].getTiles();if(s[0].getValue()===u[0].getValue()&&s[0].getValue()===o[0].getValue()&&s[0].getFamily()!==u[0].getFamily()&&s[0].getFamily()!==o[0].getFamily()&&u[0].getFamily()!==o[0].getFamily())return e.length>0?1:2}return 0},sankantsu:function(t,e,i){return 0},suukantsu:function(t,e,i){return 0},honitsu:function(t,e,i){let s=t.toGroup(),n=[];if(n=void 0!==s?e.concat(s):e,n.sort(((t,e)=>t.compare(e))),0===n.length)return 0;if(n[n.length-1].getTiles()[0].getFamily()<4)return 0;let u=n[0].getTiles()[0].getFamily();return u>3?0:n.every((t=>{let e=t.getTiles()[0].getFamily();return e>3||u===e}))?e.length>0?2:3:0},chinitsu:function(t,e,i){let s=t.getTiles(),n=s[0];return s.every((t=>t.getFamily()===n.getFamily()))&&e.every((t=>t.getTiles().every((t=>t.getFamily()===n.getFamily()))))?e.length>0?5:6:0},ryuuisou:function(t,e,i){if(e.length>0)return 0;let s=t.toGroup();return(null==s?void 0:s.every((t=>t.getTiles().every((t=>function(t){let e=t.getFamily(),i=t.getValue();return(5===e||3===e)&&(5===e?2===i:i%2==0||3===i)}(t))))))?13:0},chuurenPoutou:function(t,e,i){if(e.length>0||0===r.chinitsu(t,e,i))return 0;let s=t.getTiles();if(s[0].getFamily()>=4)return 0;let n=[s[0].getValue()],u=1;for(let t=1;t4)return 0}else u=1,n.push(e);else if(e===i){if(u++,u<2)n.push(e);else if(u>2)return 0}else u=1,n.push(e)}return n.toString()===[1,1,1,2,3,4,5,6,7,8,9,9,9].toString()?13:0}};var m=i(959);let a=0,h=0,g=new m.U("m1m2m3 m4m5m6 m7m8m9 m1m2m3 m5m5"),p=new m.U("m1m1m1 m4m4m4 m7m7m7 p1p1p1 p5p5"),c=new m.U("m1m1m1 p9p9p9 s1s1s1 w2w2w2 d1d1"),d=new m.U("m2m3m4 p3p3p3 p4p5p6 s4s4 s6s7s8"),f=new m.U("m1m2m3 m1m2m3 p7p8p9 p7p8p9 w3w3"),w=new m.U("m1m2m3 m1m2m3 p6p7p8 p7p8p9 w3w3"),v=new m.U("m1m2m3 p1p2p3 s1s2s3 m7m8m9 p9p9"),y=new m.U("m1m2m3 m1m2m3 p6p6 w0w0w0 w3w3w3"),F=new m.U("m1m2m3 m1m2m3 d1d1d1 d2d2d2 d3d3"),T=new m.U("m1m2m3 p6p6 d1d1d1 d2d2d2 d3d3d3"),k=new m.U("m1m2m3 w1w1w1 w2w2w2 w3w3w3 w4w4"),V=new m.U("m1m1 w1w1w1 w2w2w2 w3w3w3 w4w4w4"),S=new m.U("d1d1 w1w1w1 w2w2w2 w3w3w3 w4w4w4"),G=new m.U("m1m1 m9m9m9 p1p1p1 p9p9p9 s1s1s1"),C=new m.U("m1m9m9 p1p9 s1s9 w1w2w3w4 d1d2d3"),U=new m.U("m1m1 m2m2 m3m3 m4m4 m5m5 m6m6 m7m7"),I=new m.U("m1m1 m2m2 m3m3 m4m4 m5m5 m6m6 m6m6"),P=new m.U("m1m2m3 m4m4m4 m7m7m7 p1p1p1 p5p5"),D=new m.U("m1m1m1 p1p1p1 s1s1s1 s1s2s3 p5p5"),E=new m.U("m1m1m1 p1p1p1 s1s1 s1s2s3 p5p5p5"),x=new m.U("m1m1m1 m2m3m4 m5m6m7 m8m8 m9m9m9"),M=new m.U("s2s2s2 s8s8s8 s4s4s4 s6s6 d2d2d2"),b=new m.U("m1m1m1 m2m3m4 m5m6m7 m8m8m8 m9m9m9"),j=new m.U("m1m1m1 m2m3m4 m6m6 m5m6m7 m9m9m9");a+=(0,s.v)(1===r.lipekou(f,[],0),"m123 m123 p789 p789 w33 is Lipeikou"),a+=(0,s.v)(0===r.lipekou(c,[],0),"m111 p999 s111 w222 d11 is not Lipeikou"),h+=2,a+=(0,s.v)(3===r.ryanpeikou(f,[],0),"m123 m123 p789 p789 w33 is Ryanpeikou"),a+=(0,s.v)(0===r.ryanpeikou(w,[],0),"m1123 m123 p678 p789 w33 is not Ryanpeikou"),h+=2,a+=(0,s.v)(1===r.pinfu(g,[],0),"m123 m456 m789 m123 p55 is Pinfu"),a+=(0,s.v)(0===r.pinfu(p,[],0),"m111 m444 m777 p111 p55 is not Pinfu"),h+=2,a+=(0,s.v)(2===r.sanshokuDoujun(v,[],0),"m123 p123 s123 m789 p99 is Shanshokou Doujun"),a+=(0,s.v)(0===r.sanshokuDoujun(p,[],0),"m111 m444 m777 p111 p55 is not Shanshokou Doujun"),h+=2,a+=(0,s.v)(2===r.ittsuu(g,[],0),"m123 m456 m789 m123 m55 is Ittsuu"),a+=(0,s.v)(0===r.ittsuu(p,[],0),"m111 m444 m777 p111 p55 is not Ittsu"),h+=2,a+=(0,s.v)(1===r.tanyao(d,[],0),"m234 p333 p456 s44 s678 is Tanyao"),a+=(0,s.v)(0===r.tanyao(g,[],0),"m123 m456 m789 m123 p55 is not Tanyao"),h+=2,a+=(0,s.v)(1===r.yakuhai(c,[],2),"m111 p999 s111 w222 d11 West is Yakuhai"),a+=(0,s.v)(2===r.yakuhai(y,[],3),"m123 m123 p66 w000 w333 North is double Yakuhai"),a+=(0,s.v)(0===r.yakuhai(c,[],0),"m111 p999 s111 w222 d11 Est is not Yakuhai"),h+=3,a+=(0,s.v)(2===r.shousangen(F,[],0),"m123 m123 d111 d222 d33 is Shousangen"),a+=(0,s.v)(0===r.shousangen(T,[],0),"m123 p66 d111 d222 d333 is not Shousangen"),a+=(0,s.v)(0===r.shousangen(c,[],0),"m111 p999 s111 w222 d11 is not Shousangen"),h+=3,a+=(0,s.v)(13===r.daisangen(T,[],0),"m123 p66 d111 d222 d333 is Daisangen"),a+=(0,s.v)(0===r.daisangen(F,[],0),"m123 m123 d111 d222 d33 is not Daisangen"),a+=(0,s.v)(0===r.daisangen(c,[],0),"m111 p999 s111 w222 d11 is not Daisangen"),h+=3,a+=(0,s.v)(13===r.shousuushii(k,[],0),"m123 w111 w222 w333 w44 is Shousuushi"),a+=(0,s.v)(0===r.shousuushii(V,[],0),"m11 w111 w222 w333 w444 is not Shousuushi"),a+=(0,s.v)(0===r.shousuushii(c,[],0),"m111 p999 s111 w222 d11 is not Shousuushi"),h+=3,a+=(0,s.v)(13===r.daisuushi(V,[],0),"m11 w111 w222 w333 w444 is Daisuushi"),a+=(0,s.v)(0===r.daisuushi(k,[],0),"m123 w111 w222 w333 w44 is not Daisuushi"),a+=(0,s.v)(0===r.daisuushi(c,[],0),"m111 p999 s111 w222 d11 is not Daisuushi"),h+=3,a+=(0,s.v)(2===r.chanta(S,[],0),"d11 w111 w222 w333 w444 is Chanta"),a+=(0,s.v)(2===r.chanta(V,[],0),"m11 w111 w222 w333 w444 is Chanta"),a+=(0,s.v)(0===r.chanta(T,[],0),"m123 p66 d111 d222 d333 is not Chanta"),h+=3,a+=(0,s.v)(3===r.junchan(v,[],0),"m123 p123 s123 m789 p99 is Junchan"),a+=(0,s.v)(0===r.junchan(T,[],0),"m123 p66 d111 d222 d333 is not Junchan"),h+=2,a+=(0,s.v)(2===r.honroutou(G,[],0),"m11 m999 p111 p999 s111 is Honroutou"),a+=(0,s.v)(2===r.honroutou(c,[],0),"m111 p999 s111 w222 d11 is Honroutou"),a+=(0,s.v)(0===r.honroutou(T,[],0),"m123 p66 d111 d222 d333 is not Honroutou"),h+=3,a+=(0,s.v)(13===r.chinroutou(G,[],0),"m11 m999 p111 p999 s111 is Chinroutou"),a+=(0,s.v)(0===r.chinroutou(c,[],0),"m111 p999 s111 w222 d11 is not Chinroutou"),a+=(0,s.v)(0===r.chinroutou(T,[],0),"m123 p66 d111 d222 d333 is not Chinroutou"),h+=3,a+=(0,s.v)(13===r.tsuuiisou(S,[],0),"d11 w111 w222 w333 w444 is Tsuuisou"),a+=(0,s.v)(0===r.tsuuiisou(c,[],0),"m111 p999 s111 w222 d11 is not Tsuuisou"),h+=2,a+=(0,s.v)(13===r.kokushiMusou(C,[],0),"m199 p19 s19 w1234 d123 is Kokushi Musou"),a+=(0,s.v)(0===r.kokushiMusou(c,[],0),"m111 p999 s111 w222 d11 is not Kokushi Musou"),h+=2,a+=(0,s.v)(2===r.chiitoitsu(U,[],0),"m11 m22 m33 m44 m55 m66 m77 is Chiitoitsu"),a+=(0,s.v)(0===r.chiitoitsu(I,[],0),"m11 m22 m33 m44 m55 m66 m66 is not Chiitoitsu"),a+=(0,s.v)(0===r.chiitoitsu(c,[],0),"m111 p999 s111 w222 d11 is not Chiitoitsu"),h+=3,a+=(0,s.v)(2===r.toitoi(p,[],0),"m111 m444 m777 p111 p55 is Toitoi"),a+=(0,s.v)(0===r.toitoi(v,[],0),"m123 p123 s123 m789 p99 is not Toitoi"),h+=2,a+=(0,s.v)(2===r.sanankou(P,[],0),"m123 m444 m777 p111 p55 is Sanankou"),a+=(0,s.v)(0===r.sanankou(p,[],0),"m111 m444 m777 p111 p55 is not Sanankou"),a+=(0,s.v)(0===r.sanankou(v,[],0),"m123 p123 s123 m789 p99 is not Sanankou"),h+=3,a+=(0,s.v)(13===r.suuankou(p,[],0),"m111 m444 m777 p111 p55 is Sanankou"),a+=(0,s.v)(0===r.suuankou(P,[],0),"m123 m444 m777 p111 p55 is not Sanankou"),a+=(0,s.v)(0===r.suuankou(v,[],0),"m123 p123 s123 m789 p99 is not Sanankou"),h+=3,a+=(0,s.v)(2===r.sanshokuDoukou(D,[],0),"m111 p111 s111 s123 p55 is Shanshoku Doukou"),a+=(0,s.v)(0===r.sanshokuDoukou(E,[],0),"m11 p111 s111 s123 p555 is not Shanshoku Doukou"),a+=(0,s.v)(0===r.sanshokuDoukou(v,[],0),"m123 p123 s123 m789 p99 is not Shanshoku Doukou"),h+=3,a+=(0,s.v)(!1,"sankantsu not implemented"),h+=1,a+=(0,s.v)(!1,"suukantsu not implemented"),h+=1,a+=(0,s.v)(3===r.honitsu(F,[],0),"m123 m123 d111 d222 d33 is Honitsu"),a+=(0,s.v)(0===r.honitsu(S,[],0),"d11 w111 w222 w333 w444 is not Honitsu"),a+=(0,s.v)(0===r.honitsu(g,[],0),"m123 m456 m789 m123 m55 is not Honitsu"),a+=(0,s.v)(0===r.honitsu(v,[],0),"m123 p123 s123 m789 p99 is not Honitsu"),h+=4,a+=(0,s.v)(6===r.chinitsu(g,[],0),"m123 m456 m789 m123 m55 is Chinitsu"),a+=(0,s.v)(0===r.chinitsu(F,[],0),"m123 m123 d111 d222 d33 is not Chinitsu"),a+=(0,s.v)(0===r.chinitsu(S,[],0),"d11 w111 w222 w333 w444 is not Chinitsu"),a+=(0,s.v)(0===r.chinitsu(v,[],0),"m123 p123 s123 m789 p99 is not Chinitsu"),h+=4,a+=(0,s.v)(13===r.ryuuisou(M,[],0),"s222 s888 s444 s66 d222 is Ryuuisou"),a+=(0,s.v)(0===r.ryuuisou(g,[],0),"m123 m456 m789 m123 m55 is not Ryuuisou"),h+=2,a+=(0,s.v)(13===r.chuurenPoutou(x,[],0),"m111 m234 m567 m88 m999 is Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(b,[],0),"m111 m234 m567 m888 m999 is not Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(j,[],0),"m111 m234 m66 m567 m999 is not Chuuren Poutou"),a+=(0,s.v)(0===r.chuurenPoutou(g,[],0),"m123 m456 m789 m123 m55 is not Chuuren Poutou"),h+=4,console.log("Succès: "+a.toString()+"/"+h.toString())})(); \ No newline at end of file diff --git a/build/txt.js b/build/txt.js deleted file mode 100644 index 43f666f..0000000 --- a/build/txt.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050;const e=window.txtNumber;n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt"+e+".txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt0.js b/build/txt0.js deleted file mode 100644 index bd02a92..0000000 --- a/build/txt0.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt0.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt1.js b/build/txt1.js deleted file mode 100644 index e21f815..0000000 --- a/build/txt1.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt1.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt2.js b/build/txt2.js deleted file mode 100644 index d881f6f..0000000 --- a/build/txt2.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt2.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt3.js b/build/txt3.js deleted file mode 100644 index 708faf5..0000000 --- a/build/txt3.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt3.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt4.js b/build/txt4.js deleted file mode 100644 index 35b5394..0000000 --- a/build/txt4.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt4.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt5.js b/build/txt5.js deleted file mode 100644 index 4b5a3ac..0000000 --- a/build/txt5.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt5.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt6.js b/build/txt6.js deleted file mode 100644 index afac35d..0000000 --- a/build/txt6.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt6.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file diff --git a/build/txt7.js b/build/txt7.js deleted file mode 100644 index 2fca29a..0000000 --- a/build/txt7.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";const t=document.getElementById("myTextCanvas"),n=t.getContext("2d");t.width=800,t.height=1050,n.fillStyle="#007733",n.fillRect(0,0,800,1050),function(t,n){return e=this,o=void 0,f=function*(){console.log(t,"\n");const e=yield fetch(t).then((t=>t.text())),o="#ffffff";n.fillStyle=o,n.font="30px Garamond";let l=!1,f="",i="",c="",a=1,r=0;for(var d of e)"*"===d?(i=""===i?"bold ":"",n.font=c+i+30+"px Garamond"):"~"===d?(c=""===c?"italic ":"",n.font=c+i+30+"px Garamond"):"#"===d?(f="#",l=!0):"{"===d?(l=!1,n.fillStyle=f):"}"===d?(f="",n.fillStyle=o):l?f+=d:"\n"===d?(a++,r=0):(n.fillText(d,10+r,20+35*a),r+=n.measureText(d).width)},new((l=void 0)||(l=Promise))((function(t,n){function i(t){try{a(f.next(t))}catch(t){n(t)}}function c(t){try{a(f.throw(t))}catch(t){n(t)}}function a(n){var e;n.done?t(n.value):(e=n.value,e instanceof l?e:new l((function(t){t(e)}))).then(i,c)}a((f=f.apply(e,o||[])).next())}));var e,o,l,f}("src/text/txt7.txt",n).catch((t=>console.error(t)))})(); \ No newline at end of file