当前位置:首页 > 经验 >

老版推箱子游戏攻略(推箱子游戏所有关卡教程)

来源:原点资讯(m.360kss.com)时间:2024-04-01 14:06:31作者:YD166手机阅读>>

欢迎来到程序小院

推箱子小游戏

玩法: 用键盘上的上、下、左、右键移动小人,把箱子全部推到小球的位置即可过关。箱子只可向前推,不能往后拉,并且小人一次只能推动一个箱子^^

开始游戏

老版推箱子游戏攻略,推箱子游戏所有关卡教程(1)

html

<canvas id="canvas" width="560" height="560"></canvas> css

.game{ width:560px; margin:50px auto; } .container-mgs{ display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; margin: 1.8rem; font-size: 16px; line-height: 1; color: #4a4a4a; } .container-but{ display: block; margin: 10px auto; width: 120px; height: 42px; font-size: 13px; color: #fff; font-weight: 300; background: #f4645f; border: 0; text-align: center; border-radius: 3px; cursor: pointer; } js

var can = document.getElementById("canvas"); var msg = document.getElementById("msg"); var cxt = can.getContext("2d"); var w = 35,h = 35; var curMap;//当前的地图 var curLevel;//当前等级的地图 var curMan;//初始化小人 var iCurlevel = 0;//关卡数 var moveTimes = 0;//移动了多少次 //预加载所有图片 var oImgs = { "block" : "/default/game/txz/block.gif", "wall" : "/default/game/txz/wall.png", "box" : "/default/game/txz/box.png", "ball" : "/default/game/txz/ball.png", "up" : "/default/game/txz/up.png", "down" : "/default/game/txz/down.png", "left" : "/default/game/txz/left.png", "right" : "/default/game/txz/right.png", } function imgPreload(srcs,callback){ var count = 0,imgNum = 0,images = {}; for(src in srcs){ imgNum ; } for(src in srcs ){ images[src] = new Image(); images[src].onload = function(){ //判断是否所有的图片都预加载完成 if ( count >= imgNum) { callback(images); } } images[src].src = srcs[src]; } } var block,wall,box,ball,up,down,left,right; imgPreload(oImgs,function(images){ //console.log(images.block); block = images.block; wall = images.wall; box = images.box; ball = images.ball; up = images.up; down = images.down; left = images.left; right = images.right; init(); }); //初始化游戏 function init(){ //InitMap(); //DrawMap(levels[0]); initLevel();//初始化对应等级的游戏 showMoveInfo();//初始化对应等级的游戏数据 } //绘制地板 function InitMap(){ for (var i=0;i<16 ;i ) { for (var j=0;j<16 ;j ) { cxt.drawImage(block,w*j,h*i,w,h); } } } //小人位置坐标 function Point(x,y){ this.x = x; this.y = y; } var perPosition = new Point(5,5);//小人的初始标值 //绘制每个游戏关卡地图 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 initLevel(){ curMap = copyArray(levels[iCurlevel]);//当前移动过的游戏地图 curLevel = levels[iCurlevel];//当前等级的初始地图 curMan = down;//初始化小人 InitMap();//初始化地板 DrawMap(curMap);//绘制出当前等级的地图 } //下一关 function NextLevel(i){ //iCurlevel当前的地图关数 iCurlevel = iCurlevel i; if (iCurlevel<0) { iCurlevel = 0; return; } var len = levels.length; if (iCurlevel > len-1) { iCurlevel = len-1; } initLevel();//初始当前等级关卡 moveTimes = 0;//游戏关卡移动步数清零 showMoveInfo();//初始化当前关卡数据 } //小人移动 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()) { alert("恭喜过关!!"); NextLevel(1); } } //判断是否推成功 function checkFinish(){ for (var i=0;i<curMap.length ;i ) { for (var j=0;j<curMap[i].length ;j ) { //当前移动过的地图和初始地图进行比较,若果初始地图上的陷进参数在移动之后不是箱子的话就指代没推成功 if (curLevel[i][j] == 2 && curMap[i][j] != 3 || curLevel[i][j] == 5 && curMap[i][j] != 3) { return false; } } } return true; } //判断小人是否能够移动 function Trygo(p1,p2){ if(p1.x<0) return false;//若果超出地图的上边,不通过 if(p1.y<0) return false;//若果超出地图的左边,不通过 if(p1.x>curMap.length) return false;//若果超出地图的下边,不通过 if(p1.y>curMap[0].length) return false;//若果超出地图的右边,不通过 if(curMap[p1.x][p1.y]==1) return false;//若果前面是墙,不通过 if (curMap[p1.x][p1.y]==3 || curMap[p1.x][p1.y]==5) {//若果小人前面是箱子那就还需要判断箱子前面有没有障碍物(箱子/墙) if (curMap[p2.x][p2.y]==1 || curMap[p2.x][p2.y]==3) { return false; } //若果判断不成功小人前面的箱子前进一步 curMap[p2.x][p2.y] = 3;//更改地图对应坐标点的值 //console.log(curMap[p2.x][p2.y]); } //若果都没判断成功小人前进一步 curMap[p1.x][p1.y] = 4;//更改地图对应坐标点的值 //若果小人前进了一步,小人原来的位置如何显示 var v = curLevel[perPosition.x][perPosition.y]; if (v!=2)//若果刚开始小人位置不是陷进的话 { if (v==5)//可能是5 既有箱子又陷进 { v=2;//若果小人本身就在陷进里面的话移开之后还是显示陷进 }else{ v=0;//小人移开之后之前小人的位置改为地板 } } //重置小人位置的地图参数 curMap[perPosition.x][perPosition.y] = v; //若果判断小人前进了一步,更新坐标值 perPosition = p1; //若果小动了 返回true 指代能够移动小人 return true; } //判断是否推成功 //与键盘上的上下左右键关联 function doKeyDown(event){ switch (event.keyCode) { case 37://左键头 go("left"); break; case 38://上键头 go("up"); break; case 39://右箭头 go("right"); break; case 40://下箭头 go("down"); break; } } //完善关卡数据及游戏说明 function showMoveInfo(){ msg.innerHTML = "关卡" (iCurlevel 1) " <span style='margin-left:30px;'>移动: " moveTimes "</span>"; } //克隆二维数组 function copyArray(arr){ var b=[];//每次移动更新地图数据都先清空再添加新的地图 for (var i=0;i<arr.length ;i ) { b[i] = arr[i].concat();//链接两个数组 } return b; }

源码

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

老版推箱子游戏攻略,推箱子游戏所有关卡教程(2)

,

栏目热文

什么情况下适合定滑轮(定滑轮的特点有什么)

什么情况下适合定滑轮(定滑轮的特点有什么)

一、定滑轮、动滑轮及其特点知识点1、滑轮的分类滑轮是一个周边有槽,能绕轴转动的小轮.可分为定滑轮和动滑轮。知识点2、定滑...

2024-04-01 13:22:43查看全文 >>

什么地方分别用了定滑轮(定滑轮和滑轮的区别)

什么地方分别用了定滑轮(定滑轮和滑轮的区别)

天车,又叫作天车架、井架,其名最早出现于1628年(明朝崇祯元年)的自流井《李氏族谱》。1872年(清同治十一年),富顺...

2024-04-01 14:05:07查看全文 >>

定滑轮类型(定滑轮有啥特点)

定滑轮类型(定滑轮有啥特点)

门窗滑轮是常见的五金器件之一,而顾名思义也就经常被用于门窗上,但是市场上的滑轮材质有很多种,对于市场上不同的滑轮材质你知...

2024-04-01 13:50:04查看全文 >>

四六级第一次口语考试(大学英语四六级口语考试)

四六级第一次口语考试(大学英语四六级口语考试)

全文共1059字,预计阅读时间:3分钟之前我们已经和同学们一起探讨过很多关于大学英语四六级的学习方法了,大家有没有应用起...

2024-04-01 13:30:17查看全文 >>

四六级口语考点(四六级口语考点申请怎么写)

四六级口语考点(四六级口语考点申请怎么写)

怎么样?这些用法都记住了么?今天再给大家走一波四六级听力场景必背400词干货,...

2024-04-01 13:44:46查看全文 >>

儿童相机推箱子全关图解(儿童相机推箱子攻略大全)

儿童相机推箱子全关图解(儿童相机推箱子攻略大全)

随手用手机拍照成为生活常态,孩子在耳濡目染之下,自然会想要拿起大人的手机拍照,但小小的手拿不住手机,一个滑手,手机可能就...

2024-04-01 13:49:33查看全文 >>

...

1970-01-01 08:00:00查看全文 >>

...

1970-01-01 08:00:00查看全文 >>

文档排行