flash on 2015-1-18

by mutantleg
♥0 | Line 142 | Modified 2015-01-18 07:29:39 | 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/x7aZ
 */

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() {


            var a:xActor;
            a = new xActor(); a.spec = 1; vecAct[0] = a;           
            a.cx = 235; a.cy = 235;
            a.team = 3;
            
            a = makeNew(vecAct);           
            a.cx = 23; a.cy = 23; a.spec = 3; a.rad = 32;
            a.ang = Math.random() * 6.28;
            a.vx = Math.cos(a.ang) * 2;
            a.vy = Math.sin(a.ang) * 2;
            
            
            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 onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true;  }
        public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
        public function isKeyDown(k:int):Boolean { return vecKey[k]; }


       public var gt:int = 0;       
        
        public var vecAct:Vector.<xActor> = new Vector.<xActor>(32,false);
        public var vecBull:Vector.<xActor> = new Vector.<xActor>(16,false);
        
        
        public function makeNew(vec:Vector.<xActor>):xActor
        {
            var i:int; var num:int; var a:xActor;   num = vec.length;
            for (i = 0; i < num; i++)
            { a = vec[i]; if (a == null) { break;  } }
            a = new xActor(); vec[i] = a; return a;
        }//makenew
        
        public function checkCol(ta:xActor, vec:Vector.<xActor>):xActor
        {
            var i:int; var num:int; var a:xActor;   num = vec.length;
            var r:Number;
            for (i = 0; i < num; i++)
            {
              a = vec[i]; if (a == null) { continue; }
              if (a  == ta) { continue; } 
              if (a.team == ta.team) { continue; }
              r = getMag(a.cx-ta.cx, a.cy-ta.cy);
              if (r < (a.rad + ta.rad)) { return a; }
            }//nexti
            
            return null;
        }//checkcol
        
        public function getMag(ax:Number, ay:Number):Number
        { return Math.sqrt(ax*ax+ay*ay); }
        
        
        public function upVec(vec:Vector.<xActor>):void
        {
            var b:xActor;
            var i:int; var num:int; var a:xActor; 
            num = vec.length;
            for (i = 0; i < num; i++)
            {
              a = vec[i];
              if (a == null) { continue; }  
                
              if (a.spec == 1) //player
              {
                  var ms:Number; var ts:Number;
                  ms = 0.2; ts = 0.1;
                  if (isKeyDown(Keyboard.LEFT)) { a.ang -= ts; }
                  if (isKeyDown(Keyboard.RIGHT)) { a.ang += ts; }
                  if (isKeyDown(Keyboard.UP)) { a.vx+=Math.cos(a.ang)*ms; a.vy+=Math.sin(a.ang)*ms; }
                  if (isKeyDown(Keyboard.DOWN)) {a.vx+=Math.cos(a.ang)*-ms; a.vy+=Math.sin(a.ang)*-ms; }
                  a.vx *= 0.99; a.vy *= 0.99;
                  
                  if (a.reload < gt)
                  if (isKeyDown(Keyboard.SPACE))
                  {
                     a.reload = gt + 10;
                     b = makeNew(vecBull);
                     b.spec = 2; b.ang = a.ang; b.team = a.team;
                     b.cx = a.cx; b.cy = a.cy; b.hp = 100; b.rad = 4;
                     b.vx = Math.cos(a.ang)*4; b.vy = Math.sin(a.ang)*4;                        
                  }//endif
              }//endif  

              if (a.spec == 2) //bullet
              {
                var k:int;
                for (k = 0; k < 4; k++)
                {
                 a.hp -= 1;
                 b = checkCol(a, vecAct);
                 a.cx += a.vx; a.cy+=a.vy;  
                   graphics.drawCircle(a.cx, a.cy, a.rad);
                 if (b != null) { b.hp -= 20; a.hp = -1; break; }
                }
                  if (a.hp <= 0) { vec[i] = null; continue; }    
                continue;
              }//endif               
                
              if (a.spec == 3)  
              {
                  a.ang += (a.vx+a.vy)*0.2;
                if (a.hp <= 0) 
                if (a.rad > 8)
                {
                  b = makeNew(vecAct);
                  b.rad = a.rad *0.5; b.team = a.team;
                  b.cx = a.cx; b.cy = a.cy; b.spec = a.spec;
                  b.vx = -a.vy *0.75; b.vy = a.vx *0.75;    

                  b = makeNew(vecAct);
                  b.rad = a.rad *0.5; b.team = a.team;
                  b.cx = a.cx; b.cy = a.cy; b.spec = a.spec;
                  b.vx = a.vy *0.75; b.vy = -a.vx *0.75;    
             
                }   
              }
                
              if (a.vx > 0 && a.cx > 435) { a.vx *= -1; }  
              if (a.vx < 0 && a.cx < 0) { a.vx *= -1; }  
              if (a.vy > 0 && a.cy > 435) { a.vy *= -1; }  
              if (a.vy < 0 && a.cy < 0) { a.vy *= -1; }  

              a.cx += a.vx; a.cy+=a.vy;  
       
                if (a.hp <= 0) { vec[i] = null; continue; }    
          
           
              graphics.drawCircle(a.cx, a.cy, a.rad);
              graphics.moveTo(a.cx, a.cy);
              graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
       
            }//nexti     
            
        }//upvec
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);

            gt += 1;            
                
            upVec(vecAct);
            upVec(vecBull);
            
        }//onenter
        
        
    }//classend
}

internal class xActor
{
  public var spec:int = 0;    
    
  public var cx:Number = 0;
  public var cy:Number = 0;
 
  public var vx:Number = 0;
  public var vy:Number = 0;
  
  public var ang:Number = 0;  
    
  public var rad:Number = 8;  
    
  public var hp:Number = 20;  

 public var reload:int = 0;    
    
 public var team:int = 0;   
    
}//xactor