js 简单的推箱子小游戏步骤解析--大家都玩过的

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 推箱子小游戏大家肯定都玩过,之所以写这篇文章,是觉得这个小游戏足够简单好理解,大家看完文章之后,自己也能花上半天功夫敲出一个推箱子小游戏来,如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家。本文首发于我的个人blog:obkoro1.comdemo:推箱子小游戏步骤解析:本文代码已经放在了github上面了,里面也进行了很详细的代码注释,可以copy下来,在本地运行一下看看。

image.png

前言

推箱子小游戏大家肯定都玩过,之所以写这篇文章,是觉得这个小游戏足够简单好理解,大家看完文章之后,自己也能花上半天功夫敲出一个推箱子小游戏来,如果喜欢的话可以点波赞,或者关注一下,希望本文可以帮到大家。


demo:推箱子小游戏

步骤解析:

本文代码已经放在了github上面了,里面也进行了很详细的代码注释,可以copy下来,在本地运行一下看看

1. 渲染地图

  1. html结构:

image.png

html结构十分简单,只要弄一堆div,来放置地图的class就可以了,我这里初始化了12*9个div,地图里最多九行高度。   
 这些div都是同样大小,地图渲染出来区别的只是颜色的不同。
  1. 地图函数:
var box=$('.box div'); //地图使用的div集合
function create(){ //创建地图函数
box.each(function(index){ //index的数量是固定的,是box div下面div的数量
     // 每次创建地图初始化div
    box.eq(index).removeClass();
});
box.each(function(index,element){ //循环整个div的数量 二维数组里数量不够的 默认为空白
//level为关卡数 根据关卡渲染地图 builder为二维数组,为地图关卡
    if(builder[level][index]){ //过滤0
        box.eq(index).addClass('type'+builder[level][index]);
    }
});
box.eq(origin[level]).addClass("pusher"); //推箱人 皮卡丘位置
}
//第一关的地图长这样(下面只是栗子,不是代码),0代表不可抵达区域,1代表目标(要被推到的地方),
//2代表普通路径(可以走的),3代表墙,4代表箱子
[0,0,0,0,3,3,3,0,0,0,0,0,
0,0,0,0,3,1,3,0,0,0,0,0,
0,0,0,0,3,2,3,3,3,3,0,0,
0,0,3,3,3,4,2,4,1,3,0,0,
0,0,3,1,2,4,2,3,3,3,0,0,
0,0,3,3,3,3,4,3,0,0,0,0,
0,0,0,0,0,3,1,3,0,0,0,0,
0,0,0,0,0,3,3,3,0,0,0,0]

2. 捕获键盘事件,判断是否可以移动

使用$(document).keydown()jqery事件,捕获键盘事件。

  1. 捕获键盘事件,上下左右以及wsad。
$(document).keydown(function (e) {
 var key=e.which;
 switch(key){
 //col 的值为12,上下移动要12个div为一个周期
 //方向键上或者w
 case 87:
 case 38:
     move(-col);//判断移动函数
 break;
 //方向键下或者s
 case 83:
 case 40:
    move(col);
 break;
 //方向键左或者a
 case 65:
 case 37:
     move(-1);
 break;
 //方向键右或者d
 case 68:
 case 39:
     move(1);
 break;
 }
setTimeout(win,500); //按键之后调判断是否过关
});
  1. 判断是否可以移动。

分为两个判断条件:一个是推箱子,一个是不推箱子 自然移动,否则不移动皮卡丘。

function move(step){ //是否移动判断
         // 分为两个判断条件一个是推箱子,一个是不推箱子 自然移动。 否则不移动皮卡丘
         //step 上下是12个div一个周期,左右是1个div positin是皮卡丘的原来位置
        var pikaqiu1=box.eq(position);//皮卡丘现在的地方
        var pikaqiu2=box.eq(position+step);//皮卡丘要去的下一个地方
        var pushBox=box.eq(position+step*2);//箱子要去的下一个地方
        if(!pikaqiu2.hasClass('type4')&&( pikaqiu2.hasClass('type1')||pikaqiu2.hasClass('type2'))){ //自然移动
            //判断:如果下一个div的class不包含type4(箱子),并且 下一个div含有type1(目标位置),或者type2(普通路径)
            //这一步和下一步判断是否有type4的原因是普通路径会变成有type4的路径,这时候就会出现问题
            pikaqiu1.removeClass("pusher"); //移除当前皮卡丘
            pikaqiu2.addClass("pusher");//移动皮卡丘到下一个位置
            position=position+step;//增加position值
        }
        else if((pikaqiu2.hasClass('type4'))&&(!pushBox.hasClass('type4'))&&(pushBox.hasClass('type1')|| pushBox.hasClass('type2')) ) {
            //推箱子    
            //如果下一个div的class包含type4(箱子)并且 不包含重叠type4(箱子) 并且 包含class type1(目标位置)或者 包含type2(空路)
           pikaqiu2.removeClass('type4');//移除当前箱子
            pikaqiu1.removeClass("pusher");//移除当前皮卡丘
            pushBox.addClass('type4');//移动箱子到下一个位置
            pikaqiu2.addClass("pusher").addClass("type2");//
            //本来是type4 移除之后,这里没有class了,要变成普通路径
            position=position+step;//增加position值 
        }
    }

3.胜利判断:

每次移动都要调用这个胜利判断。

function win(){ //胜利条件判断
    if($(".type1.type4").length===goal){ //推的箱子与关卡设置通过箱子的数量对比
        if(level<9) {
            alert("666,挑战下一关吧--OBKoro1");
            level++; //关卡+1
            goal = goalList[level];
            position = origin[level];
            create();
        }else {
            alert("厉害啊 大佬 通关了都");
        }
    }
}

代码地址demo地址


目录
相关文章
|
23天前
|
JavaScript
js 解析 byte数组 成字符串
js 解析 byte数组 成字符串
|
15天前
|
机器学习/深度学习 存储 人工智能
让模型评估模型:构建双代理RAG评估系统的步骤解析
在当前大语言模型(LLM)应用开发中,评估模型输出的准确性成为关键问题。本文介绍了一个基于双代理的RAG(检索增强生成)评估系统,使用生成代理和反馈代理对输出进行评估。文中详细描述了系统的构建过程,并展示了基于四种提示工程技术(ReAct、思维链、自一致性和角色提示)的不同结果。实验结果显示,ReAct和思维链技术表现相似,自一致性技术则呈现相反结果,角色提示技术最为不稳定。研究强调了多角度评估的重要性,并提供了系统实现的详细代码。
41 10
让模型评估模型:构建双代理RAG评估系统的步骤解析
|
10天前
|
JavaScript 前端开发 开发工具
五子棋小游戏(JS+Node+Websocket)可分房间对战
本文介绍了通过JS、Node和WebSocket实现的五子棋游戏,支持多人在线对战和观战功能。
20 1
五子棋小游戏(JS+Node+Websocket)可分房间对战
|
11天前
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
26 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
|
9天前
|
监控 数据挖掘 BI
项目管理流程全解析及关键步骤介绍
项目管理流程是项目成功的基石,涵盖启动、规划、执行、监控和收尾等阶段。Zoho Projects 等软件可提高效率,支持结构化启动与规划、高效执行与协作及实时监控。这些流程和工具对项目的全局视角、团队协作和风险控制至关重要。项目管理软件适用于不同规模企业,实施时间因软件复杂度和企业准备而异。
24 2
|
11天前
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏
本文通过详细的代码示例介绍了如何使用JavaScript和HTML5的Canvas API实现一个贪吃蛇游戏,包括蛇的移动、食物的生成、游戏的开始与结束逻辑,以及如何响应键盘事件来控制蛇的方向。
25 1
|
1月前
|
JavaScript 前端开发 API
Javaweb之javascript的BOM对象的详细解析
BOM为Web开发提供了强大的API,允许开发者与浏览器进行深入的交互。合理使用BOM中的对象和方法,可以极大地增强Web应用的功能性和用户体验。需要注意的是,BOM的某些特征可能会在不同浏览器中表现不一致,因此在开发过程中需要进行仔细的测试和兼容性处理。通过掌握BOM,开发者能够制作出更丰富、更动态、更交互性的JavaWeb应用。
17 1
|
2月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
101 0
|
1月前
|
自然语言处理 前端开发 JavaScript
Javaweb之javascript的详细解析
通过明确JavaScript的定位,掌握其核心概念和相关技术栈,在实现交互丰富的Web应用时,JavaScript就能够发挥它不可替代的作用。随着前后端分离趋势的推进,JavaScript在现代 Web 开发中变得更加重要,不仅限于传统的 JavaWeb 应用,而是广泛应用于各种类型的前端项目。
15 0
|
2月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
58 0

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面