由于晚上回家没事都在地铁里玩手机推箱子游戏,玩的多了就想自己写着玩玩.游戏已经写了有段时间了。欢迎高手指导(顺便借贵宝地推荐下本人的个人网站[http://www.xingfu999.com.cn[/url] )
游戏操作:按键盘 上下左右键 把箱子(黄色方形)推到相应的位置(红色圆心)即完成任务! 完整代码在附件中下载
/**
* @date 2009-08-05
* @author luoyouhua
* */
var D = document;
var map = {
map_one:["OOOOOOOOOO","OWWWWWWOOO","OWOOGTWWOO","OWOOOBGWOO", "OWWWDWOWOO","WWOOOOOWOO","WOOBOOWWOO","WOOOWWWOOO","WWWWWOOOOO","OOOOOOOOOO"],
map_two:["OOOOOOOOOO","OWWWWOOOOO","OWTOWOOOOO","OWOOWOOOOO","WWGOWWWWOO","WOBBGOGWOO","WOOBOWWWOO","WWWOOWOOOO","OOWWWWOOOO","OOOOOOOOOO"],
map_three:["OOOOOOOOOO","OWWWWWOOOO","OWGOOWOOOO","OWOWOWWWOO", "OWODBOOWOO","OWOOBGOWOO","OWOOTWWWOO","OWWWWWOOOO","OOOOOOOOOO","OOOOOOOOOO"],
map_four:["OOOOOOOOOO","OOOWWWWWOO","OOOWOOOWOO","OOOWOWGWOO", "OWWWOOGWOO","OWTOBBOWOO","OWOOGBOWOO","OWWWWWWWOO","OOOOOOOOOO","OOOOOOOOOO"],
map_five:["OOOOOOOOOO", "OWWWWWWOOO","OWOOOTWOOO","OWOBWOWWWO", "OWODOBOOWO","OWOOOWWOWO","OWWGOOGOWO","OOWWOOOWWO","OOOWWWWWWO", "OOOOOOOOOO"]
}
function keyCode(evt){
var evt = window.event?window.event:evt;
return window.event?event.keyCode:evt.which;
}
function each(arr,fn){
for(var i=0;i<arr.length;i++){
fn(arr[i],i);
}
}
function changeCharAt(id,b){
var r = id.split("");var n = r[0];
r[0] = b?--n:++n;
return topId = r.join("");
}
function setClassName(div,n){
div.className = n;
}
function removeAll(t){
t.innerHTML="";
}
function getClassName(p){
switch(p){
case "W"://墙壁
return "wall";
break;
case "O": //通道
return "hall";
break;
case "T"://推手
return "push";
break;
case "B"://箱子
return "box";
break;
case "G"://目标
return "target";
break;
case "D"://到达目标
return "done";
break;
}
}
function Game(t){
var T = this;
T.target = t;
T.currentDiv = null;
T.amount = 0;
T.targetAmount = 0;
T.m = map.map_one;
T.setMap = function(m){if(m) T.m = map[m];}
T.initMap = function(){
removeAll(T.target);
var f = document.createDocumentFragment();
each(T.m,function(e,i){
var arr = e.split("");
each(arr,function(p,j){
var div = D.createElement("DIV");
div.className=getClassName(p);
T.initCell(div,p,i+""+j);
f.appendChild(div);
T.sets(p,div);
});
});
T.target.appendChild(f);
};
T.sets = function(p,div){
switch(p){
case "T"://推手
T.currentDiv = div;
break;
case "G"://目标
T.amount++
break;
case "D"://到达目标
T.amount++
T.targetAmount++;
break;
}
}
/**=====================initialize div attrib===================*/
T.initCell = function(div,p,id){
div.id = id;
T.intPass(div,p);//initialize pass attrib
T.intIsTar(div,p); //initialize target attrib
T.intIsEmpty(div,p); //initialize empty attrib
};
T.intPass = function(div,p){
var pass = (p=="W")?"false":"true";
div.setAttribute("pass",pass)
};
T.intIsTar = function(div,p){
var isTar = ((p=="G")||(p=="D"))?"true":"false";
div.setAttribute("isTar",isTar);
};
T.intIsEmpty = function(div,p){
var isEmpty = (p=="O"||p=="G"||p=="T")?"true":"false";
div.setAttribute("isEmpty",isEmpty);
};
/**============get top bottom previous next div========================*/
T.previousDiv = function(div){
return div.previousSibling;
};
T.nextDiv = function(div){
return div.nextSibling;
};
T.topDiv = function(div){
if(div){
var topId = changeCharAt(div.id,true);
return D.getElementById(topId);
}
};
T.bottomDiv = function(div){
if(div){
var buttomId = changeCharAt(div.id,false);
return D.getElementById(buttomId);
}
}
/**==================set div type===========================*/
T.setBox = function(div){setClassName(div,"box");};
T.setPush = function(div){setClassName(div,"push");}
T.setTarget = function(div){setClassName(div,"target");}
T.setHall = function(div){setClassName(div,"hall");}
T.setDone = function(div){setClassName(div,"done");}
T.setEmptyDiv = function(div){
if(!div)return;
var tar = div.getAttribute("isTar");
div.setAttribute("isEmpty","true");
"true"==tar?T.setTarget(div):T.setHall(div);
};
T.fullDiv = function(div,fromDiv){
if(!div)return;
div.setAttribute("isEmpty","false");
var isTar = div.getAttribute("isTar");
var fromTar = fromDiv.getAttribute("isTar");
if("true"==isTar){
T.setDone(div);//推到目标点
T.targetAmount++;
}else{
T.setBox(div);
}
if("true"==fromTar){//离开目标点
T.targetAmount--;
}
}
/**==================on keypassdown event==========================*/
T.keyPassDown = function(evt){
var code = keyCode(evt);
var type = T.getMoveType(code);
if(type!=null){
var targetDiv = T.getTargetDiv(T.currentDiv,type);
if(targetDiv){
if(T.isPass(targetDiv)){
if(T.isEmpty(targetDiv)){//move push div
T.movePush(targetDiv);
}else{//push box
T.pushBox(targetDiv,type);
}
}
}
}
};
T.getMoveType = function(code){
if(code==38||code==87){
return "UP";
}else if(code==40||code==83){
return "DOWN";
}else if(code==37||code==65){
return "LEFT";
}else if(code==39||code==68){
return "RIGHT";
}else{
return null;
}
};
T.getTargetDiv = function(div,type){
switch(type){
case "UP":
return T.topDiv(div);
case "DOWN":
return T.bottomDiv(div);
case "LEFT":
return T.previousDiv(div);
case "RIGHT":
return T.nextDiv(div);
default:
return null;
}
};
T.pushBox = function(boxDiv,type){
var nextDiv = T.getTargetDiv(boxDiv,type);
if(nextDiv){
if(T.isPass(nextDiv)&&T.isEmpty(nextDiv)){
T.fullDiv(nextDiv,boxDiv);
T.movePush(boxDiv);
if(T.amount==T.targetAmount){
alert("推箱子成功!");
}
}
}
};
T.movePush = function(targetDiv){
T.setPush(targetDiv);
T.setEmptyDiv(T.currentDiv);
T.currentDiv = targetDiv;
};
T.isPass = function(div){return div.getAttribute("pass")=="true";}
T.isEmpty = function(div){return div.getAttribute("isEmpty")=="true";}
}
分享到:
相关推荐
推箱子游戏,作为一款经典的逻辑益智游戏,其在网页上的实现主要依赖于JavaScript(JS)编程语言。JS是Web开发中的重要脚本语言,它主要用于处理网页的动态内容和交互性。在这个“js推箱子网页小游戏源代码.zip”...
本篇文章将针对JS初学者,详细介绍如何使用JavaScript语言来实现一款推箱子游戏,同时探讨其背后的流程结构和版本迭代。 一、游戏规则与流程结构 推箱子游戏的基本规则是:玩家控制一个角色,在一个有障碍物和箱子...
JS实现推箱子小游戏——源码 第一步布局 1.设置盒子元素 <!-- 功能键 --> 自动行走"> 上一步"> 下一关"> 上一关"> <!-- 游戏区域 --> <div id="warp"></div> 2.给盒子设置相关的样式 * { margin: ...
在推箱子游戏中,JavaScript的主要任务包括: 1. 游戏状态管理:记录玩家位置、箱子位置、墙壁位置以及关卡完成情况。 2. 事件监听:响应用户的键盘输入,控制角色移动。 3. 渲染游戏画面:根据游戏状态更新Canvas...
《JavaScript实现的推箱子游戏详解》 推箱子游戏,源于经典的逻辑益智游戏,以其巧妙的关卡设计和挑战性深受玩家喜爱。如今,我们可以通过JavaScript这一强大的前端编程语言将其移植到网页上,让游戏体验更加便捷。...
推箱子游戏,作为一种经典的逻辑益智游戏,深受玩家喜爱,其设计原理和图像素材对于游戏开发者来说至关重要。在这个压缩包中,包含了制作推箱子游戏所需的各类图像资源,包括箱子图、背景图和人物图,这些都是构成...
在这个项目中,FPGA被用来创建一个硬件级别的游戏引擎,执行推箱子游戏的逻辑运算,这可能包括游戏规则的检查、玩家动作的处理以及游戏状态的更新。 推箱子游戏,又称“ Sokoban”,是一个二维平面的益智游戏,玩家...
本文详细介绍了基于FPGA技术实现推箱子游戏的设计与开发流程,通过该案例,阐述了FPGA在游戏设计中的具体应用,并展示了硬件设计与软件编程相结合的开发模式。以下为详细知识点: 1. FPGA与推箱子游戏设计 FPGA...
《H5推箱子小游戏源码解析与开发技术探讨》 推箱子是一款经典的逻辑解谜游戏,自诞生以来就深受玩家喜爱。随着HTML5技术的发展,H5版本的推箱子小游戏应运而生,使得这款游戏可以在网页上直接游玩,无需安装任何...
推箱子游戏,也被称为“ Sokoban ”,是一种经典的逻辑益智游戏,玩家需要操作一个角色在二维网格中推动箱子到指定位置。这个游戏以其简单的规则和复杂的策略性著称,对于编程实现而言,也是一个很好的练习项目。在...
推箱子游戏,又称“ Sokoban”,是一种经典的逻辑益智游戏,玩家需要操作一个角色在二维网格中推动箱子到指定位置。这个游戏以其简单的规则和复杂的解谜性而著名,经常被用于训练人工智能算法。现在,我们将深入探讨...
推箱子游戏,也被称为“ Sokoban ”,是一款经典的逻辑益智游戏,源自20世纪80年代。在这个游戏中,玩家需要操作一个角色(通常是一个小人)在二维网格环境中移动,将箱子推到特定的目标位置。游戏的核心在于,箱子...
推箱子游戏是一款经典的逻辑益智游戏,源自日本的“ Sokoban ”,在全球范围内广受欢迎。基于Visual Studio 2010(VS2010)开发推箱子游戏,可以帮助初学者了解游戏开发的基本流程和相关技术。在这个项目中,我们将...
推箱子游戏源码资源是一个包含了全面开发信息的压缩包,主要针对的是iOS平台。这个资源提供了游戏"推箱子"的完整源代码,旨在帮助开发者学习和理解游戏开发过程,特别是对于移动平台的游戏开发。推箱子游戏,又称为 ...
推箱子小游戏的开发原理ppt, 推箱子游戏功能如下: 游戏运行载入相应的地图,屏幕中出现一个推箱子的工人,其周围是围墙 、人可以走的通道 、几个可以移动的箱子 和箱子放置的目的地 。让玩家通过按上下左右键...
java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 ...
在本文中,我们将深入探讨如何使用Python的Pygame库创建一个自制的推箱子游戏,包括UI设计、关卡设置和游戏逻辑。Pygame是Python的一个模块,它为开发2D游戏提供了一系列强大的功能。 首先,让我们关注Pygame的核心...
《基于Android的推箱子游戏源代码解析》 推箱子游戏,作为一个经典的逻辑益智游戏,深受广大玩家喜爱。在移动互联网时代,将其移植到Android平台上,不仅满足了玩家随时随地游玩的需求,也为开发者提供了丰富的编程...
原生JavaScript推箱子游戏是一种基于逻辑和策略的趣味性编程项目,它利用基本的前端技术实现了一款可自定义关卡的游戏。在这个项目中,主要涉及的知识点包括JavaScript语言基础、DOM操作、事件处理以及二维数组的...