仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 926|回复: 8
打印 上一主题 下一主题

[学习教程] 来看看:Flash AS3教程:连连看小游戏AS代码-Flash actionscript

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 20:43:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
占用硬盘空间少,所以被广泛应用于游戏、网络视频、网站广告、交互设计等。
poluoluo中心提醒:比来参考一个JAVA的版本写了一个AS3版的连连看游戏算法,接待人人拍砖斧正,内里用到了as3ds类库,另有一些粉复杂的帮助类就不贴出来了,列位闭着眼睛也能设想出来,看次要的逻辑吧
比来参考一个JAVA的版本写了一个AS3版的连连看游戏算法,接待人人拍砖斧正,内里用到了as3ds类库,另有一些粉复杂的帮助类就不贴出来了,列位闭着眼睛也能设想出来,看次要的逻辑吧
  1. packagemodel.components{importde.polygonal.ds.Array2;importde.polygonal.ds.DLinkedList;importde.polygonal.ds.Iterator;importFlash.geom.Point;importutils.*;/***连连看算法*@authorLuan(veryCSS-ok@yahoo.com.cn)*/publicclassMap{privatevar_level:uint;//游戏关卡对应的项目数目privatevar_map:Array2;//二维数组privatevar_array:Array;//帮助的一维数组privatevar_restBlock:uint=0;//残剩的项目数目privatevar_vector:DLinkedList;//保留切合前提线段的中央privatevar_countOfPerItem:uint;//每一个项目呈现的次数(偶数)privatevar_result:MatchResult;//暂存切合前提的了局publicfunctionMap(level:uint=16){//加2是为了加一圈0_map=newArray2(Setting.COLUMN+2,Setting.ROW+2);_array=newArray(_map.size-2*_map.width-2*_map.height+4);_vector=null;_result=newMatchResult();//挪用setterthis.level=level;}/**********************getter&setter**********************/publicfunctionsetlevel(value:uint):void{_level=value;//获得一个只管年夜的偶数值_countOfPerItem=NumberUtil.getFloorEven(_map.size/_level);_restBlock=_level*_countOfPerItem;_initMap();}publicfunctiongetcount():uint{return_restBlock<=0?0:_restBlock;}publicfunctiongetmap():Array2{return_map;}publicfunctiongetresult():MatchResult{return_result;}/**********************公有办法**********************/privatefunction_initMap():void{//一维数组初始化和乱序for(varn:uint=0;n<_array.length;n++)_array[n]=0;for(vari:uint=0;i<_level;i++){for(varj:uint=0;j<_countOfPerItem;j++){_array[i*_countOfPerItem+j]=i+1;}}_array=ArrayUtil.random(_array);ArrayUtil.drawWrappedMap(_array,_map);}/***横向反省*@parama*@paramb*@return*/privatefunction_hTest(a:Point,b:Point):MatchResult{if(a.x==b.x||a.y!=b.y)returnnull;varx_start:uint=Math.min(a.x,b.x);varx_end:uint=Math.max(a.x,b.x);for(varx:uint=x_start+1;x<x_end;x++)if(_map.get(x,a.y)!=0)returnnull;return_result.fill(a.clone(),b.clone());}/***纵向反省*@parama*@paramb*@return*/privatefunction_vTest(a:Point,b:Point):MatchResult{if(a.y==b.y||a.x!=b.x)returnnull;vary_start:uint=Math.min(a.y,b.y);vary_end:uint=Math.max(a.y,b.y);for(vary:uint=y_start+1;y<y_end;y++)if(_map.get(a.x,y)!=0)returnnull;return_result.fill(a.clone(),b.clone());}/***A、B之间有一个拐点*@parama*@paramb*@return*/privatefunction_oneCorner(a:Point,b:Point):MatchResult{varc:Point=newPoint(a.x,b.y);vard:Point=newPoint(b.x,a.y);varisMatch:Boolean=false;if(_map.get(c.x,c.y)==0)//C点上必需没有停滞{isMatch=_vTest(a,c)&&_hTest(b,c);if(isMatch){_result.clear();return_result.fill(a.clone(),b.clone(),c.clone());}}if(_map.get(d.x,d.y)==0)//D点上必需没有停滞{isMatch=_hTest(a,d)&&_vTest(b,d);if(isMatch){_result.clear();return_result.fill(a.clone(),b.clone(),d.clone());}}returnnull;}/***扫描两点决意的矩形局限内有无完全的空缺线段*@parama*@paramb*@return*/privatefunction_scanLine(a:Point,b:Point):DLinkedList{varv:DLinkedList=newDLinkedList();//从a,c连线向b扫描,扫描竖线//扫描A点右边的一切线for(varx1:Number=a.x;x1>=0;x1--){varc1:Point=newPoint(x1,a.y);vard1:Point=newPoint(x1,b.y);//存在完全线路--c,d点为零且纵向连通if(_map.get(x1,a.y)==0&&_map.get(x1,b.y)==0&&_vTest(c1,d1))v.}//扫描A点右侧的一切线for(varx2:Number=a.x;x2<_map.width;x2++){varc2:Point=newPoint(x2,a.y);vard2:Point=newPoint(x2,b.y);if(_map.get(x2,a.y)==0&&_map.get(x2,b.y)==0&&_vTest(c2,d2))v.append(newLine(Line.VERTICAL,c2,d2));}//从a,d连线向b扫描,扫描横线//扫描A点下面的一切线for(vary1:Number=a.y;y1>=0;y1--){varc3:Point=newPoint(a.x,y1);vard3:Point=newPoint(b.x,y1);if(_map.get(a.x,y1)==0&&_map.get(b.x,y1)==0&&_hTest(c3,d3))v.append(newLine(Line.HORIZONTAL,c3,d3));}//扫描A点上面的一切线for(vary2:Number=a.y;y2<_map.height;y2++){varc4:Point=newPoint(a.x,y2);vard4:Point=newPoint(b.x,y2);if(_map.get(a.x,y2)==0&&_map.get(b.x,y2)==0&&_hTest(c4,d4))v.append(newLine(Line.HORIZONTAL,c4,d4));}returnv;}/***对一切找到的切合线举行判别,看看AC、DB是不是一样也能够打消*@parama*@paramb*@return*/privatefunction_twoCorner(a:Point,b:Point):MatchResult{_vector=_scanLine(a,b);if(_vector.isEmpty())returnnull;//没有完全的空缺线段,无解varitr:Iterator=_vector.getIterator();while(itr.hasNext()){varln:Line=itr.next()asLine;switch(ln.direct){caseLine.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;caseLine.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;}}returnnull;}privatefunction_findRestPointA(map:Array2=null):Point{varm:Array2=map||_map;if(m.width>=m.height){for(varcol:Number=0;col<m.width;col++){varmax_y:Number=Math.min(col+1,m.height);for(vary1:Number=0;y1<max_y;y1++){if(m.get(col,y1)!=0)returnnewPoint(col,y1);}for(varx1:Number=0;x1<col;x1++){if(m.get(x1,max_y-1)!=0)returnnewPoint(x1,max_y-1);}}}else{for(varrow:Number=0;row<m.height;row++){varmax_x:Number=Math.min(row+1,m.width);for(varx2:Number=0;x2<max_x;x2++){if(m.get(x2,row)!=0)returnnewPoint(x2,row);}for(vary2:Number=0;y2<row;y2++){if(m.get(max_x-1,y2)!=0)returnnewPoint(max_x-1,y2);}}}returnnull;}privatefunction_findRestPointB(a:Point,ignore_b_arr:Array=null):Point{if(!a)returnnull;vartempMap:Array2=ArrayUtil.cloneArray2(_map);tempMap.set(a.x,a.y,0);if(ignore_b_arr&&ignore_b_arr.length){foreach(varbb:Pointinignore_b_arr)tempMap.set(bb.x,bb.y,0);}varb:Point=_findRestPointA(tempMap);if(!b)returnnull;while(_map.get(a.x,a.y)!=_map.get(b.x,b.y)){tempMap.set(b.x,b.y,0);b=_findRestPointA(tempMap);if(!b)returnnull;}returnb;}/**********************公然办法**********************//***测试两点是不是能够连通*@parama*@paramb*@usage判别两点的值不异而且满意连通前提*@return*/publicfunctiontest(a:Point,b:Point):Boolean{_result=newMatchResult();if(_map.get(a.x,a.y)!=_map.get(b.x,b.y))returnfalse;if(_hTest(a,b)||_vTest(a,b)||_oneCorner(a,b)||_twoCorner(a,b))returntrue;elsereturnfalse;}/***主动寻觅一条可连通的路径*@return*/publicfunctionautoFindLine():MatchResult{vara:Point=_findRestPointA();if(!a)returnnull;varb:Point=_findRestPointB(a);if(!b)returnnull;varignoreA:Array=[];varignoreB:Array=[];while(!this.test(a,b)){ignoreB.push(b);b=_findRestPointB(a,ignoreB);//基于A没有能够连通的点了,换一个A尝尝if(!b){ignoreB=[];ignoreA.push(a);vartempMap:Array2=ArrayUtil.cloneArray2(_map);tempMap.set(a.x,a.y,0);if(ignoreA.length)foreach(varp:PointinignoreA)tempMap.set(p.x,p.y,0);a=_findRestPointA(tempMap);b=_findRestPointB(a);}}//找不到能够连通的B点if(!b)returnnull;return_result.clone();}/***扫除两点*@parama*@paramb*/publicfunctionearse(a:Point,b:Point):void{_map.set(a.x,a.y,0);_map.set(b.x,b.y,0);_restBlock-=2;}/***革新*/publicfunctionrefresh():void{varnum:uint=this.count;if(num<=0)return;_array=ArrayUtil.random(ArrayUtil.getWarppedMapArray(_map));ArrayUtil.drawWrappedMap(_array,_map);}}}append(newLine(Line.VERTICAL,c1,d1));
复制代码
</p>
Flash是一个非常优秀的矢量动画制作软件,它以流式控制技术和矢量技术为核心,制作的动画具有短小精悍的特点,所以被广泛应用于网页动画的设计中,以成为当前网页动画设计最为流行的软件之一。
莫相离 该用户已被删除
沙发
发表于 2015-1-17 13:57:14 | 只看该作者
考虑到实际的效果,这些专业的网站并不会去单纯追求技术本身,广告设计是否FLASH不是目的,关键是获得最好的宣传效果。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 20:57:26 | 只看该作者
富媒体可应用于各种网络服务中,如网站设计、电子邮件、BANNER、BUTTON、弹出式广告、插播式广告等。  
老尸 该用户已被删除
地板
发表于 2015-2-4 07:43:50 | 只看该作者
常见的富媒体广告形式有横幅广告(BANNER,旗帜广告)按钮广告(BUTTON)弹出窗口广告(pop-up ads,弹窗)浮动广告(floting ads,飘浮广告,floaters)插播式广告(Interstitial)全屏广告(full screen) 
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-9 19:05:53 | 只看该作者
中坚的程序员趋向于嘲笑脚本语言,但是对于那些没有计算机科学学位的人来说,脚本语言可能使他们头疼。
乐观 该用户已被删除
6#
发表于 2015-2-27 19:08:07 | 只看该作者
矢量图形有一些固有的限制。例如,照片由于包含太多的信息而不能使用矢量图形这 种形式。但是对于由实体颜色形状构成的图像,Flash很管用。
再见西城 该用户已被删除
7#
发表于 2015-3-9 14:53:11 | 只看该作者
向量图有一个特点,就是放大后的图像是不会改变的. 点阵图 向量图Flash的应用,还有再不断在完善的Action Script脚本语言。
兰色精灵 该用户已被删除
8#
发表于 2015-3-17 01:10:23 | 只看该作者
各类广告形式,相信大部分网民基本都关注过,而毋庸置疑,一个画面精美,生动活泼的互动Flash动画广告,比其他广告形式更加吸引你我的眼球。这就是Flash动画的优势。
小妖女 该用户已被删除
9#
发表于 2015-3-23 15:44:10 | 只看该作者
flash 有这么多的优势,那么它的优缺点和设计方面的关系是什么?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 22:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表