📄 月光软件站 - 编程文档 - script - 推箱子游戏(共31关).htm
字号:
<P> window.focus();<BR> Base.focus();<BR>}</P>
<P> </P>
<P>function ReadMap(level){<BR> init();<BR> Base.innerHTML
= '';<BR> var w=Map[level][0].length*MapW<BR> var
h=Map[level].length*MapW<BR> Base.style.width =
w;<BR> Base.style.height = h;<BR> Base.style.left =
(w>document.body.clientWidth)?0:(document.body.offsetWidth-w)/2;<BR> //Base.style.top
= 10;<BR> for(var
y=0;y<Map[level].length;y++){<BR> MainMap[y] =
[];<BR> for(var
x=0;x<Map[level][y].length;x++){<BR> MainMap[y][x]
=
Map[level][y].charAt(x);<BR> if(MainMap[y][x]=='W')
iHtml(x,y,'Wall');<BR> else{<BR> iHtml(x,y,'Ground');<BR> switch(MainMap[y][x]){<BR> case
'0':iBox(x,y,0);break;<BR> case
'.':iHtml(x,y,'Aim');break;<BR> case <A
href="mailto:'@':iHtml(x,y,'Aim');iBox(x,y,1);BoxCompletes++;break">'@':iHtml(x,y,'Aim');iBox(x,y,1);BoxCompletes++;break</A>;<BR> case
'*':iMan(x,y,0);break;<BR> case
'#':iHtml(x,y,'Aim');iMan(x,y,1);break;<BR> }<BR> }<BR> }<BR> }<BR>}</P>
<P>function
iHtml(x,y,k){<BR> Base.insertAdjacentHTML("beforeEnd","<span
style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+"'
class='"+k+"' x="+x+" y="+y+">");<BR>}</P>
<P> </P>
<P>function iBox(x,y,k){<BR> 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+"'>"));<BR> TotalBox++;<BR>}</P>
<P>function iMan(x,y,k){<BR> 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'>"));<BR> Man.x = x<BR> Man.y =
y<BR> MainMap[y][x] = (k==0)?' ':'.';<BR>}</P>
<P>function init(){<BR> MainMap = [];</P>
<P> RePlayTime = 10;<BR> MapW = MapH =
30;<BR> PushScrollNo = 30;<BR> BoxCompletes =
0;<BR> TotalBox = 0;</P>
<P> Timer = null;<BR> canMove = true<BR> BoxMoves =
0;<BR> Count = -1;<BR> BackRecord =
[];<BR> BoxMoveInfo.value = 0;<BR> ManMoveInfo.value =
0;<BR> LevelInfo.value =
parseInt(useLevel)+1;<BR>}</P>
<P>function Dir(x,y,k){<BR> if(!canMove) return<BR> var
ManFront =
MainMap[y+parseInt(Man.y)][x+parseInt(Man.x)];<BR> if(ManFront=='
' ||
ManFront=='.')<BR> if(k!=null)Move1(x,y,k.toLowerCase());<BR> else
Move1(x,y);<BR> else{<BR> if(typeof(ManFront)=='object'){<BR> var
ManFrontFront =
MainMap[2*y+parseInt(Man.y)][2*x+parseInt(Man.x)];<BR> if(ManFrontFront
== '
'){<BR> if(k!=null)Move1(x,y,k.toUpperCase());<BR> else
Move1(x,y);Move2(ManFront,x,y);<BR> }<BR> else
if(ManFrontFront ==
'.'){<BR> if(k!=null)Move1(x,y,k.toUpperCase());<BR> else
Move1(x,y);Move3(ManFront,x,y);<BR> }<BR> BoxMoves++<BR> }<BR> }<BR>}</P>
<P>function Move1(x,y,k){<BR> if(k !=
null){<BR> BackRecord[++Count] =
k<BR> BackRecord.length =
Count+1<BR> }<BR> Man.x =
x+parseInt(Man.x);<BR> Man.y =
y+parseInt(Man.y);<BR> Man.style.left =
Man.x*MapW;<BR> Man.style.top = Man.y*MapH;<BR>}</P>
<P>function Move2(obj,x,y){<BR> obj.style.left =
(x+Man.x)*MapW;<BR> obj.style.top =
(y+Man.y)*MapH;<BR> MainMap[y+parseInt(Man.y)][x+parseInt(Man.x)]
= obj;<BR> if(obj.complete == 0) MainMap[Man.y][Man.x]='
';<BR> else{<BR> MainMap[Man.y][Man.x] =
'.';<BR> BoxCompletes
--;<BR> }<BR> obj.complete = 0;<BR>}</P>
<P>function Move3(obj,x,y){<BR> obj.style.left =
(x+Man.x)*MapW;<BR> obj.style.top =
(y+Man.y)*MapH;<BR> MainMap[y+parseInt(Man.y)][x+parseInt(Man.x)]
= obj;<BR> if(obj.complete == 1)
MainMap[Man.y][Man.x]='.';<BR> else{<BR> MainMap[Man.y][Man.x]
= ' ';<BR> if(++BoxCompletes == TotalBox)
{oWin();return;}<BR> }<BR> obj.complete = 1;<BR>}</P>
<P>function UnDo(){<BR> if(Count >=
0){<BR> canMove =
true<BR> switch(BackRecord[Count]){<BR> case
'l':Move1(1,0);break;//left -> right<BR> case
'u':Move1(0,1);break;//up -> down<BR> case
'r':Move1(-1,0);break;//right -> left<BR> case
'd':Move1(0,-1);break;//down -> up<BR> case
'L':UnGo(1,0);break;//left -> right<BR> case
'U':UnGo(0,1);break;//up -> down<BR> case
'R':UnGo(-1,0);break;//right -> left<BR> case
'D':UnGo(0,-1);break;//down ->
up<BR> }<BR> iSelects(--Count)<BR> }<BR>}</P>
<P>function UnGo(x,y){<BR> BoxMoves--;<BR> var obj =
MainMap[-y+parseInt(Man.y)][-x+parseInt(Man.x)];<BR> if(MainMap[Man.y][Man.x]=='
'){<BR> if(obj.complete ==
0)MainMap[-y+parseInt(Man.y)][-x+parseInt(Man.x)]='
';<BR> else{<BR> MainMap[-y+parseInt(Man.y)][-x+parseInt(Man.x)]='.';<BR> BoxCompletes
--;<BR> }<BR> obj.complete=0<BR> }<BR> else{<BR> if(obj.complete
== 0){<BR>
MainMap[-y+parseInt(Man.y)][-x+parseInt(Man.x)]='
';<BR> if(++BoxCompletes == TotalBox)
{oWin();return;}<BR> }<BR> else
MainMap[-y+parseInt(Man.y)][-x+parseInt(Man.x)]='.';<BR> obj.complete=1<BR> }<BR> obj.style.left
= Man.x*MapW;<BR> obj.style.top =
Man.y*MapH;<BR> MainMap[Man.y][Man.x] =
obj;<BR> Move1(x,y);<BR>}</P>
<P>function
ReDo(){<BR> if(Count+1<BackRecord.length){<BR> switch(BackRecord[++Count]){<BR> case
'l': case 'L': Dir(-1,0);break;//left<BR> case 'u':
case 'U': Dir(0,-1);break;//up<BR> case 'r': case
'R': Dir(1,0);break;//right<BR> case 'd': case 'D':
Dir(0,1);break;//down<BR> }<BR> iSelects(Count);<BR> }<BR> else
clearInterval(Timer);<BR>}</P>
<P>function oWin(){<BR> canMove = false;<BR> if(useLevel
== Map.length){<BR> alert("恭喜!!!
您已经全部通关!");<BR> }<BR> else{<BR> alert("恭喜!!!您过了第
"+ (useLevel+1) +"
关!");<BR> useLevel++; <BR> ReadMap(useLevel);<BR> window.focus();<BR> Base.focus();<BR> BoxMoves
= -1;<BR> }<BR>}</P>
<P><BR>function Run(){<BR> var temp =
Info.value;<BR> if(temp ==
'')return;<BR> ReadMap(useLevel);<BR> BackRecord=temp.split("")<BR> Timer
= setInterval(ReDo,RePlayTime);<BR>}</P>
<P>function iSelects(x){<BR> var iRange =
Info.createTextRange();<BR> iRange.collapse(true);<BR> iRange.moveStart("character",x);<BR> iRange.moveEnd("character",1);<BR> iRange.select();<BR> BoxMoveInfo.value
= BoxMoves;<BR> ManMoveInfo.value = x+1;<BR>}</P>
<P>function GetCookie(sName){<BR> var aCookie =
document.cookie.split("; ");<BR> for (var i=0; i <
aCookie.length; i++){<BR> var aCrumb =
aCookie[i].split("=");<BR> if (sName == aCrumb[0])
<BR> return
unescape(aCrumb[1]);<BR> }<BR> return 0;<BR>}</P>
<P>function SetCookie(sName, sValue){<BR> dt = new
Date();<BR> dt.setTime(dt.getTime()+(365*24*3600*1000));<BR> document.cookie
= sName + "=" + escape(sValue) + "; expires=" +
dt.toGMTString();<BR>}</P>
<P>function
SaveLevel(){<BR> SetCookie("Level",useLevel);<BR> SetCookie("Move",Info.value);<BR> tmp
= useLevel+1;<BR> alert("保存第 "+ tmp +" 关数据成功!");<BR>}</P>
<P>function LoadLevel(){<BR> useLevel =
GetCookie("Level");<BR> ReadMap(parseInt(useLevel));<BR> window.focus();<BR> Base.focus();<BR> Info.value
= GetCookie("Move");<BR> Run();<BR> tmp =
parseInt(useLevel)+1;<BR> alert("成功载入第 "+ tmp +"
关数据!");<BR>}</P>
<P>function CustomLevel(){<BR> totallevel =
Map.length;<BR> tmp = useLevel+1;<BR> var level =
window.prompt("总共有 "+ totallevel +"
关,请选择:",tmp);<BR> if(level==null)
return;<BR> if(parseInt(level) != "NaN" &&
level<=totallevel){<BR> useLevel = level -
1;<BR> ReadMap(useLevel);<BR> window.focus();<BR> Base.focus();<BR> }<BR> else{<BR> alert("选择关数出错!!!");<BR> }<BR>}<BR>level_dat.js:<BR>var
Map = [];</P>
<P>Map[0] = [<BR>'WWWWWWWW',<BR>'WWWW *WW',<BR>'WW 0
WW',<BR>'WW W WWW',<BR>'W W W.W',<BR>'W W 0.W',<BR>'W
0 .W',<BR>'WWWWWWWW'<BR>];<BR>Map[1] =
[<BR>' WWWWW',<BR>' W
*W',<BR>'WWW W00 W',<BR>'W.W W 0 W',<BR>'W.WWW
WWW',<BR>'W. WW ',<BR>'W W W
',<BR>'WWWW W ',<BR>' WWWWW
'<BR>];<BR>Map[2] = [<BR>'
WWWWW',<BR>'WWWWWWW W',<BR>'W W
0 W',<BR>'W 0 W..W',<BR>'WW0
0W..W',<BR>'W *0W0 W..W',<BR>'W
WWWW',<BR>'WWWWWWWW '<BR>];<BR>Map[3] = [<BR>' WWWWWWW
',<BR>' W *...W ',<BR>' W
WWWW',<BR>'WWW0 W',<BR>'W W0W
W',<BR>'W 0 W W',<BR>'W
WWWWW',<BR>'WWWWW '<BR>];<BR>Map[4] = [<BR>'
WWWWWWWWWWW',<BR>' W WW W W',<BR>' W
0 W W',<BR>' W0 WWW 0W W',<BR>' W W...W W W',<BR>'WW
W...W W W',<BR>'W*0 0 0 WW',<BR>'W
W W ',<BR>'WWWWWWWWWWW '<BR>];<BR>Map[5] =
[<BR>' WWWWWW ',<BR>' W* WWW ', <BR>'WW WW0
.WW',<BR>'W 0 0..W',<BR>'WW 0 0 ..W',<BR>' W
WWWWWW',<BR>' WWWW '<BR>];</P>
<P>Map[6] = [<BR>'WWWWW ',<BR>'WW
.WWWW',<BR>'W .0.0 W',<BR>'W 0W W0*W',<BR>'W . .0
W',<BR>'W 0W0WWWW',<BR>'W . .W ',<BR>'WWWWWWW
'<BR>];<BR>Map[7] = [<BR>' WWWWWWW
',<BR>'WWW W ',<BR>'W
WWW0WW',<BR>'W 0 0 * W',<BR>'WW 0 W.. W',<BR>' W
W..WW',<BR>' WWWWWWWW '<BR>];<BR>Map[8] =
[<BR>'WWWWWWWWWWW',<BR>'W*
W',<BR>'W WWWW WW W',<BR>'W . 0.0 W W',<BR>'W W 0.0 . W',<BR>'W WW
WWWW W',<BR>'W
W',<BR>'WWWWWWWWWWW'<BR>];<BR>Map[9] =
[<BR>' WWWWW ',<BR>'WWWW W
WW ',<BR>'W WWW W W ',<BR>'W 0.....W WW',<BR>'W
WW...0 W',<BR>'W 0WW0W W',<BR>'W
0W0 0 W',<BR>'WW * WWW0W W',<BR>' WWWWW
W W',<BR>'
WWWWW'<BR>];<BR>Map[10] = [<BR>'
WWWWWWWWWW',<BR>'
W W',<BR>'
WW W.W W',<BR>' W .W0 0 W W',<BR>' W
W W W',<BR>' W W 0 0W. W',<BR>'WWW W
W WW',<BR>'W * .WWW W
',<BR>'W WW W
',<BR>'WWWWWWWWWWWW '<BR>];<BR>Map[11] =
[<BR>'WWWWWWWWWWWWWWWW',<BR>'W 0
... W',<BR>'W*0 W...000000
W',<BR>'W 0 ...
W',<BR>'WWWWWWWWWWWWWWWW'<BR>];<BR>Map[12] =
[<BR>'
WWWWW
',<BR>' W
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -