flash on 2016-4-2

by mutantleg
♥0 | Line 138 | Modified 2016-04-02 09:59:48 | 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/MuMz
 */

package {
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            deb = new TextField();
            deb.width=320; deb.height=240;
            deb.mouseEnabled=false;
            addChild(deb); 
            
            
            initEmpty(16,16);
            
            for (i=0;i<16;i+=1)  { setTile(i, 14, 1); }
            setLine(4,3, 1, 5);
            setLine(4,7, 1, 5);
                 setLine(12,7, 1, 1);
       
            setLine(1,11, 1, 5);
            setLine(8,11, 1, 5);
            
            graphics.clear();
            graphics.lineStyle(2,0);
            
            var ax:Number; var ay:Number;
            var i:int; var k:int; var yt:int; var t:int;
            for (i=0;i<mh;i+=1)
            {
             yt = i * mw;
             for (k=0;k<mw;k+=1)
             {
               t = vecGrid[k+yt];
               if (t<=0) { continue; }
               ax=k*cw;ay=i*ch; 
                 graphics.beginFill(0x404040, 1); 
                     graphics.drawRect(ax,ay,cw,ch);           
                 graphics.endFill();  

              continue;
             }//nextk
            }//nexti
            
            var b:xNode;
           var a:xNode; var num:int;
           var vecNode:Vector.<xNode>;
           vecNode = new Vector.<xNode>(0,false); 
            
           for (i=0;i<mh;i+=1)
           {
             yt = i * mw;
             for (k=0;k<mw;k+=1)
             {
               t = vecGrid[k+yt];
               if (t>0) { continue; }               
               if (getTile(k,i+1) <= 0) { continue; }
               
              // if (getTile(k+1,i+1) > 0) {continue;}
              if ((getTile(k-1,i+1) <= 0 || getTile(k+1,i+1) <= 0) ==false ) {continue;}
               
            //   if (getTile(k-1,i+1) <= 0) { continue; }
               
               
               ax=k*cw;ay=i*ch; 

               a = new xNode();
                a.cx = ax+cw*0.5;
                a.cy = ay+ch*0.5;
                a.tx=k; 
                a.ty=i;
                a.dir=1;
               vecNode.push(a);
               
        
               if (getTile(k-1,i+1) <= 0) { b = a; a.dir =-1; }
               else if (b!=a)
               {
                  a.vecNext.push(b);
                  b.vecNext.push(a);                              
               }//endif
            
             }//nextk
           }//nexti 


/*           
            var w:int;
           num = vecNode.length;
           for (i=0;i<num;i+=1)
           {
             a = vecNode[i];
             for (k=i+1;k<num;k+=1)
             {
               b = vecNode[k];
               if (a.cy != b.cy) { continue; }
               
               if (a.dir == b.dir) { continue; }
               
                  a.vecNext.push(b);
                  b.vecNext.push(a);                
               
                 
             }//nextk
             
           }//nexti
*/

           
           num = vecNode.length;
           for (i=0;i<num;i+=1)
           {
             a = vecNode[i];
             graphics.drawCircle(a.cx,a.cy, 4);
               
               
             for (k=0;k<32;k+=1)
             {
               if (getTile(a.tx-1,a.ty+k+1)>0)
               { 
                 ax=(a.tx-1)*cw; ay=(a.ty+k)*ch; 
                 b = new xNode();
                 b.cx = ax+cw*0.5;
                 b.cy = ay+ch*0.5;
                 vecNode.push(b); 
                  a.vecNext.push(b);
                  b.vecNext.push(a);                
                 break;}   
             }//nextk  
             for (k=0;k<32;k+=1)
             {
               if (getTile(a.tx+1,a.ty+k+1)>0)
               { 
                 ax=(a.tx+1)*cw; ay=(a.ty+k)*ch; 
                 b = new xNode();
                 b.cx = ax+cw*0.5;
                 b.cy = ay+ch*0.5;
                 vecNode.push(b);                 
                  a.vecNext.push(b);
                  b.vecNext.push(a);                
                 break;}   
             }//nextk  
           }//nexti

            var nk:int;           
           num = vecNode.length;
           for (i=0;i<num;i+=1)
           {
             a = vecNode[i];
             graphics.drawCircle(a.cx,a.cy, 8);
  
              if (a.dir !=0)
              {
                graphics.moveTo(a.cx,a.cy);
                graphics.lineTo(a.cx+a.dir*16,a.cy);  
              }
             
             nk = a.vecNext.length;
             for (k=0;k<nk;k+=1)
             {
               b = a.vecNext[k];
               graphics.moveTo(a.cx,a.cy);
               graphics.lineTo(b.cx,b.cy);
             }//nextk
             
           }//nexti 
           
        }//ctor
        
        public var deb:TextField;
        
        
        public var vecGrid:Vector.<int>;
        public var mw:int = 0;         public var mh:int = 0;
        public var cw:Number = 32;     public var ch:Number = 32;

        public function initEmpty(aw:int, ah:int):void
        { mw=aw; mh=ah; vecGrid = new Vector.<int>(aw*ah, false); }

        public function setTile(ax:int, ay:int, t:int):void
        { if (ax<0||ax>=mw||ay<0||ay>=mh) {return;} vecGrid[ay*mw+ax]=t; }

        public function getTile(ax:int, ay:int ):int
        { if (ax<0||ax>=mw||ay<0||ay>=mh) {return 0;}  return vecGrid[ay*mw+ax]; } 
        
        public function setLine(ax:int, ay:int, t:int, w:int):void
        { var i:int; for(i=0;i<w;i+=1) { setTile(ax+i,ay, t);} }
        
        
        
        
        
        
    }//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 dir:int =0;
    
    public var vecNext:Vector.<xNode> = new Vector.<xNode>(0,false);
    
}//xnode