let w,h,ratio,el,g,my={};function init(){my.version='0.64' w=360;h=360;my.wd=75;my.ht=55;my.games=[{name:'? + ?',typ:'add',layout:['d','+','d']},{name:'?? + ?',typ:'add',layout:['d','d','br','d']},{name:'?? + ??',typ:'add',layout:['d','d','br','d','d']},{name:'? x ?',typ:'mul',layout:['d','x','d']},{name:'?? x ?',typ:'mul',layout:['d','d','br','x','d']},{name:'?? x ??',typ:'mul',layout:['d','d','br','x','d','d']}];for(let i=0;i▉')} my.gameNo=0;my.game=my.games[my.gameNo];let s='';s+='' my.soundHome=(document.domain=='localhost')?'/mathsisfun/images/sounds/':'/images/sounds/' s+='';s+='';s+='
';s+='';s+='
';s+='';s+='';s+='';s+='
';s+='
';s+='
';s+='
';s+='';s+=getRadioHTML('Game','game',my.games,'radioClick');s+='';s+='
';s+='
';s+='
';s+='
';s+=boxHTML('right','Right');s+=boxHTML('wrong','Wrong');s+=boxHTML('avgspeed','Avg Time');s+='
';s+=boxHTML('speed','Time (s)');s+='
';s+='
';s+='';my.soundQ=true s+=soundBtnHTML() s+='
';s+='
© 2019 MathsIsFun.com v'+my.version+'
';s+='
';docInsert(s);my.noClickQ=false;el=document.getElementById('can1');ratio=2;el.width=w*ratio;el.height=h*ratio;el.style.width=w+"px";el.style.height=h+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);} function optionsShow(showQ){let div=document.getElementById('result');if(showQ){div.style.visibility='visible';div.style.opacity=1;}else{div.style.visibility='hidden';div.style.opacity=0;}} function boxHTML(id,title){let s='';s+='
';s+=''+title+'
';s+='0
';return s;} function Die(x,y){this.x=x;this.y=y;this.wd=70;this.ht=this.wd;this.roll();} Die.prototype.roll=function(){this.animn=25;this.n=getRandomInt(1,6);this.rollAnim();} Die.prototype.rollAnim=function(){g.die(this.x+this.wd*0.05,this.y+this.ht*0.05,this.wd*0.9,this.ht*0.9,getRandomInt(1,6));if(this.animn-->0){requestAnimationFrame(this.rollAnim.bind(this));}else{g.die(this.x,this.y,this.wd,this.ht,this.n);my.sttTime=performance.now();}} function radioClick(n){my.gameNo=n;} function gameStart(){my.game=my.games[my.gameNo];console.log("gameStart",my.game,my.gameNo);my.rightN=0;my.doneN=0;my.elapsedTot=0;my.maxRoundsN=10;optionsShow(false) displayUpdate(0) roundStart();} function roundStart(){g.clearRect(0,0,el.width,el.height);my.sum=0;my.vals=[];let x=0;let y=120;my.dieWd=70;g.font='50px Arial';for(let i=0;i=100){console.log("CALL AGAIN",my.doneN);roundStart();return;} my.inGameQ=true;my.revealN=0;if(my.ans<=12){my.ansStt=1;}else{if(my.ans>=my.ansStt&&my.ans';for(let j=0;j<3;j++){let id=n+'-'+val;s+='
';s+=val;s+='
';val++;n++;} s+='';} div.innerHTML=s;} function doAns(me){my.endTime=performance.now();let elapsed=my.endTime-my.sttTime;my.elapsedTot+=elapsed;me.style.border='2px solid black';let ids=me.id.split('-');let ans=ids.pop();my.doneN++;let correctQ=false;if(ans==my.ans){if(my.soundQ)document.getElementById('sndyes').play();correctQ=true;my.rightN++;}else{if(my.soundQ)document.getElementById('sndno').play();} console.log("doAns",my.ans,ans,correctQ,my.rightN);displayUpdate(elapsed);if(my.doneN0.6){s+='Well Done!
';} s+='You got '+my.rightN+' of '+my.doneN+' correct
';s+=((my.elapsedTot/my.doneN)<<0)/1000+' second average';let div=document.getElementById('msg');div.innerHTML=s;optionsShow(true)} function getRadioHTML(prompt,id,lbls,func){let s='';s+='
';s+=prompt+':';for(let i=0;i';s+='';} s+='
';return s;} function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1)+min);} CanvasRenderingContext2D.prototype.roundRect=function(x,y,w,h,r){if(w<2*r)r=w/2;if(h<2*r)r=h/2;this.beginPath();this.moveTo(x+r,y);this.arcTo(x+w,y,x+w,y+h,r);this.arcTo(x+w,y+h,x,y+h,r);this.arcTo(x,y+h,x,y,r);this.arcTo(x,y,x+w,y,r);this.closePath();return this;} CanvasRenderingContext2D.prototype.die=function(x,y,wd,ht,n){let g=this;let grd=g.createLinearGradient(x+wd,y,x,y+ht);grd.addColorStop(0,"#def");grd.addColorStop(1,"#abf");g.fillStyle=grd;g.strokeStyle='#def';g.beginPath();this.roundRect(x,y,wd,ht,wd/5);g.stroke();g.fill();let p=0.3;let q=0.24;let faces=[[[0.5,0.5]],[[p,p],[1-p,1-p]],[[q,q],[0.5,0.5],[1-q,1-q]],[[p,p],[p,1-p],[1-p,1-p],[1-p,p]],[[q,q],[1-q,q],[0.5,0.5],[q,1-q],[1-q,1-q]],[[q,p],[0.5,p],[1-q,p],[q,1-p],[0.5,1-p],[1-q,1-p]],] let dots=faces[n-1];for(let i=0;i{if(cls.length==0)cls='btn' return '