function mazeMain(wd,ht){this.version='0.27';w=typeof wd!=='undefined'?wd:'740';h=typeof ht!=='undefined'?ht:'440';w=Math.min(w,window.innerWidth-30);h=w*0.65;compassQ=false;loadGames();var s="";s+='
';s+='
';if(compassQ){s+='';} s+='';s+='
';s+='';s+=optPopHTML();s+='
0
';s+='
';s+='
Maze Completed
';s+='';s+='
';s+='';s+='';s+='
© 2018 MathsIsFun.com v'+this.version+'
';s+='
';document.write(s);el=document.getElementById('canvasId');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);el2=document.getElementById('canvas2');ratio=2;el2.width=w*ratio;el2.height=h*ratio;el2.style.width=w+"px";el2.style.height=h+"px";g2=el2.getContext("2d");g2.setTransform(ratio,0,0,ratio,0,0);gameNo=2;game=games[gameNo];calcCellWd();numberOfCells=0;playerMoves=0;maxMoves=0;playerX=0;playerY=0;playerWd=0;maze=[];moves=[];mazeSttX=0;mazeSttY=0;timeVar="";arrowDir="";compassDir="";currentPos=0;drawPlayer();this.clrs=[["Blue",'#0000FF'],["Red",'#FF0000'],["Black",'#000000'],["Green",'#00cc00'],["Violet",'#EE82EE'],["Orange",'#FFA500'],["Light Salmon",'#FFA07A'],["Slate Blue",'#6A5ACD'],["Yellow",'#FFFF00'],["Aquamarine",'#7FFFD4'],["Pink",'#FFC0CB'],["Coral",'#FF7F50'],["Lime",'#00FF00'],["Pale Green",'#98FB98'],["Spring Green",'#00FF7F'],["Teal",'#008080'],["Hot Pink",'#FF69B4'],["Yellow",'#ffff00'],["Aqua",'#00ffff'],["Gold",'#ffd700'],["Khaki",'#F0E68C'],["Thistle",'#D8BFD8'],["Med Purple",'#aa00aa'],["Light Blue",'#ADD8E6'],["Sky Blue",'#87CEEB'],["Navy",'#000080'],["Purple",'#800080'],["Wheat",'#F5DEB3'],["Tan",'#D2B48C'],["Silver",'#C0C0C0']];window.addEventListener("keydown",key,false);el2.addEventListener('touchstart',ontouchstart,false);el2.addEventListener('touchmove',ontouchmove,false);window.addEventListener('touchend',ontouchend,false);el2.addEventListener("mousedown",onMouseDown,false);el2.addEventListener("mousemove",onMouseMove,false);window.addEventListener("mouseup",onMouseUp,false);frames=0;optpop();} function calcCellWd(){var fitWd=w/(game[gameWidthAt]+1);var fitHt=(h-50)/(game[gameHeightAt]+1);cellWd=Math.min(fitWd,fitHt);} function win(){var div=document.getElementById('win');div.style.opacity=1;div.style.left=(w-380)/2+'px';var elaps=((performance.now()-timeStt)/1000)<<0;var s='Maze Completed';s+='
in '+elaps+' seconds';s+='
and '+playerMoves+' steps';document.getElementById('winTxt').innerHTML=s;} function winClose(){div=document.getElementById('win');div.style.opacity=0;div.style.left='-999px';} function ontouchstart(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onMouseDown(evt)} function ontouchmove(evt){var touch=evt.targetTouches[0];evt.clientX=touch.clientX;evt.clientY=touch.clientY;evt.touchQ=true;onMouseMove(evt)} function ontouchend(){draggingQ=false;} function onMouseDown(evt){var bRect=el.getBoundingClientRect();mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);draggingQ=true;frames=0;moveRpt();if(evt.preventDefault){evt.preventDefault();} return false;} function onMouseMove(evt){var bRect=el.getBoundingClientRect();mouseX=(evt.clientX-bRect.left)*(el.width/ratio/bRect.width);mouseY=(evt.clientY-bRect.top)*(el.height/ratio/bRect.height);if(evt.preventDefault){evt.preventDefault();} return false;} function onMouseUp(){draggingQ=false;} function moveRpt(){frames=(++frames)%10;if(frames==1){if(compassQ){var px=67;var py=68;}else{px=mazeSttX+playerX*cellWd+cellWd/2;py=mazeSttY+playerY*cellWd+cellWd/2;} dirn='';var d=dist(px-mouseX,py-mouseY);var cellSize=cellWd;if(d>cellSize*0.6){var angle=Math.atan2(-(mouseY-py),mouseX-px)*180/Math.PI;if(angle<0)angle+=360;if(angle>30&&angle<=150){tryMove("u");} if(angle>120&&angle<=240){tryMove("l");} if(angle>210&&angle<=330){tryMove("d");} if(angle>300||angle<=60){tryMove("r");} moveDist=1;} console.log("moveRpt",mouseX,mouseY,px,py,d,dirn);} if(draggingQ) requestAnimationFrame(moveRpt);} function tryMove(dirn){if(dirn=="r"&&getCurrentWall(4)==0)movePlayer(1,0);if(dirn=="l"&&getCurrentWall(3)==0)movePlayer(-1,0);if(dirn=="d"&&getCurrentWall(2)==0)movePlayer(0,1);if(dirn=="u"&&getCurrentWall(1)==0)movePlayer(0,-1);} function loadGames(){games=[["Tiny",["Mini",""],5,3,60,[true,true,false,false,false],0,"wide"],["Small",["Easy",""],12,6,40,[true,true,false,false,false],0,"wide"],["Medium",["Medium",""],20,10,24,[true,true,false,false,false],0,"wide"],["Wide",["Wide",""],35,7,16,[true,true,true,false,false],0,"wide"],["Large",["Hard",""],35,20,16,[true,true,true,false,false],0,"wide"],["Hedges",["Hedges",""],18,14,22,[true,true,false,false,false],0,"dash"],["DotsSmall",["Barrels Easy",""],12,6,40,[true,true,false,false,false],0,"dots"],["DotsMedium",["Barrels Medium",""],16,14,22,[true,true,false,false,false],0,"dots"],["Dots2Small",["DoubleDots",""],12,6,40,[true,true,false,false,false],0,"2dots"],["Boxes",["Boxes",""],20,10,24,[true,true,false,false,false],0,"boxes"],["Road",["Roads Easy",""],15,8,40,[true,true,true,false,false],40,"road"],["RoadLarge",["Roads",""],30,16,20,[true,true,true,false,false],80,"road"],["TinyInvis",["Invisible Mini",""],5,3,60,[true,true,false,false,false],0,"invis"],["SmallInvis",["Invisible",""],12,6,40,[true,true,false,false,false],0,"invis"],["MedInvis",["Invisible Hard",""],20,10,28,[true,true,true,false,false],0,"invis"],["MedJag",["Jagged",""],20,10,28,[true,true,true,false,false],0,"jagged"],["LargeJag",["Jagged Hard",""],35,20,16,[true,true,true,false,false],0,"jagged"],["MedColor",["Colored",""],20,10,28,[true,true,true,false,false],0,"color"],["LargeColor",["Colored Hard",""],35,20,16,[true,true,true,false,false],0,"color"]];gameModeAt=0;gameNamesAt=1;gameWidthAt=2;gameHeightAt=3;gameSizeAt=4;gameGUIAt=5;gameMoreHolesAt=6;gameEdgeStyleAt=7;gameGUIKeysAt=0;gameGUIArrowsAt=1;gameGUIMouseAt=2;gameGUICompassKeysAt=3;gameGUICompassRoseAt=4;} function optPopHTML(){var s='';s+='
';for(var i=0;i'+gm[1][0]+'';} s+='
';s+='';s+='
';s+='
';return s;} function optpop(){console.log("optpop");var pop=document.getElementById('optpop');pop.style.transitionDuration="0.3s";pop.style.opacity=1;pop.style.zIndex=12;pop.style.left=(w-380)/2+'px';} function optYes(){var pop=document.getElementById('optpop');pop.style.opacity=0;pop.style.zIndex=1;pop.style.left='-999px';newGame();} function optChoose(n){console.log("optChoose",n);gameNo=n;game=games[gameNo];optYes();} function newGame(){g.clearRect(0,0,el.width,el.height);g2.clearRect(0,0,el.width,el.height);winClose();numberOfCells=game[gameWidthAt]*game[gameHeightAt];calcCellWd();generateMaze();drawMaze();playerWd=cellWd/2;var div=document.getElementById('player');div.style.width=playerWd+'px';div.style.height=playerWd+'px';playerX=0;playerY=0;currentPos=0;drawPlayer();timeStt=performance.now();playerMoves=0;document.getElementById('score').innerHTML=playerMoves;} function key(ev){var keyCode=ev.keyCode;switch(keyCode){case 37:if(getCurrentWall(3)==0) movePlayer(-1,0);ev.preventDefault();break;case 39:if(getCurrentWall(4)==0) movePlayer(1,0);ev.preventDefault();break;case 38:if(getCurrentWall(1)==0) movePlayer(0,-1);ev.preventDefault();break;case 40:if(getCurrentWall(2)==0) movePlayer(0,1);ev.preventDefault();break;default:} if(keyCode==9||keyCode==13||keyCode==32){}} function showScore(){console.log("showScore");var s='';for(var i=0;i0){s+='';s+=' vs ';s+='';} var tank=tanks[i];s+='';s+=tank.kills+' ';s+='';} var div=document.getElementById('score');div.innerHTML=s;} function getCurrentWall(wallNo){return(maze[currentPos][wallNo]);} function generateMaze(){mazeSttX=(w-game[gameWidthAt]*cellWd)/2;mazeSttY=(h-game[gameHeightAt]*cellWd)/2-10;maze=[];moves=[];for(var a=0;a=0)&&(maze[pos-game[gameWidthAt]][0]==0)){possible+="N";} if(possible){visited++;moves.push(pos);way=possible.charAt(Math.round(Math.random()*(possible.length-1)));switch(way){case "N":maze[pos][1]=0;maze[pos-game[gameWidthAt]][2]=0;pos-=game[gameWidthAt];break;case "S":maze[pos][2]=0;maze[pos+game[gameWidthAt]][1]=0;pos+=game[gameWidthAt];break;case "E":maze[pos][4]=0;maze[pos+1][3]=0;pos++;break;case "W":maze[pos][3]=0;maze[pos-1][4]=0;pos--;break;} maze[pos][0]=1;}else{pos=moves.pop();}} var moreHoles=0;while(moreHoles=0) maze[pos-game[gameWidthAt]][2]=0;break;case 2:maze[pos][2]=0;if(pos+game[gameWidthAt]=0) maze[pos-1][4]=0;break;case 4:maze[pos][4]=0;if(pos+10) drawEdge(mazeSttX+i*cellWd,mazeSttY,mazeSttX+(i+1)*cellWd,mazeSttY);if(i';s+='';s+='';var printWin=window.open('','','width=340,height=260');printWin.document.open();printWin.document.write(s);printWin.document.close();printWin.focus();printWin.print();printWin.close();}