// Caching picture if (document.images) { none = new Image(); none.src = "img/none.gif"; wall = new Image(); wall.src = ""; man = new Image(); man.src = "img/hd.gif"; manok = new Image(); manok.src = "img/hdok.gif"; paket = new Image(); paket.src = "img/paket.gif"; paketok = new Image(); paketok.src = "img/paketok.gif"; place = new Image(); place.src = "img/place.gif"; } // Arrow keys var left = 37, up = 38, right = 39, down = 40; // Constants var none = none.src, wall = wall.src, man = man.src, manok = manok.src, paket = paket.src, paketok = paketok.src, place = place.src; var noneCode = "0", wallCode = "1", manCode = "5", manokCode = "6", paketCode = "2", paketokCode = "4", placeCode = "3"; // Record all moves var moves = new String(""); // First shot var FirstView = new Array(); // Play solution var IsPlaySolution = false; function getOfs(way) { var ofs = 0; if (way == "r") return ofs+1; if (way == "l") return ofs-1; if (way == "u") return ofs-= X; if (way == "d") return ofs+= X; }; function init() { document.onkeydown = register; function register(e) { if ( (e.keyCode == left) || (e.keyCode == right) || (e.keyCode == up) || (e.keyCode == down) ) { // Check is play now solution if (IsPlaySolution) return false; move(e.keyCode); checkEndGame(); return false; } else { return true; } } }; function isWall(way, poz) { var ofs = 0; ofs = getOfs(way); if ((Level.charAt(poz + ofs)) != wallCode) return false else return true; }; function isPaket(way, poz) { var ofs = 0; ofs = getOfs(way); if (document.images["board"+(poz + ofs)].src.indexOf(paket, 0) == -1) return false; else return true; }; function isPaketOK(way, poz) { var ofs = 0; ofs = getOfs(way); if (document.images["board"+(poz + ofs)].src.indexOf(paketok, 0) == -1) return false; else return true; }; function isPlace(way, poz) { var ofs = 0; ofs = getOfs(way); if ((Level.charAt(poz + ofs)) != placeCode) return false; else return true; }; function getPlace(poz) { if (Level.charAt(poz) == noneCode ) return none; if (Level.charAt(poz) == placeCode ) return place; return none; }; function upKey(key) { document.PlayLevel.allMoves.value++; moves+=key; }; function move(key) { // Move RIGHT if (key == right) { if (isPaket( "r", lastMove) || isPaketOK( "r", lastMove)) { if ((!isWall( "r", lastMove+1)) && (!isPaket("r", lastMove+1)) && (!isPaketOK("r", lastMove+1))) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove++; if (isPlace("r", lastMove-1)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; if (isPlace("r", lastMove)) { //lastEl = place; document.images["board"+(lastMove+1)].src = paketok; } else { document.images["board"+(lastMove+1)].src = paket; //lastEl = none; } upKey("r"); }; return; }; if (!isWall("r", lastMove)) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove++; if (isPlace("r", lastMove-1)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; upKey("r"); } return; }; // Move LEFT if (key == left) { if (isPaket( "l", lastMove) || isPaketOK( "l", lastMove)) { if ((!isWall( "l", lastMove-1)) && (!isPaket("l", lastMove-1)) && (!isPaketOK("l", lastMove-1))) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove--; if (isPlace("l", lastMove+1)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; if (isPlace("l", lastMove)) { //lastEl = place; document.images["board"+(lastMove-1)].src = paketok; } else { document.images["board"+(lastMove-1)].src = paket; //lastEl = none; } upKey("l"); }; return; }; if (!isWall("l", lastMove)) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove--; if (isPlace("l", lastMove+1)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; upKey("l"); } return; }; // Move UP if (key == up) { if (isPaket( "u", lastMove) || isPaketOK( "u", lastMove)) { if ((!isWall( "u", lastMove-X)) && (!isPaket("u", lastMove-X)) && (!isPaketOK("u", lastMove-X))) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove-=X; if (isPlace("u", lastMove+X)) document.images["board"+lastMove].src = manok else document.images["board"+lastMove].src = man; if (isPlace("u", lastMove)) { //lastEl = place; document.images["board"+(lastMove-X)].src = paketok; } else { document.images["board"+(lastMove-X)].src = paket; //lastEl = none; } upKey("u"); }; return; }; if (!isWall("u", lastMove)) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove-=X; if (isPlace("u", lastMove+X)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; upKey("u"); } return; }; // Move DOWN if (key == down) { if (isPaket( "d", lastMove) || isPaketOK( "d", lastMove)) { if ((!isWall( "d", lastMove+X)) && (!isPaket("d", lastMove+X)) && (!isPaketOK("d", lastMove+X))) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove+=X; if (isPlace("d", lastMove-X)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; if (isPlace("d", lastMove)) { //lastEl = place; document.images["board"+(lastMove+X)].src = paketok; } else { document.images["board"+(lastMove+X)].src = paket; //lastEl = none; } upKey("d"); }; return; }; if (!isWall("d", lastMove)) { document.images["board"+lastMove].src = getPlace(lastMove); lastMove+=X; if (isPlace("d", lastMove-X)) document.images["board"+lastMove].src = manok; else document.images["board"+lastMove].src = man; upKey("d"); } return; }; }; function checkEndGame() { for (i = 0; i < Level.length; i++) { if (Level.charAt(i) == placeCode) { // Level is't ready if (document.images["board"+i].src.indexOf(paketok, 0) == -1) return false; }; }; // Level is completed //alert(' Well done :) \r\nYou solved the level for '+moves.length+' moves.'); document.PlayLevel.solution.value = moves; document.PlayLevel.submit(); // resetLevel(); }; var br = 0; function FirstViewOfLevel() { for (i = 0; i < Level.length; i++) { FirstView[i] = document.getElementById("board"+i).src; } }; function resetLevel() { for (i = 0; i < Level.length; i++) { document.getElementById("board"+i).src =FirstView[i]; if (Level.charAt(i) == 4 || Level.charAt(i) == 6) { Level = Level.slice(0,i) + "3" + Level.slice(i+1, Level.length); }; }; lastMove = startPos; document.PlayLevel.allMoves.value = 0; br = 0; moves = ""; IsPlaySolution = false; }; function getKey(k) { if (k == "l") return 37; if (k == "u") return 38; if (k == "r") return 39; if (k == "d") return 40; }; function solutionLevel() { if (solution == "") { alert("Not find solution !"); return; } // Disable key input IsPlaySolution = true; // Disable button document.PlayLevel.btnUndo.disabled = true; document.PlayLevel.btnSolution.disabled = true; document.PlayLevel.btnReset.disabled = true; move(getKey(solution.charAt(br))); br++; if (br < solution.length) setTimeout("solutionLevel()", 100); else { // Enable button document.PlayLevel.btnUndo.disabled = false; document.PlayLevel.btnSolution.disabled = false; document.PlayLevel.btnReset.disabled = false; document.PlayLevel.btnUndo.focus(); } }; function undoMoves() { var movesCopy = moves; resetLevel(); for (i = 0; i < (movesCopy.length-1); i++) { move(getKey(movesCopy.charAt(i))); }; }; function AskBeforeChangeLevel() { if (moves.length <= 0) { return true; } else // All unsaved data will be lost! return confirm(''); };