Flash AS3版连连看游戏核心算法
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-07
0) //D 点上必须没有障碍 { isMatch = _hTest(a, d) && _vTest(b, d); if (isMatch) { _result.clear(); return _result.fill(a.clone(), b.clone(), d.clone()); } } return null; } /** * 扫描两点决定的矩形范围内有没有完整的空白线段 * @param a * @param b * @return */ private function _scanLine(a:Point, b:Point):DLinkedList { var v:DLinkedList = new DLinkedList(); // 从 a, c 连线向 b 扫描,扫描竖线 // 扫描 A 点左边的所有线 for (var x1:Number = a.x; x1 >= 0; x1--) { var c1:Point = new Point(x1, a.y); var d1:Point = new Point(x1, b.y); // 存在完整路线 -- c,d点为零且纵向连通 if ( _map.get(x1, a.y) == 0 && _map.get(x1, b.y) == 0 && _vTest(c1, d1) ) v.append( new Line(Line.VERTICAL, c1, d1) ); } // 扫描 A 点右边的所有线 for (var x2:Number = a.x; x2 < _map.width; x2++) { var c2:Point = new Point(x2, a.y); var d2:Point = new Point(x2, b.y); if ( _map.get(x2, a.y) == 0 && _map.get(x2, b.y) == 0 && _vTest(c2, d2) ) v.append( new Line(Line.VERTICAL, c2, d2) ); } // 从 a, d 连线向 b 扫描,扫描横线 // 扫描 A 点上面的所有线 for (var y1:Number = a.y; y1 >= 0; y1--) { var c3:Point = new Point(a.x, y1); var d3:Point = new Point(b.x, y1); if ( _map.get(a.x, y1) == 0 && _map.get(b.x, y1) == 0 && _hTest(c3, d3) ) v.append( new Line(Line.HORIZONTAL, c3, d3) ); } // 扫描 A 点下面的所有线 for (var y2:Number = a.y; y2 < _map.height; y2++) { var c4:Point = new Point(a.x, y2); var d4:Point = new Point(b.x, y2); if ( _map.get(a.x, y2) == 0 && _map.get(b.x, y2) == 0 && _hTest(c4, d4) ) v.append( new Line(Line.HORIZONTAL, c4, d4) ); } return v; } /** * 对所有找到的符合线进行判断,看看 AC 、 DB 是否同样也可以消除 * @param a * @param b * @return */ private function _twoCorner(a:Point, b:Point):MatchResult { _vector = _scanLine(a, b); if (_vector.isEmpty()) return null; //没有完整的空白线段,无解 var itr:Iterator = _vector.getIterator(); while (itr.hasNext()) { var ln:Line = itr.next() as Line; switch (ln.direct) { case Line.HORIZONTAL: if ( _vTest(a, ln.a) && _vTest(b, ln.b) ) { _result.clear(); return _result.fill(a.clone(), b.clone(), ln.a.clone(), ln.b.clone()); } break; case Line.VERTICAL: if ( _hTest(a, ln.a) && _hTest(b, ln.b) ) { _result.clear(); return _result.fill(a.clone(), b.clone(), ln.a.clone(), ln.b.clone()); } break; } } return null; } private function _findRestPointA(map:Array2 = null):Point { var m:Array2 = map || _map; if (m.width >= m.height) { for (var col:Number = 0; col < m.width; col++) { var max_y:Number = Math.min(col + 1, m.height); for (var y1:Number = 0; y1 < max_y; y1++) { if (m.get(col, y1) != 0) return new Point(col, y1); } for (var x1:Number = 0; x1 < col; x1++) { if (m.get(x1, max_y-1) != 0) return new Point(x1, max_y-1); } } } else { for (var row:Number = 0; row < m.height; row++) { var max_x:Number = Math.min(row + 1, m.width); for (var x2:Number = 0; x2 < max_x; x2++) { if (m.get(x2, row) != 0) return new Point(x2, row); } for (var y2:Number = 0; y2 &l |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Flash AS3版连连看游戏核心算法的所有评论