}
function move1(x,y,k){
if(k != null){
backrecord[++count] = k
backrecord.length = count+1
}
man.x = x+parseint(man.x);
man.y = y+parseint(man.y);
man.style.left = man.x*mapw;
man.style.top = man.y*maph;
}
function move2(obj,x,y){
obj.style.left = (x+man.x)*mapw;
obj.style.top = (y+man.y)*maph;
mainmap[y+parseint(man.y)][x+parseint(man.x)] = obj;
if(obj.complete == 0) mainmap[man.y][man.x]=' ';
else{
mainmap[man.y][man.x] = '.';
boxcompletes --;
}
obj.complete = 0;
}
function move3(obj,x,y){
obj.style.left = (x+man.x)*mapw;
obj.style.top = (y+man.y)*maph;
mainmap[y+parseint(man.y)][x+parseint(man.x)] = obj;
if(obj.complete == 1) mainmap[man.y][man.x]='.';
else{
mainmap[man.y][man.x] = ' ';
if(++boxcompletes == totalbox) owin();
}
obj.complete = 1;
}
function undo(){
if(count >= 0){
canmove = true
switch(backrecord[count]){
//not object
case 'l':move1(1,0);break;//left -> right
case 'u':move1(0,1);break;//up -> down
case 'r':move1(-1,0);break;//right -> left
case 'd':move1(0,-1);break;//down -> up
//object
case 'l':ungo(1,0);break;//left -> right
case 'u':ungo(0,1);break;//up -> down
case 'r':ungo(-1,0);break;//right -> left
case 'd':ungo(0,-1);break;//down -> up
}
iselects(--count)
}
}
function ungo(x,y){
boxmoves--;
var obj = mainmap[-y+parseint(man.y)][-x+parseint(man.x)];
if(mainmap[man.y][man.x]==' '){
if(obj.complete == 0)mainmap[-y+parseint(man.y)][-x+parseint(man.x)]=' ';
else{
mainmap[-y+parseint(man.y)][-x+parseint(man.x)]='.';
boxcompletes --;
}
obj.complete=0
}
else{
if(obj.complete == 0){
mainmap[-y+parseint(man.y)][-x+parseint(man.x)]=' ';
if(++boxcompletes == totalbox) owin();
}
else mainmap[-y+parseint(man.y)][-x+parseint(man.x)]='.';
obj.complete=1
}
obj.style.left = man.x*mapw;
obj.style.top = man.y*maph;
mainmap[man.y][man.x] = obj;
move1(x,y);
}
function redo(){
if(count+1<backrecord.length){
switch(backrecord[++count]){
case 'l': case 'l': dir(-1,0);break;//left
case 'u': case 'u': dir(0,-1);break;//up
case 'r': case 'r': dir(1,0);break;//right
case 'd': case 'd': dir(0,1);break;//down
}
iselects(count)
}
else clearinterval(timer);
}
function owin(){
canmove = false
alert('congratulation! you have pass.')
}
function window.onload(){
readmap(0);
document.body.scroll='no'
function document.onkeydown(){
if(event.ctrlkey){
switch(event.keycode){
case 37:document.body.scrollleft-=pushscrollno;break;//left
case 38:document.body.scrolltop-=pushscrollno;break;//up
case 39:document.body.scrollleft+=pushscrollno;break;//right
case 40:document.body.scrolltop+=pushscrollno;break;//down
}
}
else{
switch(event.keycode){
case 37:dir(-1,0,'l');break;//left
case 38:dir(0,-1,'u');break;//up
case 39:dir(1,0,'r');break;//right
case 40:dir(0,1,'d');break;//down
}
event.returnvalue = false;
info.value = backrecord.join("")
iselects(count)
}
}
function document.onclick(){redo()}
function document.oncontextmenu(){undo();event.returnvalue = false;}
window.focus();
base.focus();
}
function run(){
var temp = info.value;
if(temp == '')return;
readmap(0);
backrecord=temp.split("")
timer = setinterval(redo,replaytime)
}
function iselects(x){
var irange = info.createtextrange()
irange.collapse(true)
irange.movestart("character",x)
irange.moveend("character",1)
irange.select()
boxmoveinfo.value = boxmoves;
manmoveinfo.value = x+1;
}
</script>