推箱子
源码链接地址:https://github.com/shunyue1320/sokoban.git

推箱子小游戏展示效果图:

源码链接地址:https://github.com/shunyue1320/sokoban.git

进入后执行如下图步骤就能下载到自己电脑上啦!

接下来了解一下我们用到的素材吧:

目标点 / 草坪 / 箱子 / 人物 / 障碍物

html样式就这么简单 通过canvas绘制游戏地图:

<body onkeydown="doKeyDown(event)"><!--身体--><div class="game"><canvas id="canvas" width="560" height="560"></canvas><div id="msg"></div><input type="button" value="上一关" onclick="NextLevel(-1)"><input type="button" value="下一关" onclick="NextLevel(1)"><input type="button" value="重玩本关" onclick="NextLevel(0)"><input type="button" value="游戏说明" onclick="showHelp()"></div></body>

游戏关卡我们使用 mapdata100.js封存!


//1:围墙   2:目标点   3:箱子    4:人物
var levels=[];
levels[0]=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0],
[0,0,0,0,1,1,1,3,0,3,2,1,0,0,0,0],
[0,0,0,0,1,2,0,3,4,1,1,1,0,0,0,0],
[0,0,0,0,1,1,1,1,3,1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];

通过关卡的坐标值我们选择对应的图片填入canvas画布:

//绘制每个游戏关卡地图
function DrawMap(level){for (var i=0;i<level.length ;i++ ){for (var j=0;j<level[i].length ;j++ ){var pic = block;//初始图片switch (level[i][j]){case 1://绘制墙壁pic = wall;break;case 2://绘制陷进pic = ball;break;case 3://绘制箱子pic = box;break;case 4://绘制小人pic = curMan;//小人有四个方向 具体显示哪个图片需要和上下左右方位值关联//获取小人的坐标位置perPosition.x = i;perPosition.y = j;break;case 5://绘制箱子及陷进位置pic = box;break;}//每个图片不一样宽 需要在对应地板的中心绘制地图cxt.drawImage(pic,w*j-(pic.width-w)/2,h*i-(pic.height-h),pic.width,pic.height)}}
}

通过判断人物移动的方向是否是障碍物来判断人物的行走:

//小人移动
function go(dir){var p1,p2;switch (dir){case "up":curMan = up;//获取小人前面的两个坐标位置来进行判断小人是否能够移动p1 = new Point(perPosition.x-1,perPosition.y);p2 = new Point(perPosition.x-2,perPosition.y);break;case "down":curMan = down;p1 = new Point(perPosition.x+1,perPosition.y);p2 = new Point(perPosition.x+2,perPosition.y);break;case "left":curMan = left;p1 = new Point(perPosition.x,perPosition.y-1);p2 = new Point(perPosition.x,perPosition.y-2);break;case "right":curMan = right;p1 = new Point(perPosition.x,perPosition.y+1);p2 = new Point(perPosition.x,perPosition.y+2);break;}//若果小人能够移动的话,更新游戏数据,并重绘地图if (Trygo(p1,p2)){moveTimes ++;showMoveInfo();}//重绘地板InitMap();//重绘当前更新了数据的地图DrawMap(curMap);//若果移动完成了进入下一关if (checkFinish()){//定时器解决渲染地图后再弹窗setTimeout(()=>{alert("恭喜过关!!");NextLevel(1);},0)}
}

移动人物的键盘控件包括w a s d 与 鼠标 上下左右键:

//与键盘上的上下左右键关联
function doKeyDown(event){switch (event.keyCode){case 37://左键头case 65:go("left");break;case 38://上键头case 87:go("up");break;case 39://右箭头case 68:go("right");break;case 40://下箭头case 83:go("down");break;}

好啦! 推箱子小游戏就介绍到这而了 快拿去玩吧!

源码地址:https://github.com/shunyue1320/sokoban.git

HTML5推箱子小游戏 源码 共100关哦!相关推荐

  1. 推箱子matlab源代码,C++实现推箱子小游戏源码

    本文实例为大家分享了C++实现推箱子小游戏的具体代码,供大家参考,具体内容如下 功能尚为完善. // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #incl ...

  2. 基于Android的推箱子小游戏 源码

    完整工程已打包放在我的资源文件中  https://download.csdn.net/download/huangshuai147/11151692 package com.example.push ...

  3. html扑克牌游戏源码,html5扑克牌消除小游戏源码

    特效描述:html5扑克牌 消除小游戏源码.html5扑克牌消除小游戏源码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 $(function(){ //实现随机洗牌 neusoft ...

  4. 推箱子经典游戏源码 附成品 易语言源码

    介绍: 儿时大家应该都有玩过这个游戏吧? 刚兴趣的可以学习下 网盘下载地址: http://kekewangLuo.net/5BZQNDP9yWH 图片:

  5. C语言 推箱子小游戏 可重玩 可选关 保存记录

    转载请保留此行,来自Vic___ 这是DLNU大一的题目,估计我发上来后,这个课题的难度大大降低. 可以随意增加地图 根据20*20的画就行 0:可移动 1:墙 2:目的地 3:箱子 5:玩家 记得也 ...

  6. 手把手教你使用Python实现推箱子小游戏(附完整源码)

    文章目录 项目介绍 项目规则 项目接口文档 项目实现过程 前置方法编写 move核心方法编写 项目收尾 项目完善 项目整体源码 项目缺陷分析 项目收获与反思 项目介绍 我们这个项目是一个基于Pytho ...

  7. [原创]jQuery推箱子小游戏(100关且可扩展可选关),休闲,对战,娱乐,小游戏,下载即用,兼容iPad移动端,代码注释全(附源码)

    Sokoban 介绍 [原创]jQuery推箱子小游戏(100关且可扩展可选关),休闲,对战,娱乐,小游戏,下载即用,兼容iPad移动端,代码注释全(附源码) 游戏说明 经典的推箱子是一个来自日本的古 ...

  8. [源码和文档分享]基于Java Swing JFream 组件的趣味推箱子小游戏

    一 需求分析 设计一个经典的推箱子小游戏,在窗体里有墙,箱子,胜利的标志,和工人,用户可以通过键盘上的"上"."下"."左"."右 ...

  9. 微信html5小游戏源码70种

    2019独角兽企业重金招聘Python工程师标准>>> 微信html5小游戏源码70种 http://download.csdn.net/detail/csdddn/9419955游 ...

最新文章

  1. Centos7安装配置Xhgui
  2. 解决springboot配置jackson.date-format不生效的问题
  3. SQL Server 2012笔记分享-29:日志文件的工作方式
  4. NoSQL学习笔记(二)之CAP理论
  5. 【Boost】boost库中bind的用法
  6. spring cloud eureka服务注册和调用
  7. mysql dump h_mysqldump
  8. 最新最全latex在sublime上的配置步骤全解
  9. 将pdf文件转换成word,csv文件
  10. ESP32入门之程序烧录:烧录错误总结
  11. 一键接入 ChatGPT,让你的QQ群变得热闹起来
  12. Android手账本案例
  13. 如何输出一个某种编码的字符串?
  14. boot中jar包部署的方式读取classes下的文件
  15. 【Redis】懒惰删除
  16. 在 Docker 中设置时区
  17. python 编程4,和7 幸运数字
  18. php跳转wap代码,JavaScript_wap浏览自动跳转到wap页面的js代码,如何让用户输入wap手机网站的 - phpStudy...
  19. 如何保存Chrome扩展和安装保存后的Chrome扩展插件
  20. MyBatis-Plus 条件构造器之实体(Entity)查询

热门文章

  1. VS Code中Python操作办公软件Excel(待续,还未写完)
  2. SpringBoot高校食堂移动预约点餐系统
  3. 技术分享 | 使用 sync_diff_inspector 对两个 MySQL 进行数据校验
  4. 孙悟空为什么能大闹天宫,而打不过诸多妖精?(转贴)
  5. noobs_如何通过NOOBS享受死的简单Raspberry Pi设置
  6. 《Linux运维学习日记》第二篇:Linux的安装[CentOS 7.X]
  7. Infludb概念与架构
  8. 邹恒甫答胡景北学兄: 张维迎是报邹恒甫不支持他当正院长的仇
  9. LaTex公式(网页)编辑器
  10. 一文详解层次聚类(Python代码)