zoukankan      html  css  js  c++  java
  • 怎么查找连在一起的同色方块?

    解决的问题:(本文章解决的是解题思路1,余下二个比较简单)

    1.同颜色连在一起的方块消除、消消看等同类游戏的算法实现

    解题思路

    1.把同色的分成n块区域

    2.对每块区域进行判断,比如 3个以上横竖连在一起

    3.输出想要的结果,找到了所有3个以上横或者竖连在一起

    //代码超短的cmd模式 http://www.cnblogs.com/caoke/p/cmd.html
    var require,define;
    (function(){
        var module={}
        require=function(name){
            return module[name]
        }
        define=function(name,func){
            var exports= module[name]={}
            module.exports=exports
            func(require,exports,module)
            return exports
        }
    })()
    代码简单的cmd模式

    我的代码开发模式是cmd模式,每次就不贴出来了,需要的看上一行

    define("solve",function(require,exports,module){
        //输入
        var N=10,M=8;
        var field=[]
        var str=2
    
        var res=0
        var pointArr=[]
    //现在位置
        function dfs(x,y){
            field[y][x]=null
            pointArr[res].push({
                x:x,
                y:y
            })
            for(var dx=-1;dx<=1;dx++){
                for(var dy=-1;dy<=1;dy++){
                    if(dx+dy==0||dx-dy==0){continue;}
                    //向x方向移动dx,向y方向移动dy,移动的结果为(nx,ny)
                    var nx=x+dx,ny=y+dy;
                    //判断(nx,ny)是不是在院子内,以及是否有积水
                    if(0<=nx&&nx<N&&0<=ny&&ny<M&&field[ny][nx]==str){
                        dfs(nx,ny)
                    }
                }
            }
        }
    //查找区块
        function solve(str_search,map,width,height){
            field=[].concat(map)
            N=width||field[0].length
            M=height||field.length
            str=str_search||str
            res=0
            for(var i=0;i<N;i++){
                for(var j=0;j<M;j++){
                    if(field[j][i]==str){
                        pointArr[res]=[]
                        dfs(i,j)
                        res++
                    }
                }
            }
            return pointArr
        }
        exports.solve=solve
    })
    //查找所有2相连的(上下左右算相连的),最后搜出来一共有3块,给出了个二维数组
    var arr1=[
        [1,2,1,1,1,1,1,1,1,1],
        [1,2,1,1,1,1,1,1,1,1],
        [1,1,2,2,2,1,1,1,1,1],
        [1,1,1,1,2,1,1,1,1,1],
        [1,1,1,1,2,1,1,1,1,1],
        [1,1,1,1,1,1,2,1,1,1],
        [1,1,1,1,1,1,2,1,1,1],
        [1,1,1,1,1,1,1,1,1,1]
    ]
    var arr=require("solve").solve(2,arr1)
    console.log(arr)

    解决问题2:对搜出来的二维数组,循环每个区块,如果区块的长度>=3,里面的元素有3个以上的x或y坐标相同,那么恭喜你,找到了颜色相同的3个以上横或竖连在一起,具体逻辑明天想想。

    一天写了3篇文章,有点累了,但还是需要继续学习,也希望各个码友继续努力!

     结果:

    [ [ { x: 1, y: 0 }, { x: 1, y: 1 } ],
    [ { x: 2, y: 2 },
    { x: 3, y: 2 },
    { x: 4, y: 2 },
    { x: 4, y: 3 },
    { x: 4, y: 4 } ],
    [ { x: 6, y: 5 }, { x: 6, y: 6 } ] ]

  • 相关阅读:
    java学习55天2020/8/29
    java学习51天2020/8/25
    java学习55天2020/8/31
    java学习49天2020/8/23
    java学习52天2020/8/26
    java学习48天2020/8/22
    2020.12.05
    2020.12.04
    2020.12.07
    2020.12.03
  • 原文地址:https://www.cnblogs.com/caoke/p/3808538.html
Copyright © 2011-2022 走看看