flash on 2015-8-5

by mutantleg
♥0 | Line 147 | Modified 2015-08-05 05:19:08 | 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/cfRe
 */

package {
    import flash.events.KeyboardEvent;
    import flash.events.Event;
    import flash.utils.Dictionary;
    import flash.display.Sprite;
    
    public class FlashTest extends Sprite {
        public function FlashTest() {

            reset();
          
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKup);            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);  
        }//ctor
        
        public var gameState:int = 0;
       
        public function reset():void
        {
            vecAct = new Vector.<xActor>(0, false);
            vecItem = new Vector.<xActor>(0, false);
          
            var a:xActor;
            a = new xPlayer(); a.cx=230; a.cy=230;
            addActor(a);
            
            var i:int;
            for (i=0;i<32;i+=1)
            {
              a = new xPellet();
              a.cx = Math.random()*465;
              a.cy = Math.random()*465;
              addActorx(a, vecItem);  
            }//nexti          
        }//reset

        public function onEnter(e:Event):void
        { 
            if (gameState == 1)
            { reset(); gameState = 0; }
        
            graphics.clear();
            graphics.lineStyle(2, 0);

            updateVec(vecAct);
            updateVec(vecItem);
            thinkVec(vecAct, gt);            
            gt+=1;

            drawVec(vecItem);            
            drawVec(vecAct);            
            
        }//onenter
        
        public function drawVec(vec:Vector.<xActor>):void
        {
            var i:int; var num:int; var a:xActor; 
            num = vec.length;
            for (i=0;i<num;i+=1)
            {
               a = vec[i];
               
               graphics.drawRect(a.cx-a.xrad,a.cy-a.yrad,a.xrad*2,a.yrad*2);
                
            }//nexti            
        }//drawvec
      
        public var gt:int = 0;

        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 { if(k<0||k>=512){return false;} return vecKey[k];}
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false); 
       
        public var vecAct:Vector.<xActor>;
        public var vecItem:Vector.<xActor>;
       
        public function addActor(a:xActor):void    { addActorx(a, vecAct); }      
    
        public var dictAct:Dictionary = new Dictionary();   public var curId:int = 1;
        public function addActorx(a:xActor, vec:Vector.<xActor>):void
        { a.id = curId; curId += 1;   vec.push(a);   dictAct[a.id] = a;      a.game = this;      a.init();  }    
        public function getActor(id:int):xActor { return dictAct[id]; }             
    
        public function updateVec(vec:Vector.<xActor>):void
        { var bRemDead:Boolean; bRemDead = false;
          var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) {  bRemDead = true; continue; }
           if (a.asleep) { continue; } a.update();  }//nexti      
          if (bRemDead == false) { return; }      
          var k:int;  num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead == false) { continue; }
            for (k = i; k < num-1; k++){ vec[k] = vec[k + 1]; }
            i -= 1;   a.remove();   vec.pop(); num = vec.length;
            delete dictAct[a.id]; }//nexti
        }//update    
            
        public function thinkVec(vec:Vector.<xActor>, t:int):void
        { var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) { continue; }
           if ((a.id+t)%20 != 0) { continue; } a.think();  }//nexti            
        }//thinkvec 
        
        public function checkCol(b:xActor, vec:Vector.<xActor>):void
        {
          var i:int; var num:int; var a:xActor;   num = vec.length;
          for (i = 0; i < num; i++) 
          {
            a = vec[i];  
            if (a.dead) {continue;} if (a==b) {continue;}
            if (b.cx + b.xrad < a.cx - a.xrad) { continue; }  if (b.cx - b.xrad > a.cx + a.xrad) { continue; }   
            if (b.cy + b.yrad < a.cy - a.yrad) { continue; }  if (b.cy - b.yrad > a.cy + a.yrad) { continue; }        
              if (b.handCol(a) == false) { return; }
          }//nexti
        }//checkcol           
            
        
    }//classend
}

internal class xActor
{
    public var game:FlashTest = null;
    public var id:int = -1;
    public var dead:Boolean = false;
    public var asleep:Boolean = false;
    public var hp:Number = 100;
    public var cx:Number = 0;    
    public var cy:Number = 0;
    public var vx:Number = 0;
    public var vy:Number = 0;
    public var xrad:Number = 8;
    public var yrad:Number = 8;

    public function init():void {}    
    public function update():void {}
    public function think():void {}
    public function remove():void {}
    public function handCol(a:xActor):Boolean { return false; }
    
}//xactor

internal class xPellet extends xActor
{
    
}//xpellet

internal class xEffect extends xActor
{
    override public function update():void
    {
       yrad -=1; xrad -=1; if (xrad <= 0) { dead= true; return;} 
    }//update     
}//xeffect

internal class xPlayer extends xActor
{
    override public function update():void
    {
        xrad=12;yrad=12;
        var ms:Number; ms = 8;
         if (game.isKeyDown(38)) { cy -= ms; }
         if (game.isKeyDown(40)) { cy += ms; }
         if (game.isKeyDown(37)) { cx -= ms; }
         if (game.isKeyDown(39)) { cx += ms; } 

        game.checkCol(this, game.vecItem);                        
        
        if (game.vecItem.length<= 0) { game.gameState = 1;  }
                
    }//update

    override public function handCol(a:xActor):Boolean 
    { 
      a.dead = true;
      
      var b:xActor;
       b = new xEffect();
         b.cx=a.cx; b.cy=a.cy;
       game.addActor(b);
      
      return true;
    }//handcol

    
}//xplayer