flash on 2016-3-27

by mutantleg
♥0 | Line 128 | Modified 2016-03-27 19:01:52 | 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/832M
 */

package {
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

          //scaleX = scaleY = 0.1;

                
          initEmpty(128, 128);
          var i:int;
          for (i=0;i<640;i+=1)
          {
            setTile(Math.random()*mw, Math.random()*mh, 70);    
          }
        
          stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
          stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
          stage.addEventListener(Event.ENTER_FRAME, onEnter);      
        }//ctor
        
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
        public function isKeyDown(k:int):Boolean { return vecKey[k]==true; }
        public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
        public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }

        
        
        public var cx:Number = 256;
        public var cy:Number = 16;
        public var cz:Number = 256;
        
        
        public function onEnter(e:Event):void
        {
            
            var mx:Number; var my:Number;
            mx = stage.mouseX; my = stage.mouseY;

            var wmx:Number; var wmy:Number; var wmz:Number;           
            var ax:Number; var ay:Number; var az:Number;
                ay = (2*my - (mx-rendw)) * 0.5 ;
                ax = (mx-rendw) + ay ;
                ax+=camx; ay+=camz;
                wmx = ax; wmz = ay; wmy = 0;

            
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            drawBox3(0,0,0, 512,-8,512);
            drawBox3(0,0,0, mw*cw,32,mh*ch);
            
            
 
            drawMap();           
            
            var ms:Number;
            var kx:Number; var ky:Number;
            kx=0;ky=0;
            ms = 8;
              if (isKeyDown(Keyboard.UP))    { ky-=ms; kx-=ms; }
              if (isKeyDown(Keyboard.DOWN))  { ky+=ms; kx+=ms; }
              if (isKeyDown(Keyboard.LEFT))  { kx-=ms; ky+=ms; }
              if (isKeyDown(Keyboard.RIGHT)) { kx+=ms; ky-=ms; } 
              
              
         //     cx+=kx; cz+=ky;
            
            if (isWall(cx+kx,cz)) {kx= 0;} cx+=kx; 
            if (isWall(cx,cz+ky)) {ky = 0;}cz+=ky; 
            
            drawBox2(cx,cy,cz, 16,16,16);
            
            //var ax:Number; var az:Number;
            
            ax = cx-256;
            az = cz-256;
            
            camx += (ax-camx)*0.1;
            camz += (az-camz)*0.1;
     
           drawBox2(wmx,wmy,wmz, 4,1,4);
            
            
        }//onenter
        
        
        public function isWall(ax:Number, ay:Number):Boolean
        { return isWall2(Math.floor(ax/cw), Math.floor(ay/ch));  }
        
        public function isWall2(ax:int, ay:int):Boolean
        { if (ax<0||ax>=mw||ay<0||ay>=mh) {return true;} return (getTile(ax,ay) >0);  }
        
        
        public function drawMap():void
        {
          var i:int; var k:int; var yt:int; var h:int;
          var ax:int; var ay:int;
          var ex:int; var ey:int;
                
           ax = 0; ay = 0;
           ax = camx/cw -3;           ay = camz/ch -3;
           if (ax<0) { ax=0; }           if (ay<0) { ay=0; }
           
           ex = ax+16+6; ey = ay+16+6;
           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)
             {
               h = vecGrid[yt+k]; if (h<4){continue;}
               drawBox3(k*cw,0,i*ch, cw, h, ch);            
             }//nextk
           }//nexti  
            
            
        }//drawmap
        
        
        
         
        public var mw:int = 0;
        public var mh:int = 0;
        public var cw:Number = 32;
        public var ch:Number = 32;
        
        public var vecGrid:Vector.<int>; 
        
               
        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 var camx:Number = 0;        public var camy:Number = 0;        public var camz:Number = 0; 
        public var rendw:Number = 465 * 0.5;        public var rendh:Number = 465 * 0.5; 
        public function drawLine(ax:Number, ay:Number, az:Number,
        bx:Number, by:Number, bz:Number):void
        {
           var sx:Number; var sy:Number;     
           ax -= camx; ay -= camy; az -= camz;
           bx -= camx; by -= camy; bz -= camz;
            sx = ax - az + rendw;     sy = (ax * 0.5) + (az * 0.5) - ay;
            graphics.moveTo(sx,sy);
            sx = bx - bz + rendw;     sy = (bx * 0.5) + (bz * 0.5) - by;
            graphics.lineTo(sx, sy);
        }//drawline 

        public function drawBox3(ax:Number,ay:Number,az:Number,
        aw:Number,ah:Number,ad:Number):void
        { drawBox(ax,ay,az, ax+aw,ay+ah,az+ad); }
        
        public function drawBox2(ax:Number,ay:Number,az:Number,
        rx:Number,ry:Number,rz:Number):void
        { drawBox(ax-rx,ay-ry,az-rz,ax+rx,ay+ry,az+rz); }
           
         public function drawBox(ax:Number, ay:Number, az:Number,
          bx:Number, by:Number, bz:Number):void
        {
          drawLine(ax, ay, az,   bx, ay, az);
          drawLine(ax, by, az,   bx, by, az);
          drawLine(ax, ay, bz,   bx, ay, bz);
          drawLine(ax, by, bz,   bx, by, bz);
          
          drawLine(ax, ay, az,   ax, by, az);
          drawLine(bx, ay, az,   bx, by, az);
          drawLine(ax, ay, bz,   ax, by, bz);
          drawLine(bx, ay, bz,   bx, by, bz);
          
          drawLine(ax, ay, az,   ax, ay, bz);
          drawLine(bx, ay, az,   bx, ay, bz);
          drawLine(ax, by, az,   ax, by, bz);
          drawLine(bx, by, az,   bx, by, bz);
        }//drawbox    
        
        
    }//classend 
}