flash on 2016-2-3

by mutantleg
♥0 | Line 111 | Modified 2016-02-03 06:43:37 | 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/AtCs
 */

package {
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            map = new BitmapData(465,465, false, 0xFFffFFff);
            
            var i:int; var r:Rectangle;
            var ta:Number;
            ta = 0;
            r = new Rectangle(0,330,1,465);
            for (i=0;i<465;i+=1)
            {                
                if (r.y<0) {r.y = 0; }
                if (r.y>400) {r.y=400;}
                map.fillRect(r, 0x0);
                //r.y += Math.random()*16 -8;
                r.y += Math.sin(ta)*2;
                ta +=Math.random()*0.8-0.4;
                r.x += 1;
            }//nexti
            
            graphics.beginBitmapFill(map, null,false,false);
             graphics.drawRect(0,0,465,465);
            graphics.endFill();
            
            vecTank = new Vector.<xTank>(0,false);
            var a:xTank;
            for (i=0;i<8;i+=1)
            {
              a = new xTank();
               a.cx=Math.random()*430; a.cy=330;
              var k:int;
              for (k=0;k<430;k+=1) { if (isWall(a.cx,a.cy+1)==false) { a.cy+=1;} else { break; } }  
              for (k=0;k<430;k+=1) { if (isWall(a.cx,a.cy)) { a.cy-=1;} else { break; } }  
             vecTank.push(a);              
            }//nexti

            stage.addEventListener(MouseEvent.CLICK, onClick);            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function onClick(e:MouseEvent):void
        {
            mclick = 1;
        }//onclick
        
        public var round:int = 0;
        public var mclick:int = 0;
        
        public var map:BitmapData;
        public var vecTank:Vector.<xTank>;
        
        public function isWall(ax:Number,ay:Number):Boolean
        { return map.getPixel(ax,ay)<256; }

        public var curTank:int = 0;

        public function onEnter(e:Event):void
        {
          graphics.clear();
          graphics.lineStyle(2, 0);
          
            graphics.beginBitmapFill(map, null,false,false);
             graphics.drawRect(0,0,465,465);
            graphics.endFill();
       
             graphics.lineStyle(2,0xff);
              var i:int; var num:int; var a:xTank;
              num=vecTank.length;
              for(i=0;i<num;i+=1)
              {
                a = vecTank[i];
                var k:int;
                for (k=0;k<8;k+=1)  { if (isWall(a.cx,a.cy+1)==false) { a.cy+=1;} else { break; } }  
                 graphics.beginFill(i==curTank?0x808080:0xffFFffFF,1);
                  graphics.drawCircle(a.cx,a.cy, 4);
                 graphics.endFill(); 
                 graphics.moveTo(a.cx,a.cy);
                 graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
              }//nexti     
                
          a = vecTank[curTank];
          a.ang = Math.atan2(stage.mouseY-a.cy, stage.mouseX-a.cx);
          
          graphics.lineStyle(1,0);
         // graphics.moveTo(stage.mouseX,stage.mouseY);
        //  graphics.lineTo(a.cx,a.cy);
          
          var d:Number;
          d = getMag(a.cx-stage.mouseX,a.cy-stage.mouseY);
          if (d<32){d=32;}
          d /= 256;
          d*=2;
          if (d <0) {d=0;} else if (d >1) {d =1;}
          graphics.moveTo(a.cx,a.cy);
          graphics.lineTo(a.cx+Math.cos(a.ang)*d*128,a.cy+Math.sin(a.ang)*d*128);
          
          var ax:Number; var ay:Number;
          var vx:Number; var vy:Number;
          ax = a.cx; ay= a.cy;
          vx = Math.cos(a.ang)*8*d; vy=Math.sin(a.ang)*8*d;
          for(i=0;i<256;i+=1)
          {
           if (isWall(ax,ay)) {break;}
           ax+=vx;ay+=vy;
           vy+=0.2;
           graphics.drawCircle(ax,ay,2);  
          }//nexti

          if (mclick > 0)
          { mclick = 0;
            curTank +=1; if (curTank >= vecTank.length) { curTank = 0; round += 1; }            
            var r:Rectangle;
            r = new Rectangle(ax-16,ay-16,32,32);
            map.fillRect(r, 0xFFffFFff);                    
          }//endif               
                
        }//onenter        

        public function getMag(ax:Number,ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }        
        
    }//classend
}


internal class xTank
{
  public var cx:Number = 0;
  public var cy:Number = 0;
  public var ang:Number = 0;  
    
}//xtank