// StoragePuzzle WebApp v.1.1.0
// Copyright (c) 2009 K.Seki
const StatusIdle=0;const StatusGaming=1;const StatusWaiting=2;const kFloor=0;const kWall=1;const kBox=2;const kPlayer=3;const kGoal=4;const kCheckMark=5;const kOuter=-1;const ElemWidth=32;const MaxScreenWidth=320;const BdOffsetX=12;const BdOffsetY=54;const CoookieName="StoragePuzzleULevel";var maxLevel=40;var gameStatus;var langJpn=0;var gameImgs;var gvctx;var currScale;var currOffsetX=0;var currOffsetY=0;var nSettled=0;var currLevel;var MapLocation=function(a,b){this.x=a;this.y=b;this.settled=false};MapLocation.prototype.setXY=function(a,b){this.x=a;this.y=b};MapLocation.prototype.getX=function(){return this.x};MapLocation.prototype.getY=function(){return this.y};MapLocation.prototype.getSettled=function(){return this.settled};MapLocation.prototype.setSettled=function(a){this.settled=a};var playerLoc=new MapLocation(0,0);function loadImages(){gameImgs=new Array(6);gameImgs[kFloor]=new Image();gameImgs[kFloor].src="images/floor.png";gameImgs[kWall]=new Image();gameImgs[kWall].src="images/wall.png";gameImgs[kBox]=new Image();gameImgs[kBox].src="images/box.png";gameImgs[kPlayer]=new Image();gameImgs[kPlayer].src="images/player.png";gameImgs[kGoal]=new Image();gameImgs[kGoal].src="images/goal.png";gameImgs[kCheckMark]=new Image();gameImgs[kCheckMark].src="images/check.png"}function setupGame(){maxLevel=getMaxLevel();var a=getCookie(CoookieName);if(a==null){currLevel=1}else{currLevel=parseInt(a)}}function startGame(){gameStatus=StatusGaming;nSettled=0;getLevel(currLevel);drawMap()}function drawOneItemAt(a,e,d){var c=Math.floor(currScale*ElemWidth);var a=currOffsetX+a*c;var e=currOffsetY+e*c;var b=(currScale*ElemWidth);gvctx.drawImage(d,a,e,b,b)}function drawLevel(){var a=document.getElementById("LevelField");a.innerHTML=currLevel}function drawMap(){var l=currMap.length;var g=currMap[0].length;var m=g*ElemWidth;var e=l*ElemWidth;var k;(m>e)?k=m:k=e;if(MaxScreenWidth/k<1){currScale=Math.round(MaxScreenWidth/k*100);currScale=currScale/100}else{currScale=1}currOffsetX=(MaxScreenWidth-m*currScale)/2;currOffsetX=Math.floor(currOffsetX);currOffsetY=(MaxScreenWidth-e*currScale)/2;currOffsetY=Math.floor(currOffsetY);gvctx.clearRect(0,0,320,320);var d,b,n;var c;var a;for(d=0;d<l;d++){for(b=0;b<g;b++){c=null;a=false;n=currMap[d][b];if(n!=kOuter){c=gameImgs[n]}if(n==kGoal){a=true}if(c){drawOneItemAt(b,d,c)}if(currMobileMap[d][b]>0){n=currMobileMap[d][b];drawOneItemAt(b,d,gameImgs[n]);if(n==kBox&&a){drawOneItemAt(b,d,gameImgs[kCheckMark])}}}}drawLevel()}function movePlayer(c,a){var d=playerLoc.getX();var b=playerLoc.getY();var h=d+c;var f=b+a;var g,e;if(currMap[f][h]==kWall){return}if(currMobileMap[f][h]==kBox){g=h+c;e=f+a;if(currMap[e][g]==kWall){return}if(currMobileMap[e][g]==kBox){return}currMobileMap[e][g]=kBox;currMobileMap[f][h]=-1;drawOneItemAt(g,e,gameImgs[kBox]);drawOneItemAt(h,f,gameImgs[currMap[f][h]]);if(currMap[f][h]==kGoal){nSettled--}if(currMap[e][g]==kGoal){drawOneItemAt(g,e,gameImgs[kCheckMark]);nSettled++}}currMobileMap[b][d]=-1;drawOneItemAt(d,b,gameImgs[currMap[b][d]]);currMobileMap[f][h]=kPlayer;playerLoc.setXY(h,f);drawOneItemAt(h,f,gameImgs[kPlayer]);if(nSettled==nGoals){if(currLevel==maxLevel){if(langJpn){window.alert("全てクリアー！")}else{window.alert("All cleared!")}return}if(langJpn){window.alert("クリアー！")}else{window.alert("Cleared!")}gotoLevel(1)}}function gotoLevel(a){if(a<0&&currLevel==1){return}if(a>0&&currLevel==maxLevel){return}currLevel+=a;if(currLevel<1){currLevel=1}if(currLevel>maxLevel){currLevel=maxLevel}getLevel(currLevel);drawMap();setCookie(CoookieName,currLevel,1000)}function resetGame(){resetProblem();drawMap()}var touchSX,SY;var touchEX,EY;function touchStart(a){a.preventDefault();touchSX=a.touches[0].pageX;touchSY=a.touches[0].pageY}function touchMove(a){a.preventDefault();touchEX=a.targetTouches[0].pageX;touchEY=a.targetTouches[0].pageY}function touchEnd(e){e.preventDefault();var c=touchEX-touchSX;var d=touchEY-touchSY;var f=Math.abs(c);var b=Math.abs(d);var a;if(f==0){a=2/Math.PI}else{a=Math.atan(b/f)}var g=a*57.29578;if(c>=0&&d<0){g=360-g}else{if(c<0&&d<0){g=180+g}else{if(c<0&&d>=0){g=180-g}}}if(g>=340||g<=20){movePlayer(1,0)}else{if(g>=60&&g<=120){movePlayer(0,1)}else{if(g>=160&&g<=200){movePlayer(-1,0)}else{if(g>=250&&g<=290){movePlayer(0,-1)}}}}}function gotoHome(){location.href="../index.html"}function showHelp(){if(langJpn){window.open("helpj.html","Help","scrollbars=yes")}else{window.open("help.html","Help","scrollbars=yes")}}window.onload=function(){var b=navigator.language;if(b.toLowerCase()=="ja-jp"){langJpn=1}var a=document.getElementById("gview");a.addEventListener("touchstart",touchStart,false);a.addEventListener("touchmove",touchMove,false);a.addEventListener("touchend",touchEnd,false);gvctx=document.getElementById("gview").getContext("2d");setupGame();startGame()};