flash on 2016-10-22

by mutantleg
♥0 | Line 80 | Modified 2016-10-22 20:53:49 | 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/66lB
 */

package {
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            mw = 10;
            mh = 8;
            vecGrid = new Vector.<int>(mw*mh, false);
            
            setTile(1,1,1);
            
            setTile(5, 0, 1);
            setTile(5, 1, 1);
            setTile(4, 4, 1);
            
            setTile(4, 3, 2);
            
            setTile(6,3,3);
            
            setTile(7,0,4);
 
            //setTile(4, 7, 2);
            
           stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        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 setTile(ax:int, ay:int, t:int):void
        { if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecGrid[ax+(ay*mw)]=t; }
        
        public function getTile(ax:int, ay:int):int 
        {  if (ax<0||ax>=mw||ay<0||ay>=mh){ return 1;} return vecGrid[ax+(ay*mw)];  }
        
        public function onTile(ax:int, ay:int):void
        { var t:int; t = getTile(ax,ay); 
            if (t==2){ vx=4; vy= 0; }
            if (t==3){ vx=0; vy=-4; }
            if (t==4){ vx=0; vy= 4; }
        }//ontile
        
        
        public var prevTile:int = -1;
        public var cx:Number = 16;
        public var cy:Number = 16;
        public var vx:Number = 4;
        public var vy:Number = 0;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            graphics.drawRect(0,0,cw*mw,ch*mh);
            
            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){ 
            graphics.drawRect(k*cw,i*ch,cw,ch);
            t = vecGrid[yt+k];
               if(t==1){ graphics.beginFill(0);  graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
               if(t==2){ graphics.beginFill(0x4455FF);  graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
               if(t==3){ graphics.beginFill(0x881100);  graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
               if(t==4){ graphics.beginFill(0x33F122);  graphics.drawRect(k*cw,i*ch,cw,ch); graphics.endFill(); }
             } }
            
            graphics.lineStyle(2,0xFF0000);
            graphics.drawCircle(cx,cy, 8);
            
            var wx:Number;
            var tx:int; var ty:int;
            var ax:Number; var ay:Number;
            tx = Math.floor(cx/cw); ty =Math.floor(cy/ch);
            
            
            graphics.drawRect(tx*cw,ty*ch,cw,ch);
            
            ax = tx*cw+cw*0.5; ay =ty*ch+ch*0.5;
            graphics.drawCircle(ax,ay,2);
            
            cx += vx; cy+=vy;

            
            t = tx+(ty*mw);
            if (prevTile != t)
            {
              if (vx>0 && cx>ax) { prevTile=t; onTile(tx,ty); cx=ax; }   
              if (vx<0 && cx<ax) { prevTile=t; onTile(tx,ty); cx=ax; }   
              if (vy>0 && cy>ay) { prevTile=t; onTile(tx,ty); cy=ay; }   
              if (vy<0 && cy<ay) { prevTile=t; onTile(tx,ty); cy=ay; }                  
            }//endif

            
            if (vx>0 && getTile(tx+1,ty) == 1)
            { if(cx>ax){cx=ax; wx=vx; vx=-vy; vy=wx;  } }
            if (vy>0 && getTile(tx,ty+1) == 1)
            { if (cy>ay){cy=ay; wx=vx; vx=-vy; vy=wx; } }
            if (vx<0 && getTile(tx-1,ty) == 1)
            { if(cx<ax){cx=ax; wx=vx; vx=-vy; vy=wx;  } }
            if (vy<0 && getTile(tx,ty-1) == 1)
            { if(cy<ay){cy=ay; wx=vx; vx=-vy; vy=wx;  } }
            
            
        }//onenter
        
        
        
    }//classend
}