flash on 2016-10-11

by mutantleg
♥0 | Line 112 | Modified 2016-10-11 04:35:16 | 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/SIVb
 */

package {
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            mw=12; mh=12;
            vecGrid = new Vector.<int>(mw*mh, false);
            
            var i:int;
            for(i=0;i<mw;i+=1)
            {
                 setWall(i,0,1); setWall(0,i,1); 
              //   setWall(i,mh-1,1); setWall(mw-1,i,1); 
            }
            
            for (i=0;i<16;i+=1)
            { setWall(Math.random()*mw, Math.random()*mh,1); }
            
            setWall(3,3, 1);
            setWall(5,3, 1);
            setWall(3,5, 1);
            
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor

        public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
        public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
        public function isKey(k:int):Boolean { return vecKey[k]; }
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512, false); 
        
        public var vecGrid:Vector.<int>;
        public var mw:int = 8;
        public var mh:int = 8;
        
        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, t:int):void
        { if(ax<0||ax>=mw||ay<0||ay>=mh){return;}  vecGrid[ax+(ay*mw)] = t; }

        //public function isWall2(ax:Number, ay:Number):Boolean
        //{ return isWall(ax/32, ay/32); }

        public var cx:Number = 128+16;
        public var cy:Number = 128+16;        
 
        public var x0:Number = 0;
        public var y0:Number = 0;
        public var x1:Number = 0;
        public var y1:Number = 0;
        public var u0:Number = 1;
        public var gx:int = 0;
        public var gy:int = 0;
        
        public function onEnter(e:Event):void
        {
           graphics.clear();
           graphics.lineStyle(2, 0);
            
           graphics.drawRect(0,0, mw*32, mh*32); 
            
           var i:int; var k:int;
           var yt:int; var t:int;
           for (i=0;i<mh;i+=1)
           {
               yt = mw*i;
               for (k=0;k<mw;k+=1)
               {
                   t = vecGrid[yt+k];
                   if (t<=0){ continue; }
                   if (t==2){ continue; }
                   graphics.beginFill(0x808080,1);
                   graphics.drawRect(k*32,i*32,32,32);
                   graphics.endFill();
               } //nextk
           } //nexti
           
           var ms:Number;
           var vx:Number; var vy:Number;
           vx=0; vy=0; ms =4;
           if (isKey(Keyboard.UP))    { vy =-ms; }
           if (isKey(Keyboard.DOWN))  { vy = ms; }
           if (isKey(Keyboard.LEFT))  { vx =-ms; }
           if (isKey(Keyboard.RIGHT)) { vx = ms; }
           
 
           var tx:int; var ty:int;   
           tx = Math.floor(cx / 32);
           ty = Math.floor(cy / 32);

           var kx:Number; var ky:Number;
           kx = Math.floor(cx/32)*32;
           ky = Math.floor(cy/32)*32;

           var wx:int; var wy:int;
           wx = vx > 0 ? 1 : (vx < 0 ? -1 : 0);
           wy = vy > 0 ? 1 : (vy < 0 ? -1 : 0);
           
          
           var whit:int;
           whit = 0;

           if (isWall(tx+1,ty)&&vx>0) { if (cx+vx>(kx+16)){vx=0; whit=1;} }
           if (isWall(tx-1,ty)&&vx<0) { if (cx+vx<(kx+16)){vx=0; whit=1;} }
           if (isWall(tx,ty+1)&&vy>0) { if (cy+vy>(ky+16)){vy=0; whit=1;} }
           if (isWall(tx,ty-1)&&vy<0) { if (cy+vy<(ky+16)){vy=0; whit=1;} }
           
           if (u0>=1 && whit>0 && (wx==0||wy==0)&&isWall(tx+wx, ty+wy))
           { if (isWall(tx+wx+wx,ty+wy+wy)==false) 
               { 
                 setWall(tx+wx,ty+wy,0);
                 setWall(tx+wx+wx, ty+wy+wy, 2);                
             //    if (u0<1) { setWall(gx,gy,1); }
 
                 gx=tx+wx+wx; gy=ty+wy+wy;        
                 x0 = (tx+wx)*32; y0 = (ty+wy)*32;
                 x1 = (tx+wx+wx)*32; y1 = (ty+wy+wy)*32;
                 u0 = 0;                
               }
            }
         
           cx+=vx; cy+=vy;
           
           graphics.drawCircle(cx,cy,16);
           graphics.drawCircle(cx,cy,2);
           
           //graphics.drawRect(kx,ky,32,32);
          
          graphics.lineStyle(2, 0xFF0000); 
           if (u0 < 1.0)
           { 
            u0+=0.1;
            graphics.beginFill(0x808080,1);
               graphics.drawRect(x0+(x1-x0)*u0, y0+(y1-y0)*u0, 32,32);
            graphics.endFill();
            if (u0>=1)
            { setWall(gx, gy, 1); }                
          }//endif
           
           
        }//onenter
        
    }//classend
}