forked from: #PrayForJapan

by umi_kappa forked from #PrayForJapan (diff: 176)
Copyright Murai ( http://wonderfl.net/user/Murai )
MIT License ( http://www.opensource.org/licenses/mit-license.php )
Downloaded from: http://wonderfl.net/c/djli

@author Takashi Murai (KAYAC)
@see http://twitter.com/search?q=%23prayforjapan
@see http://prayforjapan.jp/
@see http://www.youtube.com/watch?v=O8x6_JHDkhI&feature=player_embedded
♥0 | Line 96 | Modified 2011-08-30 11:58:27 | MIT License
play

ActionScript3 source code

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

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

package {

	import flash.display.Sprite;



    /**
     * @author Takashi Murai (KAYAC)
     * @see http://twitter.com/search?q=%23prayforjapan
     * @see http://prayforjapan.jp/
     * @see http://www.youtube.com/watch?v=O8x6_JHDkhI&feature=player_embedded
     */
    [SWF(backgroundColor="#000000", frameRate="60", width="465", height="465")]
    public class PrayForJapan extends Sprite {

        private var grid:Grid;
        
        private var layer:Sprite;


        public function PrayForJapan() 
		{
			//黒背景
            var background:Sprite = new Sprite();
            background.graphics.beginFill(0x000000, 1);
            background.graphics.drawRect(0, 0, 465, 465);
            background.graphics.endFill();
            addChild(background);
            
			//レイヤー
            layer = new Sprite();
			
            grid = new Grid(47, 47, 40);
            //addEventListener(Event.ENTER_FRAME, onEF);
			
            addChild(background);
            addChild(layer);
			
			//箱の生成
			var box:Sprite;
			do
			{
				box = new Sprite();
				box = grid.create();
				//四角を配置
				layer.addChild(box);
			}
			while (box.y < 465);
        }
    }
}


import flash.display.*;

internal class Grid {

    private var _map:Array = [];
    private var gW:int;
    private var gH:int;
    private var max:int;
    private var scale:int;

    public var emptyPos:int = 0;
    private var loaders:Array = [];
    private var q:int = 0;

    public function Grid(w:int, h:int, max:int):void 
	{
        this.gW = w;
        this.gH = h;
		//最大の倍率
        this.max = max;
		//四角の最小サイズ
        this.scale = 10;
    }

    public function create():Sprite 
	{
        var pointer:int = -1;
        var emptyWidth:int = 0;
		
        for ( var i:int = emptyPos; i < emptyPos + 500 ; i++ ) 
		{
            if ( !_map[i] && pointer == -1 ) 
			{
                pointer = i;
                emptyWidth++;
            } 
			else if ( emptyWidth >= max ) 
			{
                break;
            } 
			else if ( !_map[i] && !( i % gW == 0 && i != emptyPos ) ) 
			{
                emptyWidth++;
            } 
			else if ( pointer != -1 ) 
			{
                break;
            }
        }

		// 10.1 >> 0 = 10 小数点切捨ての高速バージョン
        var ww:int = (Math.random() * emptyWidth) >> 0 + 1;
		
        var p:int = pointer;
        for ( var yy:int = 0; yy < ww; yy++ ) 
		{
            for ( var xx:int = 0; xx < ww; xx++ ) 
			{
                _map[p] = 1;
                p++;
            }
            p += gW - ww;
        }
        emptyPos = pointer + ww;
		
		//座標
        var px:int = pointer % gW * scale;
        var py:int = pointer == 0 ? 0 : (pointer / gW) >> 0 * scale;
		
        var sW:Number = ww * scale;
        var s:Sprite = new Sprite();
		
        s.x = px;
        s.y = py;
		
		//線の描画
        s.graphics.lineStyle(1, 0xCCCCCC, 0.5, true, "none");
        s.graphics.drawRect(0, 0, sW, sW);
        s.graphics.moveTo(0, 0);
        s.graphics.lineTo(sW, sW);
        s.graphics.moveTo(sW, 0);
        s.graphics.lineTo(0, sW);
		
        return s;
    }
}