推箱子游戏(共31关)

来源:互联网 发布:hadoop编程用什么语言 编辑:程序博客网 时间:2024/05/05 08:12

box.htm:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>推箱子游戏</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="dolphin">
<META NAME="Keywords" CONTENT="推箱子,搬运工,Box">
<META NAME="Description" CONTENT="推箱子游戏">
<STYLE TYPE="text/css">
<!-- 
.Ground
{background-color: #007300}
.Wall
{border:1px outset #cccccc;background-color:#cccccc;z-index:0;background: url(wall.bmp)}
.Aim
{background-color:#FFFFFF;filter:Alpha(opacity=100,FinishOpacity=5,Style=3);z-index:0}
.Box
{background-color:#FFFFFF;filter:Alpha(opacity=5,FinishOpacity=100,Style=3);z-index:1}
.Man
{background-color:red;z-index:1;filter:filpv}
TD
{font-size:12px;}
// -->
</STYLE>
<SCRIPT LANGUAGE="JavaScript" SRC="level_dat.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript" SRC="box.js"></SCRIPT>
</HEAD>

<BODY>
<TABLE width="80%" align=center>
<TR>
 
<TD valign=top>
  箱子移动:
<input id=BoxMoveInfo readonly size=5> 步<br>
  人
&nbsp;&nbsp;动:<input id=ManMoveInfo readonly size=5> 步<br>
  当前关数:
<input id=LevelInfo readonly size=5> 关
  
<p>
   
<input type=button value='撤销移动' onclick='UnDo()'><br><br>
   
<input type=button value='重复移动' onclick='ReDo()'><br><br>
   
<input type=button value='读取进度' onclick='LoadLevel()'><br><br>
   
<input type=button value='保存进度' onclick='SaveLevel()'><br><br>
   
<input type=button value='选择关数' onclick='CustomLevel()'><br><br>
  
</p>
  
<textarea id=Info rows=20 style="display:none"></textarea>
 
</TD>
 
<TD valign=top><span id=Base style='position:absolute;overflow:hidden'></span></TD>
</TR>
</TABLE>
</BODY>
</HTML>

 

box.js:

var useLevel = 0;

function window.onload()
{
 
//useLevel = GetCookie("Level");
 ReadMap(useLevel);
 document.body.scroll
='no';
 function document.onkeydown()
{
  
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.oncontextmenu()
{
  
event.returnValue = false;
 }


 window.focus();
 Base.focus();
}


 

function ReadMap(level)
{
 init();
 Base.innerHTML 
= '';
 var w
=Map[level][0].length*MapW
 var h
=Map[level].length*MapW
 Base.style.width 
= w;
 Base.style.height 
= h;
 Base.style.left 
= (w>document.body.clientWidth)?0:(document.body.offsetWidth-w)/2;
 
//Base.style.top = 10;
 for(var y=0;y<Map[level].length;y++){
  MainMap[y] 
= [];
  
for(var x=0;x<Map[level][y].length;x++){
   MainMap[y][x] 
= Map[level][y].charAt(x);
   
if(MainMap[y][x]=='W') iHtml(x,y,'Wall');
   
else{
    iHtml(x,y,
'Ground');
    
switch(MainMap[y][x]){
     
case '0':iBox(x,y,0);break;
     
case '.':iHtml(x,y,'Aim');break;
     
case '@':iHtml(x,y,'Aim');iBox(x,y,1);BoxCompletes++;break;
     
case '*':iMan(x,y,0);break;
     
case '#':iHtml(x,y,'Aim');iMan(x,y,1);break;
    }

   }

  }

 }

}


function iHtml(x,y,k)
{
 Base.insertAdjacentHTML(
"beforeEnd","<span style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+"' class='"+k+"' x="+x+" y="+y+">");
}


 

function iBox(x,y,k)
{
 MainMap[y][x] 
= Base.appendChild(document.createElement("<span style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+"' class='Box' complete='"+k+"'>"));
 TotalBox
++;
}


function iMan(x,y,k)
{
 Man 
= Base.appendChild(document.createElement("<img alt='Man' src='boxman.bmp' style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+";' class='Man'>"));
 Man.x 
= x
 Man.y 
= y
 MainMap[y][x] 
= (k==0)?' ':'.';
}


function init()
{
 MainMap 
= [];

 RePlayTime 
= 10;
 MapW 
= MapH = 30;
 PushScrollNo 
= 30;
 BoxCompletes 
= 0;
 TotalBox 
= 0;

 Timer 
= null;
 canMove 
= true
 BoxMoves 
= 0;
 Count 
= -1;
 BackRecord 
= [];
 BoxMoveInfo.value 
= 0;
 ManMoveInfo.value 
= 0;
 LevelInfo.value   
= parseInt(useLevel)+1;
}


function Dir(x,y,k)
{
 
if(!canMove) return
 var ManFront 
= MainMap[y+parseInt(Man.y)][x+parseInt(Man.x)];
 
if(ManFront==' ' || ManFront=='.')
  
if(k!=null)Move1(x,y,k.toLowerCase());
  
else Move1(x,y);
 
else{
  
if(typeof(ManFront)=='object'){
   var ManFrontFront 
= MainMap[2*y+parseInt(Man.y)][2*x+parseInt(Man.x)];
   
if(ManFrontFront == ' '){
    
if(k!=null)Move1(x,y,k.toUpperCase());
    
else Move1(x,y);Move2(ManFront,x,y);
   }

   
else if(ManFrontFront == '.'){
    
if(k!=null)Move1(x,y,k.toUpperCase());
    
else Move1(x,y);Move3(ManFront,x,y);
   }

   BoxMoves
++
  }

 }

}


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();return;}
 }

 obj.complete 
= 1;
}


function UnDo()
{
 
if(Count >= 0){
  canMove 
= true
  
switch(BackRecord[Count]){
   
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
   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();return;}
  }

  
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;
 
if(useLevel == Map.length){
  alert(
"恭喜!!! 您已经全部通关!");
 }

 
else{
  alert(
"恭喜!!!您过了第 "+ (useLevel+1+" 关!");
  useLevel
++
  ReadMap(useLevel);
  window.focus();
  Base.focus();
  BoxMoves 
= -1;
 }

}



function Run()
{
 var temp 
= Info.value;
 
if(temp == '')return;
 ReadMap(useLevel);
 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;
}


function GetCookie(sName)
{
 var aCookie 
= document.cookie.split("");
 
for (var i=0; i < aCookie.length; i++){
  var aCrumb 
= aCookie[i].split("=");
  
if (sName == aCrumb[0]) 
   
return unescape(aCrumb[1]);
 }

 
return 0;
}


function SetCookie(sName, sValue)
{
 dt 
= new Date();
 dt.setTime(dt.getTime()
+(365*24*3600*1000));
 document.cookie 
= sName + "=" + escape(sValue) + "; expires=" + dt.toGMTString();
}


function SaveLevel()
{
 SetCookie(
"Level",useLevel);
 SetCookie(
"Move",Info.value);
 tmp 
= useLevel+1;
 alert(
"保存第 "+ tmp +" 关数据成功!");
}


function LoadLevel()
{
 useLevel 
= GetCookie("Level");
 ReadMap(parseInt(useLevel));
 window.focus();
 Base.focus();
 Info.value 
= GetCookie("Move");
 Run();
 tmp 
= parseInt(useLevel)+1;
 alert(
"成功载入第 "+ tmp +" 关数据!");
}


function CustomLevel()
{
 totallevel 
= Map.length;
 tmp 
= useLevel+1;
 var level 
= window.prompt("总共有 "+ totallevel +" 关,请选择:",tmp);
 
if(level==nullreturn;
 
if(parseInt(level) != "NaN" && level<=totallevel){
  useLevel 
= level - 1;
  ReadMap(useLevel);
  window.focus();
  Base.focus();
 }

 
else{
  alert(
"选择关数出错!!!");
 }

}

level_dat.js:
var Map 
= [];

Map[
0= [
'WWWWWWWW',
'WWWW *WW',
'WW  0 WW',
'WW W WWW',
'W  W W.W',
'W W  0.W',
'W 0   .W',
'WWWWWWWW'
];
Map[
1= [
'    WWWWW',
'    W  *W',
'WWW W00 W',
'W.W W 0 W',
'W.WWW WWW',
'W.    WW ',
'W  W   W ',
'WWWW   W ',
'   WWWWW '
];
Map[
2= [
'      WWWWW',
'WWWWWWW   W',
'W   W  0  W',
'W   0  W..W',
'WW0   0W..W',
'W *0W0 W..W',
'W      WWWW',
'WWWWWWWW   '
];
Map[
3= [
' WWWWWWW ',
' W *...W ',
' W   WWWW',
'WWW0    W',
'W   W0W W',
'W 0 W   W',
'W   WWWWW',
'WWWWW    '
];
Map[
4= [
' WWWWWWWWWWW',
' W   WW  W W',
' W   0   W W',
' W0 WWW 0W W',
' W W...W W W',
'WW W...W W W',
'W*0  0  0 WW',
'W   W     W ',
'WWWWWWWWWWW '
];
Map[
5= [
' WWWWWW   ',
' W*   WWW '
'WW WW0 .WW',
'W   0 0..W',
'WW 0 0 ..W',
' W  WWWWWW',
' WWWW     '
];

Map[
6= [
'WWWWW    ',
'WW  .WWWW',
'W  .0.0 W',
'W 0W W0*W',
'W  . .0 W',
'W 0W0WWWW',
'W  . .W  ',
'WWWWWWW  '
];
Map[
7= [
'  WWWWWWW ',
'WWW     W ',
'W   WWW0WW',
'W 0  0 * W',
'WW 0 W.. W',
' W   W..WW',
' WWWWWWWW '
];
Map[
8= [
'WWWWWWWWWWW',
'W*        W',
'W WWWW WW W',
'W . 0.0 W W',
'W W 0.0 . W',
'W WW WWWW W',
'W         W',
'WWWWWWWWWWW'
];
Map[
9= [
'     WWWWW  ',
'WWWW W   WW ',
'W  WWW W  W ',
'W 0.....W WW',
'W  WW...0  W',
'W    0WW0W W',
'W 0W0   0  W',
'WW * WWW0W W',
' WWWWW W   W',
'       WWWWW'
];
Map[
10= [
'   WWWWWWWWWW',
'   W        W',
'  WW    W.W W',
'  W .W0 0 W W',
'  W W     W W',
'  W W 0 0W. W',
'WWW W W    WW',
'W  *  .WWW W ',
'W   WW     W ',
'WWWWWWWWWWWW '
];
Map[
11= [
'WWWWWWWWWWWWWWWW',
'W 0  ...       W',
'W*0 W...000000 W',
'W 0  ...       W',
'WWWWWWWWWWWWWWWW'
];
Map[
12= [
'    WWWWW          ',
'    W   W          ',
'    W0  W          ',
'  WWW  0WW         ',
'  W  0 0 W         ',
'WWW W WW W   WWWWWW',
'W   W WW WWWWW  ..W',
'W 0  0          ..W',
'WWWWW WWW W*WW  ..W',
'    W     WWWWWWWWW',
'    WWWWWWW        '
];
Map[
13= [
'WWWWWW  ',
'W    W  ',
'W 000WWW',
'W ..0* W',
'WW...0 W',
' W  WWWW',
' WWWW   '
];
Map[
14= [
' WWWWW  ',
' W*  WWW',
'WW .0  W',
'W .0.  W',
'W 00.WWW',
'WW   W  ',
' WWWWW  '
];
Map[
15= [
'WWWWWWW   ',
'W *W  WW  ',
'W  W   W  ',
'W 0 0 0W  ',
'W  WW0 W  ',
'WW W 0 WWW',
' W  .....W',
' WWWWWWWWW'
];
Map[
16= [
'   WWWWWW',
'   W    W',
'  WW000 W',
'WWW..W  W',
'W 0..  WW',
'W     *W ',
'WWWWWWWW '
];
Map[
17= [
'  WWWWWW   ',
'  W... W   ',
'  W....WWWW',
'WWW 0WWW  W',
'W 00  0 0 W',
'W    0 0  W',
'W   WWW  *W',
'WWWWW WWWWW'
];
Map[
18= [
'     WWWW      ',
'WWWWWW  W      ',
'W  W    W      ',
'W    00 W      ',
'W  W  W0WWWWWWW',
'WW0WWW...0.W  W',
'W     0.0W.W  W',
'W   W W0.W.W  W',
'WWWWW W....00 W',
'    W WW W00* W',
'    W    W    W',
'    WWWWWWWWWWW'
];
Map[
19= [
' WWWWWWWW',
' W      W',
' W  00W W',
' W W... W',
'WW 0...WW',
'W 0 WW W ',
'W  0  0W ',
'W*  W  W ',
'WWWWWWWW '
];
Map[
20= [
'  WWWW  ',
'  W..W  ',
' WW. WW ',
' W.0  W ',
'WW  0 WW',
'W 00W* W',
'W      W',
'WWWWWWWW'
];
Map[
21= [
'  WWWW   ',
'  W  W   ',
'  W  W   ',
'WWW .WWWW',
'W  .0   W',
'W*0.. 0 W',
'WWW 0WWWW',
'  W  W   ',
'  WWWW   '
];
Map[
22= [
'        WWWWW    ',
'        W   W    ',
'       WW  0WWW  ',
'      WWW0    W  ',
'WWWWWWW 0  0  WWW',
'W..  WW WWW W   W',
'W.. *      0  0 W',
'W..  W WWWW WWWWW',
'WWWWWW      W    ',
'     WWWWWWWW    '
];
Map[
23= [
'WWWWWWWWWW',
'W       WW',
'W 0W0W   W',
'W.0.  00 W',
'W...WWW* W',
'WWWWWWWWWW'
];
Map[
24= [
'  WWWWWWWWWWWW',
'WWW     W  ..W',
'W  0  0 W  ..W',
'W  WWWW0W  ..W',
'W  WW*     ..W',
'WW 0  W W  ..W',
'W 0 0WW WWWWWW',
'W 0 0 0  0 W  ',
'W     W    W  ',
'WWWWWWWWWWWW  '
];
Map[
25= [
'  WWWWWW   ',
'  W   WWWWW',
'  W  .  0 W',
'  WWW.. 0*W',
'  WWW00 0 W',
'WWW .0. WWW',
'W  0...0WW ',
'W   WW.0 W ',
'WWWWWW   W ',
'     WWWWW '
];
Map[
26= [
'WWWWWW   ',
'W*  .WWWW',
'W  000  W',
'W.WW.WW.W',
'W   0   W',
'WW W.0  W',
' W   WWWW',
' WWWWW   '
];
Map[
27= [
'WWWWWWWWWW  ',
'W    .   WWW',
'W  WW0WW   W',
'WW0. . .0* W',
' W WW0WW0 WW',
' W   .    W ',
' WWWWWWWWWW '
];
Map[
28= [
' WWWWWW ',
' W.. .W ',
' W.0 .W ',
'WW0  WWW',
'W 0  0 W',
'W WW0W W',
'W  *   W',
'WWWWWWWW'
];
Map[
29= [
'    WWWWW  ',
'    W   W  ',
'WWWWW0.0WWW',
'W   0 .   W',
'W * WW0WW W',
'WWWWW .   W',
'    W .   W',
'    W   WWW',
'    W   W  ',
'    WWWWW  '
];

Map[
30= [
'WWWWWWWWWWW',
'W    W*   W',
'W 00000 0 W',
'W         W',
'WWWWW WWWWW',
'   W  .W   ',
'   W  .W   ',
'   W...W   ',
'   W  .W   ',
'   WWWWW   '
];

原创粉丝点击