Life

by flashrod
♥0 | Line 60 | Modified 2010-01-03 22:46:51 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.*;
    import flash.events.*;
    public class Life extends Sprite {
        private var W:int=46,H:int=46,T:int=10,i:int,j:int,r:int,u:int,v:int,p:Array=[],q:Array=[],t:Array,f:Array=[[0,1,0],[1,0,0],[1,1,1]];
        public function Life() {
            for (j=0; j<H; ++j) {
                p[j]=[];
                q[j]=[];
                for (i=0; i<W; ++i)
                    p[j][i]=0;
            }
            addEventListener(Event.ENTER_FRAME,function(e:Event):void {
                for (j=0; j<H; ++j) {
                    for (i=0; i<W; ++i) {
                        r=0;
                        for (v=-1; v<2; ++v)
                            for (u=-1; u<2; ++u)
                                if (u||v)
                                    r+=g(i+u,j+v);
                        q[j][i]=p[j][i]?((r==2||r==3)?1:0):((r==3)?1:0);
                    }
                }
                t=p;
                p=q;
                q=t;
                graphics.clear();
                for (j=0; j<H; ++j) {
                    for (i=0; i<W; ++i) {
                        if (p[j][i]) {
                            graphics.beginFill(0);
                            graphics.drawRect(i*T,j*T,T,T);
                        }
                    }
                }
            });
            stage.addEventListener(MouseEvent.MOUSE_MOVE,function(e:MouseEvent):void {
                u=e.stageX/T;
                v=e.stageY/T;
                for (j=0; j<f.length; ++j)
                    for (i=0; i<f[j].length; ++i)
                        s(u+i,v+j,g(u+i,v+j)|f[j][i]);
            });
        }
        private function g(x:int,y:int):int {
            if (y< 0) y+=H;
            if (y>=H) y-=H;
            if (x< 0) x+=W;
            if (x>=W) x-=W;
            return p[y][x];
        }
        private function s(x:int,y:int,v:int):void {
            if (y< 0) y+=H;
            if (y>=H) y-=H;
            if (x< 0) x+=W;
            if (x>=W) x-=W;
            p[y][x]=v;
        }
    }
}