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 '
];