无忧脚本 » 经典代码、教程资源库 » js做游戏 --- 推箱子

2003-2-11 12:13 dewin
js做游戏 --- 推箱子

谁可以在20分钟内过了这一关???
我以前就是用这个时间过的。。。


2003-06-11 18:55
增强了代码。

[code]
<!--
Please use "EditPlus" softeare to view this code.
Start   2002-10-02 17:50
Finish  2002-10-15 22:41
Last Edit 2003-06-11 18:55

Copyright(c) 1998-2003 dewin all rights reserved

http://dewin.vze.com
http://dewin.126.com
http://dewin.tk
Power By Dewin
-->
<body>
<style>
.Ground{}
.Floor{}
.Wall{border:2px outset #ADFF2F;background-color:#888888;z-index:0}
.Aim{background-color:#FF69B4;filter:Alpha(opacity=100,FinishOpacity=0,Style=3);z-index:0}
.Box{background-color:#87CEFA;filter:Alpha(opacity=0,FinishOpacity=100,Style=3);z-index:1}
.Man{background-color:red;z-index:1;filter:filpv}
</style>
<textarea id=Info rows=20>rddlllllluurrrDulllddrrRRRRuulDrdLuLDDDldRdrUluuulllluurrrDulllddrrRurDDDlddrruLuuuulullDldRRRurDDDDrddlluRuuuuluulDldRRurDDDDDldRuuuuuurrurrddLLLulDDDDuuuurrurDrdLLLulDDDlDR</textarea><br>
<input type=button value='copy' onclick='Info.select();document.execCommand("Copy")'>
<input type=button value='paste' onclick='Info.focus(),document.execCommand("Paste")'>
<input type=button value='Auto Run' onclick='Run()'><br><br>

Boxes has Moved<br><input id=BoxMoveInfo readonly> Steps<br>
Man has Moved<br><input id=ManMoveInfo readonly> Steps

<span id=Base style='position:absolute;overflow:hidden'></span>
<script>

function init(){
MainMap = [];

RePlayTime = 10 //million second
MapW = MapH = 30;
PushScrollNo = 30;
BoxCompletes = 0;
TotalBox = 0;

Timer = null;
BoxMoves = 0;
Count = -1;
BackRecord = [];
BoxMoveInfo.value = 0;
ManMoveInfo.value = 0;
}

/*
W = Wall
0 = Box
@ = Box on Aim
* = Man
# = Man on Aim
. = Aim
  = Space
*/



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


function ReadMap(k){
init();
Base.innerHTML = '';
var w=Map[k][0].length*MapW
var h=Map[k].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[k].length;y++){
        MainMap[y] = [];
        for(var x=0;x<Map[k][y].length;x++){
                MainMap[y][x] = Map[k][y].charAt(x);
                if(MainMap[y][x]=='W')iHtml(x,y,'Wall');
                else{
                        //if(MainMap[y][x]=="|"){iHtml(x,y,'Floor');MainMap[y][x]=' '}
                        //else iHtml(x,y,'Ground');
                        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' style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+";' x="+x+" y="+y+" class='Man'>"));
MainMap[y][x] = (k==0)?' ':'.';
}

function Dir(x,y,k){
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+parseInt(Man.x))*MapW;//parseInt
obj.style.top = (y+eval(Man.y))*MapH;//eval
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+parseFloat(Man.y))*MapH;//parseFloat
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){
        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':Dir(-1,0);break;//left
                case 'u':Dir(0,-1);break;//up
                case 'r':Dir(1,0);break;//right
                case 'd':Dir(0,1);break;//down
                case 'L':Dir(-1,0);break;//left
                case 'U':Dir(0,-1);break;//up
                case 'R':Dir(1,0);break;//right
                case 'D':Dir(0,1);break;//down
                }
        iSelects(Count)
        }
else clearInterval(Timer);
}




function oWin(){
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>

[/code]

[ 本贴由 dewin 于 2003-6-20 11:57 最后编辑 ]

2003-2-11 12:41 ※潇洒※
不好使啊? 左右键都没反应?

2003-2-11 12:59 dewin
看红色的字。

2003-2-11 13:11 flashsoft
其实是把tab也编码勒
看看就知道

2003-2-11 14:06 ※潇洒※
还是没试出来呢?

2003-2-11 14:31 dewin
我ie6行,不要用te或其他的。

2003-2-11 18:28 ※潇洒※
我也是 ie6, 本地试就正常了

2003-2-12 14:24 剑啸狂沙
为什么我这里不行?
死网管还装的是原装98
唉~~

2003-2-14 15:32 ankeer
不能玩儿

!!!!!!!!!!!

2003-2-17 14:56 cawangjun
按照楼主的要求,在win2k+ie5.5 测试成功。

2003-2-17 14:58 cawangjun
20分钟,时间太长了点。5分钟就够了。

2003-3-14 11:16 xiaobaoshaoxia

2003-3-20 09:05 网上最疯狂
呵呵~我不行~我在破烂网吧上的网~

2003-3-20 20:36 蚊子
不行!!!!!!!

2003-3-22 22:07 52600
看不到啊!

2003-3-28 13:40 leo
这也太简单了

小孩玩的游戏“仓库”-第5关
这个我半分钟搞定

2003-11-22 11:56 边城浪子
Win98 + ie5 呀~~~~哥们!!!!!!唉~~~~~~~~~

2005-9-2 17:55 zqs201
18

哈哈

2005-9-3 19:26 懒的逍遥
楼上的翻旧帖啊。。还灌水。晕了。

2005-9-17 20:21 targetwsa
好东东

2006-8-27 19:56 xjj2000
[code]

<!--
Please use "EditPlus" softeare to view this code.
Start   2002-10-02 17:50
Finish  2002-10-15 22:41
Last Edit 2003-06-11 18:55

Copyright(c) 1998-2003 dewin all rights reserved


Power By Dewin
-->
<body>
<style>
.Ground{}
.Floor{}
.Wall{border:2px outset #ADFF2F;background-color:#888888;z-index:0}
.Aim{background-color:#FF69B4;filter:Alpha(opacity=100,FinishOpacity=0,Style=3);z-index:0}
.Box{background-color:#87CEFA;filter:Alpha(opacity=0,FinishOpacity=100,Style=3);z-index:1}
.Man{background-color:red;z-index:1;filter:filpv}
</style>
<textarea id=Info rows=20>rddlllllluurrrDulllddrrRRRRuulDrdLuLDDDldRdrUluuulllluurrrDulllddrrRurDDDlddrruLuuuulullDldRRRurDDDDrddlluRuuuuluulDldRRurDDDDDldRuuuuuurrurrddLLLulDDDDuuuurrurDrdLLLulDDDlDR</textarea><br>
<input type=button value='copy' onclick='Info.select();document.execCommand("Copy")'>
<input type=button value='paste' onclick='Info.focus(),document.execCommand("Paste")'>
<input type=button value='Auto Run' onclick='Run()'><br><br>

Boxes has Moved<br><input id=BoxMoveInfo readonly> Steps<br>
Man has Moved<br><input id=ManMoveInfo readonly> Steps

<span id=Base style='position:absolute;overflow:hidden'></span>
<script>

function init(){
MainMap = [];

RePlayTime = 10 //million second
MapW = MapH = 30;
PushScrollNo = 30;
BoxCompletes = 0;
TotalBox = 0;

Timer = null;
BoxMoves = 0;
Count = -1;
BackRecord = [];
BoxMoveInfo.value = 0;
ManMoveInfo.value = 0;
}

/*
W = Wall
0 = Box
@ = Box on Aim
* = Man
# = Man on Aim
. = Aim
  = Space
*/



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


function ReadMap(k){
init();
Base.innerHTML = '';
var w=Map[k][0].length*MapW
var h=Map[k].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[k].length;y++){
        MainMap[y] = [];
        for(var x=0;x<Map[k][y].length;x++){
                MainMap[y][x] = Map[k][y].charAt(x);
                if(MainMap[y][x]=='W')iHtml(x,y,'Wall');
                else{
                        //if(MainMap[y][x]=="|"){iHtml(x,y,'Floor');MainMap[y][x]=' '}
                        //else iHtml(x,y,'Ground');
                        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' style='position:absolute;left:"+x*MapW+";top:"+y*MapH+";width:"+MapW+";height:"+MapH+";' x="+x+" y="+y+" class='Man'>"));
MainMap[y][x] = (k==0)?' ':'.';
}

function Dir(x,y,k){
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+parseInt(Man.x))*MapW;//parseInt
obj.style.top = (y+eval(Man.y))*MapH;//eval
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+parseFloat(Man.y))*MapH;//parseFloat
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){
        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':Dir(-1,0);break;//left
                case 'u':Dir(0,-1);break;//up
                case 'r':Dir(1,0);break;//right
                case 'd':Dir(0,1);break;//down
                case 'L':Dir(-1,0);break;//left
                case 'U':Dir(0,-1);break;//up
                case 'R':Dir(1,0);break;//right
                case 'D':Dir(0,1);break;//down
                }
        iSelects(Count)
        }
else clearInterval(Timer);
}




function oWin(){
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>
[/code]

[ 本帖由 xjj2000 最后编辑于 2006-8-27 20:00 ]

2008-1-15 03:06 pizzro
很不错的技术

页: [1]
查看完整版本: js做游戏 --- 推箱子


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.