《开心消消乐》
来源:互联网 发布:监控报价软件 编辑:程序博客网 时间:2024/04/28 18:00
1.创建一个二维数组, 将数组里放入一个一到五的随机数并且利用图片命名中的一到五安置进去
this.cellArr = []; //创建二维数组 for( var k = 0 ; k < DATA.SIZI_W ; k++){ this.cellArr[k]=[] } //将二维数组划分成8*8的一个矩阵并且放入一个40*40的位置 for(var i = 0 ; i< DATA.SIZI_W ; i ++){ for(var j = 0 ; j < DATA.SIZI_H ; j++){ var sp = new Cell(); sp.setPosition( 50 + i*40 ,cc.winSize.height-40 - j*40); sp.setArrIndex(i,j); this.addChild(sp); this.cellArr[i][j] = sp } }
2.写一个方法体,将传进来的数据的坐标进行一个检查四周的块儿然后将四周的块儿再返回回来,并且在将返回回来的块儿在进行这个检查,并且遍历到所有的块儿。
checkNewArr:function(event){ //将传过来的点击图片的属性赋予给touchIndex var touchIndex = event.getUserData(); //将touchIndex的值传入checkNeihbor这个方法体内并将结果数组赋予arr var arr = this.checkNeighbor(touchIndex); //使用for循环将这个过程循环五次向外查询 for(var i = 0 ; i < 5 ; i++) { //将newArr数组和arr进行深复制 var newArr = arr.slice(); //进行for循环将index也就是arr数组里的每个元素都赋予给po for (var index in arr) { //将每一个元素的坐标都赋予po var po = arr[index]; //将每一个元素进行checkNeighbor方法体并将结果放入newArr数组 //newArr = newArr.concat(this.checkNeighbor(po)) var newArr = this.filterDelSame(newArr, this.checkNeighbor(po)) } arr = newArr //var Lech = newArr.length; //if (Lech >= 3) { // //} } this.cellFallDown(arr); },
2.1检查四周的块儿
checkNeighbor:function(touchIndex){ var checkArr = [cc.p(-1,0),cc.p(1,0),cc.p(0,-1),cc.p(0,1)] var arr = [] for(var index in checkArr){ var arrayIndex = checkArr[index] var tempPo = cc.pAdd(touchIndex, arrayIndex); if(this.checkCellColor(tempPo, touchIndex)){ arr.push(tempPo) } } return arr; },
2.2检查这个数值的四周的块儿是否超出限制边长
checkCellColor:function(po,touchIndex){ if(po.x < 0 || po.y<0|| po.x > DATA.SIZI_W - 1 || po.y>DATA.SIZI_H - 1){ return false } if(this.cellArr[po.x][po.y] == null || this.cellArr[touchIndex.x][touchIndex.y] == null) return false; return this.cellArr[po.x][po.y].type == this.cellArr[touchIndex.x][touchIndex.y].type },
2.3将主函数体放回的数值进行移除并且让上面的块儿检测下面的块儿移除数量并且位移移除数量乘碎片宽度的距离
cellFallDown:function(arrayIndexArr){ //清除同颜色的块儿 并且二维数组中的位置置为null for(var index in arrayIndexArr){ //将传入数组中的每一个元素赋值给arrayIndex var arrayIndex = arrayIndexArr[index]; //删除掉选择数组中的块儿 this.cellArr[arrayIndex.x][arrayIndex.y].removeFromParent(true); //将选择的块儿数值变为null this.cellArr[arrayIndex.x][arrayIndex.y] = null } //遍历数组 for(var i = 0;i<DATA.SIZI_W; i++){ for(var j = DATA.SIZI_H - 1;j >= 0;j--){ if(this.cellArr[i][j] == null) { continue } //设置一个值记录消除的块儿并且用于位移使用计算距离 var tempAdd = 0; for(var k = j;k<DATA.SIZI_H;k++){ if(this.cellArr[i][k] == null) tempAdd++ } this.cellArr[i][j].fallDownNum = tempAdd } } for(var i = 0;i<DATA.SIZI_W; i++){ for(var j = DATA.SIZI_H - 1;j >= 0;j--){ this.updateCellByFallDownNum(this.cellArr[i][j]) } } },
updateCellByFallDownNum:function(cell){ if(cell == null) return; if(cell.fallDownNum == 0) return; var tempPo = cc.pAdd(cc.p(0,cell.fallDownNum), cell.primary); this.cellArr[tempPo.x][tempPo.y] = cell; this.cellArr[cell.primary.x][cell.primary.y] = null; cell.fallDown(); cell.fallDownNum = 0}
2.4因为存在一个反复查询同一个块儿的问题,所以需要检测是否出现同一个已经检测过的块儿,检测办法很多,现在使用的办法是检测是否有重复的元素,检测前先检测数组是否有相同元素,可以做到减少大量重复运算
filterDelSame:function(arr1,arr2){ var returnArr = arr1.concat(arr2); for(var i = 0 ;i<returnArr.length;i++){ var nowPo = returnArr[i]; for(var j = i+1 ;j<returnArr.length;j++){ if(cc.pSameAs(returnArr[j],nowPo)){ returnArr.splice(j,1); j-- } } } return returnArr },
0 0
- 开心消消乐分析
- 开心消消乐
- 《开心消消乐》
- 《开心消消乐二》
- HTML_13_javascript_小游戏_开心消消乐
- 乐元素蒋赛骅:《开心消消乐》成功经验分享
- <开心消消乐>简单的逆向破解过程
- 热门游戏<开心消消乐>的“加壳”诡计!!
- [Android] 开心消消乐代码(写的比较简单)
- poj 1027(开心消消乐 模拟 + 搜索)
- JavaScript开心消消乐中的迭代算法
- 消消乐
- 消消乐
- Label仿写开心消消乐说明文字的 黑色和黄色
- 哈理工院赛练习题 小瑞-开心消消乐 II
- 仿开心消消乐 大树星星无限循环 点击(自定义view实现)
- 字符串消消乐
- 矩阵消消乐
- js操作css特效
- java反射机制模拟Spring Ioc实现
- ASP.NET AJAX常用控件
- 文件的大小与内存空间
- java,spring mvc,文件下载
- 《开心消消乐》
- CSS3 3D 转换
- 安卓中layout_weight的认识
- 细粒度命名实体识别
- Specular Highlights(镜面光)
- rotate点击来回旋转和同一事件绑定解决同一class写法
- Volley
- CSS3 多列
- 【Codewars】Roman Numerals Encoder 正整数转罗马数字