JavaScript游戏之连连看连线算法实例

第一种情况为两个精灵能通过一条直线连接,如下图


代码如下:

	var self = this;  //用self变量来保存当下的这个this,以免在其他函数域中this指向不同对象而调用错误
        //直线连接的两个对象
        function isDirectLink(_begin,_end){
            //若传入的是同一对象,连线的长度为0,返回false   row col 分别表示精灵的行号和列号
            if(_begin.row == _end.row&&_begin.col==_end.col){
                m_line.length = 0;
                return false;
            }
            //行号相等时
            if(_begin.row == _end.row){
                var steps = _begin.col - _end.col;
                var direction = steps/Math.abs(steps);
                var row = _begin.row;
                //判断两个对象直线距离上是否存在精灵
                for(var i = 1;i<Math.abs(steps);++i)
                {
                    var col = _begin.col - i*direction;
                    //获取连线中间的精灵
                    var sprite = self.m_sprites[row*m_col+col];
                    //若不为空,连线的长度为0,返回false
                    if(sprite!=null)
                    {
                        m_line.length = 0;
                        return false;
                    }
                }
                m_line.push(new M_Segment(_begin,_end));
                return true;
            }
            //列号相等时
            if(_begin.col == _end.col){
                var steps = _begin.row-_end.row;
                var direction = steps/Math.abs(steps);
                var col = _begin.col;
                for(var i =1;i<Math.abs(steps);++i){
                    var row =_begin.row - i*direction;
                    var sprite = self.m_sprites[row*m_col+col];
                    if(sprite!=null){
                        m_line.length = 0;
                        return false;
                    }
                }
                m_line.push(new M_Segment(_begin,_end));
                return true;
            }
            return false;
        };


第二种情况为只需一个转角就能连接两个精灵 如下图



	function isOneCornerLink(_begin,_end){  
            if(_begin.row == _end.row&&_begin.col == _end.col){  
                m_line.length = 0;  
                return false;  
            }  
            //第一种拐点   M_Point()是自定义的一个函数  
            var point_1 = new M_Point(_begin.row,_end.col);  
            //用拐点分别连接两个精灵  
            var islink_1 =(isDirectLink(_begin,point_1)&a
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值