flash on 2017-1-28

by mutantleg
♥0 | Line 105 | Modified 2017-01-28 06:56:56 | 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/WYWR
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            stage.quality ="LOW";
            
           mw=16;mh=16;
           vecMap=new Vector.<int>(mw*mh,false);
           vecFlood=new Vector.<int>(mw*mh,false);
           vecTemp=new Vector.<int>(mw*mh,false);
            
            setWall(2,2, 1);
            setWall(2,3, 1);
            
            var i:int;
            for(i=0;i<64;i+=1)
            {
                setWall(i,9,1);
              setWall(Math.random()*mw, Math.random()*mh,1);   
            }
            
            setWall(8,9,0);
            
            setWall(4,4,0);
            setFlood(4,4,3);
            
           stage.addEventListener(Event.ENTER_FRAME, onEnter); 
        }//ctor
        
        public var vecMap:Vector.<int>;
        public var vecFlood:Vector.<int>;
        public var vecTemp:Vector.<int>;
        public var mw:int = 0;
        public var mh:int = 0;
        public var cw:Number=16;
        public var ch:Number=16;
        
        public function setWall(ax:int, ay:int, t:int):void
        { if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecMap[ax+(ay*mw)]=t; }
        
        public function getWall(ax:int, ay:int):int
        { if (ax<0||ax>=mw||ay<0||ay>=mh){return 1;} return vecMap[ax+(ay*mw)];  }

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

        public function setTemp(ax:int, ay:int, t:int):void
        { if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecTemp[ax+(ay*mw)]=t; }
        
        public function incFlood(ax:int, ay:int, t:int):void
        { var k:int;
          k = getFlood(ax,ay); 
          k+=t; 
          setTemp(ax,ay,k);          
        }
 
         public var gt:int = 0;
 
        public function onEnter(e:Event):void
        {
          graphics.clear();
          graphics.lineStyle(2, 0);
          

          setWall(4,4,0);
          setFlood(4,4,6);
          
 
          var mx:Number; var my:Number;
          mx=stage.mouseX; my=stage.mouseY;
          setFlood(Math.floor(mx/cw),Math.floor(my/ch), 6); 
          
          var t:int; var yt:int;
          var i:int; var k:int;
          for(i=0;i<mh;i+=1)
          { yt=i*mw;
            for(k=0;k<mw;k+=1)
            {
               //graphics.drawRect(k*cw,i*ch,cw,ch);
               
               t = vecMap[k+yt]; 
               if (t==1) { 
                graphics.beginFill(0,1);
                 graphics.drawRect(k*cw,i*ch,cw,ch);
                graphics.endFill();
               }
               
               t = vecFlood[k+yt];
               if (t>0) { 
                graphics.beginFill(0xFF+((t*32)<<8),0.5);
                 graphics.drawRect(k*cw,i*ch,cw,ch);
                graphics.endFill();
               }
               
               
            }//nextk  
          }//nexti  

            gt+=1;
            
          if (gt%8==0)
          {
              
              for(i=0;i<mh;i+=1)
              { yt=i*mw;
                for(k=0;k<mw;k+=1)
                {
                   
                   t = vecFlood[k+yt];
                   t-=1; if (t<0){t=0;}
                   if (getFlood(k-1,i) > t) { t= getFlood(k-1,i)-1; }                
                   if (getFlood(k+1,i) > t) { t= getFlood(k+1,i)-1; }                
                   if (getFlood(k,i+1) > t) { t= getFlood(k,i+1)-1; }                
                   if (getFlood(k,i-1) > t) { t= getFlood(k,i-1)-1; }                
                   vecTemp[k+yt]=t; 
              
                }//nextk  
              }//nexti  
              
              var swp:Vector.<int>;
              swp = vecFlood; vecFlood=vecTemp; vecTemp=swp;
    
              
              var nw:int;
              nw=mw*mh;
              for (i=0;i<nw;i+=1) { vecTemp[i]=0; }
          }//endfi
            
        }//onenter
        

    }//classend
}