var tate :Number = 15; // タテ var yoko :Number = 20; // ヨコ var size :Number = 30; // ブロックのサイズ var col :Number = 5; // 色数 var field :Array = new Array(); // 各マスの値を保持 var field2 :Array = new Array(); // ブロック消す時用 var num :Number = 0; // 連接数 // --------------------------------- // 配列初期化 for ( i = 0; i < tate; i ++ ) { field[ i ] = new Array(); field2[ i ] = new Array(); for ( k = 0; k < yoko; k ++ ) { field[ i ][ k ] = Math.floor( Math.random() * col ) + 1; field2[ i ][ k ] = 0; } } init(); /* 初期化 */ function init ( ) :Void { for ( i = 0; i < tate; i ++ ) { for ( k = 0; k < yoko; k ++ ) { // ブロックの配置 var mc :MovieClip = _root.attachMovie( "block", "b" + i + "_" + k, _root.getNextHighestDepth(), { _x : k*size, _y : i*size } ); mc.px = k; mc.py = i; mc.gotoAndStop( field[ i ][ k ] + 1 ); // マウス押した時のイベント設定 mc.onPress = mousePress; } } } /* マウスで押した時 */ function mousePress ( ) :Void { num = 0; serch( this.px, this.py ); // クリックしたマスから再帰探索 if ( 2 <= num ) setArray(); // 連接数 2 以上の時、消す処理 else field2[ this.py ][ this.px ] = 0; // 連接数 1 以下 } /* 再帰探索 */ function serch ( px :Number, py :Number ) :Void { var c :Number = field[ py ][ px ]; if ( c == 0 || field2[ py ][ px ] == -1 ) return; field2[ py ][ px ] = -1; // 探索済み -1 を代入 num ++; // 連接数 +1 if ( c == field[ py ][ px+1 ] ) serch( px+1, py ); // 右 if ( c == field[ py ][ px-1 ] ) serch( px-1, py ); // 左 if ( c == field[ py+1 ][ px ] ) serch( px, py+1 ); // 下 if ( c == field[ py-1 ][ px ] ) serch( px, py-1 ); // 上 } /* 配列 & グラフィック更新 */ function setArray ( ) :Void { for ( i = 0; i < tate; i ++ ) { //trace( field2[ i ] ); for ( k = 0; k < yoko; k ++ ) { if ( field2[ i ][ k ] == -1 ) { field2[ i ][ k ] = 0; for ( t = i; 0 <= t; t -- ) { if ( field[ t-1 ][ k ] != undefined ) field[ t ][ k ] = field[ t-1 ][ k ]; else field[ t ][ k ] = 0; _root[ "b" + t + "_" + k ].gotoAndStop( field[ t ][ k ] + 1 ); } } } } // --------------------------- for ( k = yoko-1; 0 <= k; k -- ) { // タテ一列消えていたときの処理 if ( field[ tate-1 ][ k ] == 0 && 0 < field[ tate-1 ][ k+1 ] ) { for ( i = 0; i < tate; i ++ ) { for ( t = k; t < yoko; t ++ ) { if ( field[ i ][ t+1 ] != undefined ) field[ i ][ t ] = field[ i ][ t+1 ]; else field[ i ][ t ] = 0; _root[ "b" + i + "_" + t ].gotoAndStop( field[ i ][ t ] + 1 ); } } } } }