码迷,mamicode.com
首页 > 其他好文 > 详细

怎么查找连在一起的同色方块?

时间:2014-06-26 18:14:58      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

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

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

解题思路

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

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

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

bubuko.com,布布扣
//代码超短的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篇文章,有点累了,但还是需要继续学习,也希望各个码友继续努力!

 

怎么查找连在一起的同色方块?,布布扣,bubuko.com

怎么查找连在一起的同色方块?

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/caoke/p/3808538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!