flash on 2016-3-15

by mutantleg
♥0 | Line 120 | Modified 2016-03-15 06:47:30 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/QKt0
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            stage.quality= "LOW";
            
           var i:int; var k:int; var yt:int;
           var a:xNode;
           
           mw=12;mh=12;
           vecNode = new Vector.<xNode>(mw*mh,false);
           for (i=0;i<mh;i+=1)
           {
             yt = i*mw;
             for (k=0;k<mw;k+=1)
             {   
               a = new xNode();
               vecNode[k+yt] = a;
                a.cx = k*cw+cw*0.5;
                a.cy = i*ch+ch*0.5;
                a.tx = k;
                a.ty = i;
                a.wall = Math.random()>0.75?1:0;
             }//nextk  
           }//nexti
            
           stage.addEventListener(Event.ENTER_FRAME, onEnter); 
        }//ctor
      
       public var vecNode:Vector.<xNode> = new Vector.<xNode>(0, false); 
       public var mw:int = 16;       public var mh:int = 16;
       public var cw:Number = 32;       public var ch:Number = 32;

       public function getNode(ax:Number,ay:Number):xNode
       { var tx:int;var ty:int;
        tx =Math.floor(ax/cw); ty = Math.floor(ay/ch) ;
         if(tx<0||ty<0||tx>=mw||ty>=mh){return null; }       
         return vecNode[tx+ty*mw];           
       }//getnode
       public function getNode2(tx:int,ty:int):xNode
       {  if(tx<0||ty<0||tx>=mw||ty>=mh){return null; }    return vecNode[tx+ty*mw]; }          
       
       public function onEnter(e:Event):void
       {
           graphics.clear();
           graphics.lineStyle(2, 0);

            fillNode(stage.mouseX,stage.mouseY);

           var a:xNode;var b:xNode;
           var i:int; var num:int;
           num=vecNode.length;
           for (i=0;i<num;i+=1)
           {
               a = vecNode[i];
               if (a.wall>0)
               {
                 graphics.drawRect(a.tx*cw,a.ty*ch,cw,ch);                   
                  continue;     
               }//endif
               if (a.frame!=curFrame){continue;}
               
                     var k:int; var w:int;
             for (k=-1;k<2;k+=1)
             { for (w=-1;w<2;w+=1) {
               if (w!=0 &&k!=0){continue;}
               b=getNode2(a.tx+k,a.ty+w);
               if (b==null){continue;}
               if (b.wall>0){continue;}
               if(b.frame!=curFrame){continue;}
               if (b.d>=a.d){continue; }
               //graphics.moveTo(a.cx,a.cy); graphics.lineTo(b.cx, b.cy); 
               var ta:Number;
               ta= Math.atan2(b.cy-a.cy,b.cx-a.cx);
               graphics.moveTo(a.cx,a.cy);
               graphics.lineTo(a.cx+Math.cos(ta)*12,a.cy+Math.sin(ta)*12);
             }}//nextkw      
               
               graphics.drawCircle(a.cx,a.cy,4);

//               if (a.parent !=null)
 //              { b =a.parent; graphics.moveTo(a.cx,a.cy); graphics.lineTo(b.cx, b.cy); }
           
           }//nexti
            
                       
           
       }//onenter 
        
       public var vecTemp:Vector.<xNode> = new Vector.<xNode>(2048, false); 
       public var curFrame:int = 0; 
        
       public function fillNode(ax:Number, ay:Number):void
       {
         var it:int; var a:xNode; var i:int;  
         var b:xNode;
         curFrame+=1;
         a = getNode(ax,ay);
         if (a ==null){return;}
          vecTemp[0] =a;
          it=1;
          a.d =0;
          a.frame = curFrame;
          
         for (i=0;i<4096;i+=1)
         {
            it -=1; if (it<0){ return; }
            a = vecTemp[it]; 
 
             var k:int; var w:int;
             for (k=-1;k<2;k+=1)
             { for (w=-1;w<2;w+=1) {
               if (w!=0 &&k!=0){continue;}
               b=getNode2(a.tx+k,a.ty+w);
               if (b==null){continue;}
               if (b.wall>0){continue;}
               if(b.frame==curFrame){continue;}
                b.frame=curFrame;
                b.parent=a;
              //  b.d =a.d+1;
                b.d = getMag2(b.cx-ax,b.cy-ay) + a.d;
               vecTemp[it]=b;it+=1; if (it>=2048){it-=1;}                  
             }}//nextkw             
         }//nexti 
           
           
       }//fillnode
       
       public function getMag(ax:Number,ay:Number):Number
       {return Math.sqrt(ax*ax+ay*ay); }
        
       public function getMag2(ax:Number,ay:Number):Number
       {return (ax*ax+ay*ay); }
        
        
        
    }//classend
}

internal class xNode
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var tx:int = 0;
  public var ty:int = 0;
  public var wall:int =0;
  public var parent:xNode = null;   
  public var frame:int = -1;
  public var d:int = 0;
    
}//xnode