Particle Puzzle

by gameegg
♥0 | Line 122 | Modified 2011-10-18 19:46:08 | MIT License
play

ActionScript3 source code

/**
 * Copyright gameegg ( http://wonderfl.net/user/gameegg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/u2qF
 */

package {
    import flash.geom.ColorTransform;
    import flash.filters.BlurFilter;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Point;
    public class Nemo extends Sprite {
        
        private var bitd:BitmapData;
        private var bit:Bitmap;
        private var box:Array = [];
        private var bf:BlurFilter = new BlurFilter(32,32,3);
        private var tf:ColorTransform = new ColorTransform(1,1,1,0.5);
        private var zp:Point = new Point(0,0)
        
        public function Nemo() {
            
            bitd = new BitmapData(465,465,false,0x000000);
            bit = new Bitmap(bitd);
            addChild(bit);
            
            for(var i:int = 0; i<232; ++i){
                
                for(var j:int = 0; j<232; ++j){
                    var dot:Dot = new Dot( new Point(1+2*i,1+2*j) );
                    box.push(dot);
                }

            }

            addEventListener("enterFrame",ef);
            stage.addEventListener("mouseDown",md)
        }
        
        private function ef(e:Event):void{
            bitd.colorTransform(bitd.rect,tf);
          //  bitd.applyFilter(bitd,bitd.rect,zp,bf);
            for(var k:int=0;k<box.length;++k){
                box[k].update();
                bitd.setPixel( box[k].x, box[k].y, 0x229911);
            }
        }
        
        private function md(e:MouseEvent):void {
            for(var k:int=0;k<box.length;++k){
                box[k].init();
            }
        }


    }
}
import flash.geom.Point;

internal class Dot {
    
    public var targetPoint:Point
    public var x:Number=0;
    public var y:Number=0;
    public var a:Boolean=false;
    public var c:Boolean=false;
    public var end:Boolean=false;
    
    public function Dot(itargetPoint:Point) {
        targetPoint = new Point(itargetPoint.x, itargetPoint.y);
        
        init();
    }
    
    public function update():void{
        if(!end){
        if((a&&c) || (!a&&!c)){
            if(x < targetPoint.x) {
                x++;
                if(x >= targetPoint.x){
                    if(!a && !c) c = true
                    else if(a && c) end = true
                }

            }
            else if(x >= targetPoint.x) {
                x--;
                if(x < targetPoint.x){
                    if(!a && !c) c = true
                    else if(a && c) end = true
                }
            }
        }
        if((a&&!c) || (!a&&c)){//a가 트루인놈은 이거먼저.
            if(y < targetPoint.y) {
                y++;
                if(y >= targetPoint.y){
                    if(a && !c) c = true
                    else if(!a && c) end = true
                }
            }
            else if(y >= targetPoint.y) {
                y--;
                if(y < targetPoint.y){
                    if(a && !c) c = true
                    else if(!a && c) end = true
                }
            }
        }
        }
        else {
            x = targetPoint.x;
            y = targetPoint.y;
        }


    }
    
    
    public function init():void{
        end = false
        a = false
        c = false
        if(Math.random()<0.5) x = -int(Math.random()*465);
        else x = 465+int(Math.random()*465);
        if(Math.random()<0.5) y = -int(Math.random()*465);
        else y = 465+int(Math.random()*465);
        
        if(Math.random()*8 < 2) {
            x = -int(Math.random()*465);
            y = int(Math.random()*465);
        }
        else if(Math.random()*8 < 4){
            x = 465 + int(Math.random()*465);
            y = int(Math.random()*465);
        }
        else if(Math.random()*8 < 6){
            x = int(Math.random()*465);
            y = 465+int(Math.random()*465);
        }
        else if(Math.random()*8 < 6){
            x = int(Math.random()*465);
            y = -int(Math.random()*465);
        }


        
        
        
        if(Math.random()<0.5) a=true
    }



}