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> 人 移 动:<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==null) return; 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 ' ];
  
|