In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: ランダムに降ってきて敷き詰める。forked from:forked from: 四角を敷き詰める。

Get Adobe Flash player
by lepere 12 Jul 2012
    Embed
/**
 * Copyright lepere ( http://wonderfl.net/user/lepere )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/7l0W
 */

// forked from meika_kouri's ランダムに降ってきて敷き詰める。forked from:forked from: 四角を敷き詰める。
// forked from meika_kouri's 上から降ってきて敷き詰める。forked from: 四角を敷き詰める。
// forked from meika_kouri's 四角を敷き詰める。
package {
    import flash.events.Event;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        private var kosuuTate:uint =  15;           //いまさらながら縦横の個数を変えやすくしてみる
        private var kosuuYoko:uint = kosuuTate;  //もちろんここを別にすると長方形に敷き詰まる
        private var sceneNo:uint = 0; //何列目を落としたか
        private var squeres:Vector.<Shape> = new Vector.<Shape>();
        private var line:Number = 20; //一辺の幅
        private var centerX:Number = stage.stageWidth / 2;
        private var centerY:Number = stage.stageHeight / 2;
        private var harfTate:Number = ((kosuuTate - 1)/ 2);  //縦の個数の半分
        private var harfYoko:Number = ((kosuuYoko - 1)/ 2);  //横の(同上)
        //private var i:uint = 0; //一個ずつ落とす用
        
        public function FlashTest() {
            //同じ四角をVectorに入れて位置をずらす
            for(var i:uint = 0; i < kosuuTate; i++){
                for(var j:uint = 0; j < kosuuYoko; j++){
                    var nowIndex:uint = i * kosuuYoko + j; //左上から横優先
                    squeres[nowIndex] = drawSquere(line);
                    //画面中央基準なのでカウンタから横の数の半分引く
                    squeres[nowIndex].x = centerX + (harfYoko - j) * (line + 5); 
                    squeres[nowIndex].y = -line * (Math.random() * 5 + 1); //画面の上に置いておく 
                    /*マイナス一辺の長さを掛けているのは、より自然なランダムっぽさ(?)にするため。
                    / カッコ内の係数はお好みで変更可だが、加算部分を削ると初期配置が画面内に入ることがあるので注意*/
                    addChild(squeres[nowIndex]);
                }

            }
            addEventListener(Event.ENTER_FRAME, Drop);

         }
         private function Drop(e:Event):void{
             if(sceneNo >= kosuuTate) { //全部落ちていたら外す
                 removeEventListener(Event.ENTER_FRAME, Drop);
                 return;}
             var target:uint = kosuuTate - sceneNo - 1;  //落とす列
             var targetBase:uint = target * kosuuYoko; //落とす列の最初の四角の番号
             
             for(var i:uint = 0; i < kosuuYoko; i++){//まとめて一列落とす
                 squeres[targetBase + i].y += 30; //毎フレーム5落とす
                 //目標地点に着いてたらそこに置いておく
                 if(squeres[targetBase + i].y > centerY + (target - harfTate) * (line + 5)){
                  squeres[targetBase + i].y = centerY + (target - harfTate) * (line + 5);
                  //i++;//一個ずつ落とす時用。でもランダムな初期配置の意義が薄れそう
                 }
             }
             //全部位置が決まってれば列を変える
             var isPut:Vector.<Boolean> = new Vector.<Boolean>();
             for(var j:uint = 0; j < kosuuYoko; j++){
                 if(squeres[targetBase + j].y == centerY + (target - harfTate) * (line + 5)){
                     isPut[j] = true;
                 }else{
                     isPut[j] = false;
                 }
             }
             for(j = 0; j < kosuuYoko; j++){
                 if(!isPut[j])return; //一個でも目標地点に着いてないならここで終わり
             }

             sceneNo++;  //ここまで来たら段を変える
             //i = 0;//一個ずつの時は忘れずリセット
         }

        
        //中央を基準点にした四角Shape。
        private function drawSquere(line:Number):Shape{
            var harfLine:Number = line / 1.5;
            var squere:Shape = new Shape();
            var g:Graphics = squere.graphics;
            g.beginFill(0x00FFFF);
            g.moveTo(-harfLine, -harfLine);
            g.lineTo(harfLine, -harfLine);
            g.lineTo(harfLine, harfLine);
            g.lineTo(-harfLine, harfLine);
            g.lineTo(-harfLine, -harfLine);
            
            return squere;
                    }

    }
}