forked from: flash on 2015-12-6

by mutantleg forked from flash on 2015-12-6 (diff: 16)
♥0 | Line 95 | Modified 2015-12-06 08:48:21 | 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/kKoR
 */

// forked from mutantleg's flash on 2015-12-6
package {
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

            graphics.clear();
            graphics.lineStyle(2, 0);
            
            for (i=0;i<32;i+=1)
            {
                setWall(Math.random()*mw,Math.random()*mh,1,1, 1);                
                
            }//nexti



            for (i=0;i<mh;i+=1)
            {
                yt = i* mw;
                for (k=0;k<mw;k+=1)               
                {
                    if (vecGrid[yt+k]<=0) {continue;}
                    graphics.beginFill(0,1);
                     graphics.drawRect(k*cw,i*ch,cw,ch);
                    graphics.endFill();
                }//nextk
            }//nexti
        

            var i:int; var k:int; var yt:int;
            var aw:int; var ah:int;
            var w:int;
            var ax:int; var ay:int;
            

            graphics.lineStyle(4, 0);            
            graphics.drawRect(0,0,mw*cw,mh*ch);

            graphics.lineStyle(2, 0);            
            //graphics.drawCircle(160,120, 64);
            
            aw =1;ah=1;

            for (i=0;i<mh;i+=1)
            {
                for (k=0;k<mw;k+=1)               
                {
                   if (isWall(k,i)) { continue;}
                    
                    aw = 1; ah = 1;
                    ax =1;ay=1;
                   
                   for (w=0;w<12;w+=1)
                   {
                     if (hasWall(k,i, aw+1,ah)==false) { aw +=1; } else { ax=0;}
                     if (hasWall(k,i, aw,ah+1)==false) { ah +=1; } else { ay=0;}
                     if (ax<=0&&ay<=0) { break; }                    
                     //if (ah > aw+2 ) { break; }
                   }//nextw
                   
                   /*
                    for (w=0;w<3;w+=1)
                    { if (hasWall(k,i,aw+1,ah)){break;} else { aw+=1; } }
                    for (w=0;w<3;w+=1)
                    { if (hasWall(k,i,aw,ah+1)){break;} else { ah+=1; } }
                    */
                    
                    setWall(k,i, aw,ah, 1);
                    
                    graphics.drawRect(k*cw,i*ch,aw*cw,ah*ch);
                    graphics.moveTo(k*cw,i*ch);
                    graphics.lineTo(k*cw+aw*cw,i*ch+ah*ch);
                    
                }//nextk
            }//nexti            
            
           // graphics.drawCircle(160,120, 32);
            
            
        }//ctor
        
        public var mw:int = 16;
        public var mh:int = 16;
        public var cw:Number = 16;
        public var ch:Number = 16;
        
        public var vecGrid:Vector.<int> = new Vector.<int>(16*16, false);
        
        public function isWall(ax:int, ay:int):Boolean
        { if (ax<0||ax>=mw||ay<0||ay>=mh) { return true;} return vecGrid[ax+(ay*mw)]>0; }

        public function setWall(ax:int, ay:int, aw:int, ah:int, t:int):void
        {
          var i:int; var k:int; var yt:int;
          var ex:int; var ey:int;
          ex = ax+aw;
          ey= ay+ah;
          if (ax<0) {ax=0;} if (ay<0) {ay=0;}
          if (ex>=mw){ex=mw;} if (ey>=mh){ey=mh;}
            for (i=ay;i<ey;i+=1)
            {
                yt = i*mw;
                for (k=ax;k<ex;k+=1)               
                {
                  vecGrid[k+yt] = t;
                }//nextk
            }//nexti           
        }//setwall

        public function hasWall(ax:int, ay:int, aw:int, ah:int):Boolean
        {
          var i:int; var k:int; var yt:int;
          var ex:int; var ey:int;
          ex = ax+aw;
          ey= ay+ah;
          if (ex>mw) { return true;}
          if (ey>mh){return true;}
          if (ax<0) {return true;}
          if (ay <0) { return true;}
            for (i=ay;i<ey;i+=1)
            {
                yt = i*mw;
                for (k=ax;k<ex;k+=1)               
                {
                  if (vecGrid[yt+k] > 0) { return true;}
                }//nextk
            }//nexti
           return false;           
        }//haswall


        
        
    }//classend
}