class cPatricleBase{ constructor(isStart, len,src) { this.isStart = isStart; this.len = len; this.img = new Image; this.src=src; this.ar = new Array(); } doLoad(){ this.img.src = this.src; } doStart(){ for(let i=0;i this.wid){ this.ptclInit(); this.x = -this.w; } if(this.y < 0){ this.ptclInit(); this.y = Math.floor(Math.random() * this.hei); } if(this.y > this.hei){ this.ptclInit(); this.y = -5 * this.h; } } }class cPzl { //---コンストラクタ constructor(w,h,c) { this.wlen = w; this.hlen = h; this.pzlLen = c; this.pzlX=0; this.pzlY=0; this.pzlDone=false; this.arDat = new Array(); this.auto=false; this.autoCt=0; this.autoMax=1; this.arHisCt=-1; this.arHistory = new Array(); } //---初期化 pzlInit(){ //---init array for(let i=0;i -1){ aTemp.push({'x':mynum, 'y':this.pzlY}); } mynum = this.pzlX+1; if(mynum < this.wlen){ aTemp.push({'x':mynum, 'y':this.pzlY}); } mynum = this.pzlY-1; if(mynum > -1){ aTemp.push({'x':this.pzlX, 'y':mynum}); } mynum = this.pzlY+1; if(mynum '; for(let i=0;i'; } s = s + 'pzldone:' + this.pzlDone + '
'; return s; } //---イベント pzlEvent(x,y){ if(this.pzlDone)return; if(Math.abs(this.pzlX - x)==1){ if(this.pzlY==y){ this.pzlSwap(this.pzlX, this.pzlY,x,y); if(this.pzlCheck()){ this.pzlDone=true; } } } if(Math.abs(this.pzlY - y)==1){ if(this.pzlX==x){ this.pzlSwap(this.pzlX, this.pzlY, x, y); if(this.pzlCheck()){ this.pzlDone=true; } } } } //---終了判定 pzlCheck(){ for(let i=0;ithis.autoMax){ this.autoCt=0; this.arHisCt = this.arHisCt + 1; if(this.arHisCt > this.arHistory.length){ $this.auto=false; return; } videoStatus(this.arHisCt + '/' + this.arHistory.length); this.pzlEvent(this.arHistory[this.arHisCt][2],this.arHistory[this.arHisCt][3]); if(this.pzlCheck()){ this.pzlDone=true; } } } } //---VARS var wlen=10; var hlen=10; var pzlLen=300; //---puzzle var p = new cPzl(wlen,hlen,pzlLen); //---confetti var pParticle = new cPatricleBase(false,30, '../video/dat/kami.png'); pParticle.doLoad(); //---SE var sClick = new Audio(); sClick.src = "../video/snd/click.mp3"; var sWin = new Audio(); sWin.src="../video/snd/win.mp3"; //---GIRDS var wsize=Math.floor(wid/wlen); var hsize=Math.floor(hei/hlen); var arDat=new Array(); var pzlX=0; var pzlY=0; var pzlDone=false; //---SUBCANVAS var subcanvas = document.createElement("canvas"); subcanvas.width = wid; subcanvas.height = hei; var subcontext = subcanvas.getContext('2d', {willReadFrequently: true }); mycanvas.addEventListener("click", e => { if(p.pzlDone)return; sClick.play(); const rect = canvas.getBoundingClientRect(); var myx= e.clientX - rect.left; var myy= e.clientY - rect.top; myx = Math.floor(myx/wsize); myy = Math.floor(myy/hsize); pzlEvent(myx,myy); }); //---PZL function pzlStats(){ videoStatus(p.pzlInfo()); } function pzlEvent(x,y){ p.pzlEvent(x,y); if(p.pzlDone){ pParticle.doStart(); } } //---VIDEO function videoSetupEx(){ p.pzlInit(); context2.fillStyle = 'rgb(255, 0, 0)'; } function videoLoopEx() { subcontext.drawImage(myvideo, 0, 0, wid, hei); p.pzlAutoLoop(); //--COPOYRECT var srcimg = subcontext.getImageData(0,0,wid,hei); var srcpix = srcimg.data; var destimg = context2.getImageData(0,0,wid,hei); var destpix = destimg.data; for(let i=0; i