`
kilometo
  • 浏览: 2606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

处女贴 js推箱子游戏

阅读更多
由于晚上回家没事都在地铁里玩手机推箱子游戏,玩的多了就想自己写着玩玩.游戏已经写了有段时间了。欢迎高手指导(顺便借贵宝地推荐下本人的个人网站[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";}
	
}
3
2
分享到:
评论
1 楼 renjie120 2010-04-14  
不错啊..顶个.

相关推荐

    js推箱子网页小游戏源代码.zip

    推箱子游戏,作为一款经典的逻辑益智游戏,其在网页上的实现主要依赖于JavaScript(JS)编程语言。JS是Web开发中的重要脚本语言,它主要用于处理网页的动态内容和交互性。在这个“js推箱子网页小游戏源代码.zip”...

    js推箱子游戏

    本篇文章将针对JS初学者,详细介绍如何使用JavaScript语言来实现一款推箱子游戏,同时探讨其背后的流程结构和版本迭代。 一、游戏规则与流程结构 推箱子游戏的基本规则是:玩家控制一个角色,在一个有障碍物和箱子...

    JS实现推箱子小游戏——源码

    JS实现推箱子小游戏——源码 第一步布局 1.设置盒子元素 &lt;!-- 功能键 --&gt; 自动行走"&gt; 上一步"&gt; 下一关"&gt; 上一关"&gt; &lt;!-- 游戏区域 --&gt; &lt;div id="warp"&gt;&lt;/div&gt; 2.给盒子设置相关的样式 * { margin: ...

    html5结合javaScript开发推箱子游戏

    在推箱子游戏中,JavaScript的主要任务包括: 1. 游戏状态管理:记录玩家位置、箱子位置、墙壁位置以及关卡完成情况。 2. 事件监听:响应用户的键盘输入,控制角色移动。 3. 渲染游戏画面:根据游戏状态更新Canvas...

    javascript版的推箱子游戏

    《JavaScript实现的推箱子游戏详解》 推箱子游戏,源于经典的逻辑益智游戏,以其巧妙的关卡设计和挑战性深受玩家喜爱。如今,我们可以通过JavaScript这一强大的前端编程语言将其移植到网页上,让游戏体验更加便捷。...

    推箱子游戏素材 箱子图 背景图 人物图

    推箱子游戏,作为一种经典的逻辑益智游戏,深受玩家喜爱,其设计原理和图像素材对于游戏开发者来说至关重要。在这个压缩包中,包含了制作推箱子游戏所需的各类图像资源,包括箱子图、背景图和人物图,这些都是构成...

    FPGA实现推箱子游戏.7z

    在这个项目中,FPGA被用来创建一个硬件级别的游戏引擎,执行推箱子游戏的逻辑运算,这可能包括游戏规则的检查、玩家动作的处理以及游戏状态的更新。 推箱子游戏,又称“ Sokoban”,是一个二维平面的益智游戏,玩家...

    基于FPGA的推箱子游戏设计与实现.pdf

    本文详细介绍了基于FPGA技术实现推箱子游戏的设计与开发流程,通过该案例,阐述了FPGA在游戏设计中的具体应用,并展示了硬件设计与软件编程相结合的开发模式。以下为详细知识点: 1. FPGA与推箱子游戏设计 FPGA...

    H5版本的推箱子小游戏源码

    《H5推箱子小游戏源码解析与开发技术探讨》 推箱子是一款经典的逻辑解谜游戏,自诞生以来就深受玩家喜爱。随着HTML5技术的发展,H5版本的推箱子小游戏应运而生,使得这款游戏可以在网页上直接游玩,无需安装任何...

    c#实现推箱子游戏 推箱子代码

    推箱子游戏,也被称为“ Sokoban ”,是一种经典的逻辑益智游戏,玩家需要操作一个角色在二维网格中推动箱子到指定位置。这个游戏以其简单的规则和复杂的策略性著称,对于编程实现而言,也是一个很好的练习项目。在...

    推箱子游戏代码.zip

    推箱子游戏,又称“ Sokoban”,是一种经典的逻辑益智游戏,玩家需要操作一个角色在二维网格中推动箱子到指定位置。这个游戏以其简单的规则和复杂的解谜性而著名,经常被用于训练人工智能算法。现在,我们将深入探讨...

    推箱子游戏c语言实现

    推箱子游戏,也被称为“ Sokoban ”,是一款经典的逻辑益智游戏,源自20世纪80年代。在这个游戏中,玩家需要操作一个角色(通常是一个小人)在二维网格环境中移动,将箱子推到特定的目标位置。游戏的核心在于,箱子...

    基于VS2010推箱子游戏

    推箱子游戏是一款经典的逻辑益智游戏,源自日本的“ Sokoban ”,在全球范围内广受欢迎。基于Visual Studio 2010(VS2010)开发推箱子游戏,可以帮助初学者了解游戏开发的基本流程和相关技术。在这个项目中,我们将...

    推箱子游戏源码资源

    推箱子游戏源码资源是一个包含了全面开发信息的压缩包,主要针对的是iOS平台。这个资源提供了游戏"推箱子"的完整源代码,旨在帮助开发者学习和理解游戏开发过程,特别是对于移动平台的游戏开发。推箱子游戏,又称为 ...

    第11章 推箱子游戏.ppt

    推箱子小游戏的开发原理ppt, 推箱子游戏功能如下: 游戏运行载入相应的地图,屏幕中出现一个推箱子的工人,其周围是围墙 、人可以走的通道 、几个可以移动的箱子 和箱子放置的目的地 。让玩家通过按上下左右键...

    java小游戏 (源码+视频+文档+ppt) swing推箱子游戏

    java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 (源码+视频+文档+ppt) swing推箱子游戏java小游戏 ...

    Pygame推箱子游戏源码(UI全自制 三关)

    在本文中,我们将深入探讨如何使用Python的Pygame库创建一个自制的推箱子游戏,包括UI设计、关卡设置和游戏逻辑。Pygame是Python的一个模块,它为开发2D游戏提供了一系列强大的功能。 首先,让我们关注Pygame的核心...

    基于android的推箱子游戏的源代码

    《基于Android的推箱子游戏源代码解析》 推箱子游戏,作为一个经典的逻辑益智游戏,深受广大玩家喜爱。在移动互联网时代,将其移植到Android平台上,不仅满足了玩家随时随地游玩的需求,也为开发者提供了丰富的编程...

    原生js推箱子关卡游戏代码.zip

    原生JavaScript推箱子游戏是一种基于逻辑和策略的趣味性编程项目,它利用基本的前端技术实现了一款可自定义关卡的游戏。在这个项目中,主要涉及的知识点包括JavaScript语言基础、DOM操作、事件处理以及二维数组的...

Global site tag (gtag.js) - Google Analytics