网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月10日漏签0天
javascript吧 关注:269,205贴子:906,451
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 36回复贴,共2页
  • ,跳到 页  
<<返回javascript吧
>0< 加载中...

纯Javascript编写推箱子小游戏

  • 只看楼主
  • 收藏

  • 回复
  • Crackkay
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前段时间刚学完一些基础的javascript知识,不知道学以致用,于是请教高人,出了此题目,拿出来分享一下自己的成果。
在线运行:http://crackkay.net/?p=390
以下是HTML代码段:
<html>
<body>
<div id="cell"></div>
<script type="text/javascript" src="dom.jS"></script>
</body>
</html>
以下是Javascript代码段:
function $id(id){return document.getElementById(id)};
function $name(name){return document.getElementsByName(name)};
//定义地图开始
var box =[]
var map1 = [
[0,0,0,1,1,1,0,0,0,0],
[0,0,0,1,4,1,0,0,0,0],
[0,0,0,1,0,1,1,1,1,0],
[0,1,1,1,2,0,2,4,1,0],
[0,1,4,0,2,3,1,1,1,0],
[0,1,1,1,1,2,1,0,0,0],
[0,0,0,0,1,4,1,0,0,0],
[0,0,0,0,1,1,1,0,0,0]
]
var map2 = [
[1,1,1,1,1,0,0,0,0,0],
[1,0,0,0,1,0,0,0,0,0],
[1,0,2,2,1,0,1,1,1,0],
[1,3,2,0,1,0,1,4,1,0],
[1,1,1,0,1,1,1,4,1,0],
[0,1,1,0,0,0,0,4,1,0],
[0,1,0,0,0,1,0,0,1,0],
[0,1,0,0,0,1,1,1,1,0],
[0,1,1,1,1,1,0,0,0,0]
]
box.push(map1);
box.push(map2);
//定义地图结束
//定义游戏配置开始
var gameConfig={
"person":{//定义人物配置
"x":0,
"y":0,
"id":"person"
},
"map" : 0,//定义地图
"endpointNumber":0, /*用来存储当前关卡的终点数目, 见 createGame函数 switch case 4 .*/
"box":{//定义每个div的参数
"x":"50",
"y":"50"
},
"ko" : 0 ,//定义箱子是否在终点上
};
//定义游戏配置结束
//创建游戏开始
function createGame(){
//定义控制整体的div,用于当本关结束后消除上一关的地图。
$id("cell").innerHTML="";
$id("cell").style.position="absolute";
$id("cell").left ="0px";
$id("cell").top = "0px";
//定义控制整体div结束
//创建游戏循环
for(var i=0;i<box[gameConfig.map].length;i++){
for(var j=0;j<box[gameConfig.map][i].length;j++){
var itemdiv = document.createElement("div");
itemdiv.style.width = gameConfig.box.x + "px";
itemdiv.style.height = gameConfig.box.y + "px";
itemdiv.style.left = gameConfig.box.x*j + "px";
itemdiv.style.top = gameConfig.box.y*i + "px" ;
itemdiv.setAttribute("name",i+"_"+j);
itemdiv.style.position="absolute";
$id("cell").appendChild(itemdiv);
switch(box[gameConfig.map][i][j]){
case 0:
itemdiv.style.background = "#000";
//itemdiv.innerHTML="背景";
break;
case 1:
itemdiv.style.background = "#996633";
break;
case 2:
itemdiv.style.background = "yellow";
itemdiv.innerHTML = "箱子";
break;
case 3:
itemdiv.id = gameConfig.person.id;
itemdiv.style.background = "#fff";
itemdiv.innerHTML = "人物";
gameConfig.person.x = j;//设置人物在二维数组的位置
gameConfig.person.y = i;//设置人物在二维数组的位置
break;
case 4:
itemdiv.setAttribute("endPoint","1");//设置终点标识符
itemdiv.style.background = "green";
itemdiv.innerHTML = "终点";
gameConfig.endpointNumber++; //获取每一关的终点数目
}
}
}
};
createGame();
//创建游戏结束
//移动函数开始
function judgeGame(oy,ox,y,x,isperson){
if (gameConfig.ko == gameConfig.endpointNumber) { //用最开始的获取到本关终点数目来对是否本关的箱子都在终点上面进行比较。
alert("游戏结束");
gameConfig.map ++;//控制地图
gameConfig.ko = 0;//设置箱子在终点的变量
gameConfig.endpointNumber=0;//设置终点数目变量
createGame();//调用createGame()
}else{
var original = document.getElementsByName(oy+"_"+ox)[0]; //获取原始的位置。
var target = document.getElementsByName(y+"_"+x)[0];//获取目标div的位置
original.style.top = y * gameConfig.box.y + "px";//设置原始位置的left和top
original.style.left = x *gameConfig.box.x + "px";
target.style.top = oy * gameConfig.box.y + "px";//设置目标位置的left和top
target.style.left = ox * gameConfig.box.x + "px";
original.setAttribute("name",y+"_"+x);//设置原始位置的name属性,互换原始位置和目标位置的name
target.setAttribute("name",oy+"_"+ox);
var tmp = box[gameConfig.map][oy][ox];//设置二维数组,对换原始目标
box[gameConfig.map][oy][ox] = box[gameConfig.map][y][x];
box[gameConfig.map][y][x] = tmp;
if (isperson) {//检测是不是person,如果是,那么就改变游戏配置的person配置
gameConfig.person.y = y;
gameConfig.person.x = x;
};
InspectionEndPoint(original,target,isperson);//调用检测终点函数
}
};
function InspectionEndPoint(original,target,isperson){
if (original.getAttribute("endPoint") == "1" && target.getAttribute("endPoint") == "1") {
//检测原始位置和目标位置的是否具有终点属性,也就是检测是不是站在终点上。如果是,那么就return false返回,因为不需要更改任何的
return false;
};
if (original.getAttribute("endPoint") == "1") { //检测原始是不是站在终点之上,如果是,先移除原始的终点检测属性。并设置目标终点属性,并设置目标颜色为绿色并返回
original.removeAttribute("endPoint");
target.setAttribute("endPoint","1");
target.style.background = "green";
return false;
};
if (target.getAttribute("endPoint") == "1") { //检测目标是不是终点,如果是,先移除目标的终点检测属性,并设置原始终点属性,并叫目标颜色调整为黑色并返回。
original.setAttribute("endPoint","1");
target.removeAttribute("endPoint");
target.style.background = "black";
if (isperson == false) {//检测是不是人物,如果不是,那么可移动的只有箱子,所以这里该增加ko。
gameConfig.ko ++
return false;
};
return false;
};
};
function startGame(){
document.onkeydown=function(e){
var zx = gameConfig.person.x;
var zy = gameConfig.person.y;
switch(e.keyCode){
case 37:
//console.log(box[gameConfig.map]);
switch(box[gameConfig.map][zy][zx-1]){
case 0:
judgeGame(zy,zx,zy,zx-1,true);
break;
case 2:
if(box[gameConfig.map][zy][zx-2] == 0){
judgeGame(zy,zx-1,zy,zx-2,false);
judgeGame(zy,zx,zy,zx-1,true);
}
if(box[gameConfig.map][zy][zx-2] == 4){
judgeGame(zy,zx-1,zy,zx-2,false);
judgeGame(zy,zx,zy,zx-1,true);
}
break;
case 4:
judgeGame(zy,zx,zy,zx-1,true);
break;
}
break;
case 38:
switch(box[gameConfig.map][zy-1][zx]){
case 0:
judgeGame(zy,zx,zy-1,zx,true);
break;
case 2:
if(box[gameConfig.map][zy-2][zx] == 0){
judgeGame(zy-1,zx,zy-2,zx,false);
judgeGame(zy,zx,zy-1,zx,true);
}
if(box[gameConfig.map][zy-2][zx] == 4){
judgeGame(zy-1,zx,zy-2,zx,false);
judgeGame(zy,zx,zy-1,zx,true);
}
break;
case 4:
judgeGame(zy,zx,zy-1,zx,true);
break;
}
break;
case 39:
switch(box[gameConfig.map][zy][zx+1]){
case 0:
judgeGame(zy,zx,zy,zx+1,true);
break;
case 2:
if(box[gameConfig.map][zy][zx+2] == 0){
judgeGame(zy,zx+1,zy,zx+2,false);
judgeGame(zy,zx,zy,zx+1,true);
}
if(box[gameConfig.map][zy][zx+2] == 4){
judgeGame(zy,zx+1,zy,zx+2,false);
judgeGame(zy,zx,zy,zx+1,true);
}
break;
case 4:
judgeGame(zy,zx,zy,zx+1,true);
break;
}
break;
case 40:
switch(box[gameConfig.map][zy+1][zx]){
case 0:
judgeGame(zy,zx,zy+1,zx,true);
break;
case 2:
if(box[gameConfig.map][zy+2][zx] == 0){
judgeGame(zy+1,zx,zy+2,zx,false);
judgeGame(zy,zx,zy+1,zx,true);
}
if(box[gameConfig.map][zy+2][zx] == 4){
judgeGame(zy+1,zx,zy+2,zx,false);
judgeGame(zy,zx,zy+1,zx,true);
}
break;
case 4:
judgeGame(zy,zx,zy+1,zx,true);
break;
}
break;
}
}
};
startGame();


  • hzwzjwy
  • Boolean
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为何这么吊


2025-08-10 20:59:16
广告
不感兴趣
开通SVIP免广告
  • Crackkay
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
难道我哪里写的不对还是帖子不精彩……


  • bobby825
  • ifelse
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
COOL!一起努力把!


  • Forever小畅
  • true
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
收藏~待深入研究~


  • 亲自走路
  • Boolean
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
_马克


  • 宠奶奶爱夫人
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
佩服


  • xxxcloud001234
  • for
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
佩服


2025-08-10 20:53:16
广告
不感兴趣
开通SVIP免广告
  • 我也是BBC
  • Date
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请问lz,你的空间是怎么弄的,是国内的还是国外的,本人也想用WordPress建博客上传游戏,但是困难重重啊


  • 香格里考拉
  • null
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
mark之


  • a1272146
  • trycatch
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
马


  • 乐神在成长
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我做了个 石头剪刀布 的游戏! 就是不知道哪里错了!
能帮我看看嘛?
大牛


  • 系统狂人
  • false
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
就这垃圾技术还在这j8炫耀


  • fly我是小文
  • while
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
新手,刚接触js,大学网络部让做一个推箱子的游戏。我粘贴复制,没有现象。请问您可以指点一下吗?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 36回复贴,共2页
  • ,跳到 页  
<<返回javascript吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示