FLASH连连看算法分析及源代码

上传人:飞*** 文档编号:43734236 上传时间:2018-06-07 格式:DOCX 页数:11 大小:36.84KB
返回 下载 相关 举报
FLASH连连看算法分析及源代码_第1页
第1页 / 共11页
FLASH连连看算法分析及源代码_第2页
第2页 / 共11页
FLASH连连看算法分析及源代码_第3页
第3页 / 共11页
FLASH连连看算法分析及源代码_第4页
第4页 / 共11页
FLASH连连看算法分析及源代码_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《FLASH连连看算法分析及源代码》由会员分享,可在线阅读,更多相关《FLASH连连看算法分析及源代码(11页珍藏版)》请在金锄头文库上搜索。

1、FLASH 连连看算法分析及源代码连连看算法分析及源代码做 FLASH 连连看有特别之处,下面我们就详细分析 FLASH 连连看的算法。在做连连看之前,我们根据折线数的不同分为 3 种情况:第一种情况:如图,方块 1 与方块 2 在同一水平线上,方块 1 与方块 3 在同一垂直线上,这就是我 们的第一种情况:在实际应用时,我们在 1 和 2 之间或 1 和 3 之间实例化一条线段,用 hitTestObject 来测试,如果与这条线段相交的图片个数小于等于 2,那么这两个图片就是连通的。第二种情况:就是 2 和 3 的关系了,在 2 和 3 之间实例化四条线段,两个水平的,两个垂直的,如下图

2、所示:与 A 相交的图片数加上与 B 相交的图片数小于等于 2 或者与 C 相交的图片数加上与 D 相交的图片数小于等于 2,那么这两个图片就是连通的。第三种情况:第三种情况主要与前两种情况配合使用,如果前两种情况测试不成功,那么直接跳转 到第三种情况,如果第三种情况测试依然不成功,那么这两个图片不连通,也就是说用户 进行了一次错误操作。第三种情况比较复杂,测试两个图片是否连通分为两种情况,一种是 A 线段是水平的( 垂直扫描),另一种是 A 线段是垂直的(水平扫描)。1.A 线段是水平的,我们要平均间隔垂直扫描并实例化 A 线段,只有在测试到与 A 相 交的图片数为 0 时,跳出扫描的循环,

3、并且实例化 B 线段和 C 线段,如果与 B 线段相交的 图片数加上与 C 线段相交的图片数小于等于 2,则两个图片连通。2.A 线段是垂直的,算法与上者相同,只是扫描的方向不同。好了,下面我们来亲手做一个简单的连连看。我们这个连连看很简单,只要按照下面的操作就可以了。若要运行此示例,请确保在 FLASH 文件同目录下有一个 images 文件夹,其中有 1.gif,2 .gif,3.gif.40.gif 共 40 个 32*32 像素的 gif 格式的图片。打开 flash cs3,新建一个 FLASH 文档,在文档类中填写 simplellk,在同目录下新建一个 AS 文件,名为 simp

4、lellk.as,在其中输入以下代码:package /*连连看原始模型,供 AS3 交流所用*/ import flash.display.Sprite;import flash.display.Loader; import .URLRequest; public class simplellk extends Sprite private var myllk:llk;private var myllkarr:Array=new Array;private var image:Loader;public function simplellk():void setlisteners();add

5、llk();private function setlisteners():void stage.addEventListener(“mouseDown“,click_stage);stage.addEventListener(“keyUp“,keyup);private function keyup(event):voidif(event.keyCode=116)pl();private function addllk():void for (var i:int=0; ij) myllkarr.splice(i,1);myllkarr.splice(j,1); else myllkarr.s

6、plice(j,1);myllkarr.splice(i,1);break; else myllkarri.selected=false;myllkarri.show_selected();myllkarrj.selected=false;myllkarrj.show_selected(); else if (j!=i) myllkarrj.selected=false;myllkarrj.show_selected();break;private var plarr:Array=new Array;private function pl():void /resetplarr.splice(0

7、,plarr.length);function cxpl(aa:int):void myllkarraa.x=30 + Math.floor(Math.random() * 10) * 40;myllkarraa.y=30 + Math.floor(Math.random() * 8) * 40;for (var j:int=0; j 2) break;if (js 2) break;if (js 2) break;if (js 1) break;if (js 1) break;if (js 1) break;if (js 1) break;if (js = 1) test2=true; el

8、se test2=false;if (test1 sprite8.graphics.clear();sprite9.graphics.clear();sprite7.graphics.clear();break;sprite8.graphics.clear();sprite9.graphics.clear();sprite7.graphics.clear();return unit; import flash.display.Sprite; class llk extends Sprite private var mouseover:Sprite; private var select:Spr

9、ite; public var selected:Boolean=false; public function llk():void this.buttonMode=true;setface();/设置鼠标事件界面configlisteners(); /- /private functions private function setface():void mouseover = new Sprite;mouseover.graphics.beginFill(0x0000FF, .3);mouseover.graphics.drawRect(0, 0, 32, 32);mouseover.mo

10、useEnabled=false;select = new Sprite;select.graphics.beginFill(0xFF0000, .3);select.graphics.drawRect(0, 0, 32, 32);select.mouseEnabled=false; private function configlisteners():void this.addEventListener(“mouseOver“, over_this);this.addEventListener(“mouseOut“, out_this); private function out_this(

11、event):void if (!selected) try removeChild(mouseover); catch (error:Error) private function over_this(event):void if (!selected) addChild(mouseover); /- /public functions public function show_selected():void if (selected) addChild(select);try removeChild(mouseover); catch (error:Error) else try removeChild(mouseover); catch (error:Error) try removeChild(select); catch (error:Error) public function removethis():void this.removeEventListener(“mouseOver“, over_this);this.removeEventListener(“mouseOut“, out_this);parent.removeChild(this); 好了,Ctrl+enter 就可以看到效果了,按 F5 可以重排。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号