结果图

首先创建canvas

浏览器不兼容

canvas>

body>

第一步:画二维数组地图

0表示平地 1表示墙 2表示小人 3表示箱子 4表示目标

var gameMap1=[

[1,1,1,1,1,1,1,1,1,1],

[1,1,1,0,0,0,0,4,1,1],

[1,1,1,1,0,0,1,1,1,1],

[1,4,0,0,0,0,0,0,0,1],

[1,0,0,0,1,2,0,0,0,1],

[1,0,0,0,1,0,0,0,0,1],

[1,0,0,0,1,0,3,0,0,1],

[1,0,0,0,3,3,0,0,0,1],

[1,0,0,0,0,4,0,0,0,1],

[1,1,1,1,1,1,1,1,1,1]

];

第二步:导入图片

var block=new Image();//0

block.src="img/block.gif";

var wall=new Image();//1

wall.src="img/wall.png";

var man=new Image();//2

man.src="img/down.png";

var box=new Image();//3

box.src="img/box.png";

var target=new Image();//4

target.src="img/ball.png";

var completedBox=new Image();//5

completedBox.src="img/comp_box.png";

第三步:初始化

window.οnlοad=function(){

canvas=document.getElementById("canvas");

ctx=canvas.getContext("2d");

/**

* 地图初始化

*/

gameMap=gameMap1;

initMap(gameMap);

}

/**

* 地图初始化

*/

function initMap(gameMap){

for(var i=0;ifor(var j=0;jvar pic = block;

switch(gameMap[i][j]){

case 0:

pic = block;

break;

case 1:

pic = wall;

break;

case 2:

manPosX=w*j;

manPosY=h*i;

pic = man;

break;

case 3:

pic = box;

break;

case 4:

pic = target;

break;

}

ctx.drawImage(pic,w*j,h*i,pic.width,pic.height);

}

}

}

第四步:添加键盘事件

//body绑定键盘事件

浏览器不兼容

canvas>

body>

实现doKeyDown(event)方法

/**

* 键盘事件处理

*@param {Object} e

*/

function doKeyDown(e){

console.info(e);

switch(e.keyCode){

case 37://left

go('left');

break;

case 38://up

go('up');

break;

case 39://right

go('right');

break;

case 40://down

go('down')

break;

}

}

第五步:实现对象移动

/**

* 移动对象

*@param {Object} obj

*@param {Object} originX

*@param {Object} originY

*@param {Object} newX

*@param {Object} newY

*/

function move(obj,originX,originY,newX,newY){

//画一个新的对象

ctx.drawImage(obj,newX,newY,w,h);

//原来位置的对象的删除

ctx.clearRect(originX,originY,w,h);

//在原来的位置画block对象

ctx.drawImage(block,originX,originY,block.width,block.height);

}

第六步实现上下左右移动

向下移动为例:

/**

* 向下移动

*/

function goDown(){

//原来位置暂存到tempX,tempY,为了删除原来位置的对象做好准备

var tempX=manPosX;

var tempY=manPosY;

//算出对象在二位数组中的位置i,j

var i=manPosY/h;

var j=manPosX/w;

//判断二位数组中的下一个位置能不能走,如果等于0表示能走

if(gameMap[i+1][j]==0){

man.src="img/down.png";

manPosY+=h;

move(man,tempX,tempY,manPosX,manPosY);

//人走到了下一个位置以后下一个位置的值为2原来的位置的值改成0

gameMap[i+1][j]=2;

gameMap[i][j]=0;

//如果人遇到了箱子,先移动箱子,移动箱子之前要判断箱子的下一个位置能不能走,如果能走把箱子移到下一个位置,人到箱子的位置

}else if(gameMap[i+1][j]==3){

var boxX=j*w;

var boxY=(i+1)*h;

if(gameMap[i+2][j]==0){

move(box,boxX,boxY,boxX,boxY+h);

man.src="img/down.png";

manPosY+=h;

move(man,tempX,tempY,manPosX,manPosY);

gameMap[i+1][j]=2;

gameMap[i+2][j]=3;

gameMap[i][j]=0;

//如果下一个位置是目标点箱子移到目标然后目标点的位置改成5

}else if(gameMap[i+2][j]==4){

move(completedBox,boxX,boxY,boxX,boxY+w);

man.src="img/down.png";

manPosY+=w;

move(man,tempX,tempY,manPosX,manPosY);

gameMap[i+2][j]=5;

gameMap[i+1][j]=2;

gameMap[i][j]=0;

}

}

}

向上,向左,向右同理。

第七步:判断胜利

/**

* 判断胜利

*/

function checkFinish(){

for(var i=0;ifor(var j=0;jif(gameMap[i][j]==3 || gameMap[i][j]==4){

return false;

}

}

}

return true;

}

源码下载:http://download.csdn.net/detail/qq_24082497/9579876

html推箱子过关检测函数,HTML5推箱子实现相关推荐

  1. c语言程序推箱子详细设计,C语言实现推箱子项目

    本文实例为大家分享了C语言实现推箱子的具体代码,供大家参考,具体内容如下 项目展示 首先介绍结构板,结构版是图形版的逻辑基础: 结构版效果图: 地图: 二维数组储存地图,0代表空地,1代表墙,4代表箱 ...

  2. 推箱子、纯前端实现推箱子、推箱子代码

    推箱子.纯前端实现推箱子.推箱子代码 今天分享一款非常经典的HTML5小游戏,一款考验你智力的推箱子游戏,这个游戏很常见,你应该是玩过的,这次我们用HTML5来重写了这款推箱子游戏,游戏设置和很多关卡 ...

  3. 赛可达推病毒攻击检测和情报分享服务

    本文讲的是赛可达推病毒攻击检测和情报分享服务,近日,国际知名第三方测评认证机构--赛可达实验室隆重推出病毒攻击检测和情报分享服务(简称"SKD-VS"). 据赛可达实验室CEO宋继 ...

  4. 微信小程序 调取云函数 信息推送失败response out of time limit or subscription is canceled hint的具体解决方法

    微信小程序 调云函数 信息推送失败,提示errcode":45015,"errmsg":"response out of time limit or subsc ...

  5. android小米推送,Android手机端小米推送Demo解析和实现方法

    最近这几个月都是在准备找工作和找工作中,付出了很多,总算是有点收获,所以都没有怎么整理笔记.到了最近才有空把自己的笔记整理一下发上来,分享一下我的学习经验. 推送 由于最近项目要用到Android的消 ...

  6. (4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送

    前言(常见坑): 小心是AndroidManifest文件被别人改动过...... 升级推送SDK时往往可能会引入新问题.....除非有重大更新,否则可以延迟2个版本进行升级 为了更好应对出问题的用户 ...

  7. springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...

    websocket springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送) 使用WebSocket构建交互式Web应用程序 本指南将引导您完成创建" ...

  8. 【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )

    文章目录 一.递推方程标准型及通解 二.递推方程通解证明 一.递推方程标准型及通解 H(n)−a1H(n−1)−⋯−akH(n−k)=f(n)H(n) - a_1H(n-1) - \cdots - a ...

  9. WBOLT 搜索推送管理插件(原百度推送管理插件) 3.4.11 Pro

    简介: 更新记录 V3.4.11 [董岩松博客自更新]去除底部广告模块,用起来赏心悦目: [董岩松博客自更新]去除更新提示: 插件改名为搜索推送管理插件: 插件管理界面重构,按核心功能拆分多页面,小功 ...

  10. 个推成为首家支持统一推送接口标准的第三方推送服务商!

    2017年10月16日,中国信息通信研究院泰尔终端实验室联合各大手机厂商和提供推送服务的互联网厂家成立"统一推送联盟",希望通过标准化的方式统一推送通道和接口,以降低终端功耗,提升 ...

最新文章

  1. TensorFlow可以做什么?让Google Brain首席工程师告诉你
  2. 「情报局21」2019 AI 进入新算力时代
  3. matplotlib xticks 基于 旋转_咬文嚼字——对matplotlib的文字绘图总结
  4. SVN导致目录图标出现“?”号解决方案
  5. Flask爱家租房--订单(下订单)
  6. jmeter404_JMeter – 如何记录失败的响应的完整请求?
  7. 51nod 1435 位数阶乘
  8. 二本软件工程学生的考研逆袭之路
  9. SSM框架Web程序的流程(Spring SpringMVC Mybatis)
  10. 手工清除U盘里的恶意病毒
  11. 监控软件加入智能零售 试着用人脸辨识让消费力提升
  12. Scrapy——基本用法(命令行工具、Item、Spiders)
  13. 访问服务器本地端口/网址
  14. Apple 等六大生态系统的崛起
  15. 基于SQL求集合的交、并、补
  16. 看门狗2服务器位置,看门狗2怎么爬进服务器 | 手游网游页游攻略大全
  17. python如何替换文件部分内容_python 实现批量替换文本中的某部分内容
  18. 魔法城堡计算机谱子,TFBOYS《魔法城堡》简谱
  19. 谷歌插件离线安装方法
  20. 美国计算机博士资格考试难吗,美国计算机博士院校申请的难度在哪里

热门文章

  1. 企业架构:使用TOGAF进行产品开发
  2. CE驱动程序快速入门(转)
  3. spring任务调度的使用
  4. 不知不觉,到51cto一年了!
  5. gcc对C语言的扩展:标签变量(Labels as Values)
  6. C++解析(3):布尔类型与三目运算符
  7. 正负样本不平衡处理方法总结【转】
  8. 小程序--改变子级别页面导航栏信息 / navigationBarTitleText
  9. iphone中input标签会多出一块的解决办法
  10. 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源