自分を取ると1UPです!

by seino
迷走しすぎた。中身がグダグダなのでリファクタリング必須><
最初のほうが何故か必ずズレるのでその辺も修正する。
♥0 | Line 119 | Modified 2010-05-26 23:05:11 | MIT License
play

ActionScript3 source code

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

//迷走しすぎた。中身がグダグダなのでリファクタリング必須><
//最初のほうが何故か必ずズレるのでその辺も修正する。
package {
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.utils.Timer;
  
    [SWF(width="300", height="300", backgroundColor="#FFFFFF", frameRate="50")]    
     public class FlashTest extends Sprite {
        private const R:int = 0xDC2900;
        private const G:int = 0x8B7300;
        private const Y:int = 0xFFA53B;
        private var size:int = 15;
        private var dotsArr:Array = new Array();
        private var timer:Timer;
        private var cnt:int = 0;
        private var i:int;
        
        public function FlashTest(){
         var cells:MovieClip = drawCell(1,0xFFFFFF);//グリッドの色を背景色と同じにして隠す。
         stage.addChild(cells);
          for(i=0;i<dotsArr.length;i++){
            stage.addChild(dotsArr[i]);
          }
          
          timer = new Timer(100);
          timer.addEventListener("timer", timerHandler);
          timer.start();
        }
        
        private function timerHandler(e:TimerEvent):void {
          dotsArr[cnt].moveTorigger();
          cnt++;
          if(cnt == dotsArr.length){
            stage.removeEventListener("timer", timerHandler);
            timer.stop();
          }
        }
      
        //セルを描画 -これはもう素直にGridクラスとかにしちゃうべきだった。
        private function drawCell(bold:int,color:int):MovieClip{
          var cells:MovieClip = new MovieClip();
          var cellsArr:Array = [[0,0,0,R,R,R,R,R,0,0,0,0]
                               ,[0,0,R,R,R,R,R,R,R,R,R,0]
                               ,[0,0,G,G,G,Y,Y,G,Y,0,0,0]
                               ,[0,G,Y,G,Y,Y,Y,G,Y,Y,Y,0]
                               ,[0,G,Y,G,G,Y,Y,Y,G,Y,Y,Y]
                               ,[0,G,G,Y,Y,Y,Y,G,G,G,G,0]
                               ,[0,0,0,Y,Y,Y,Y,Y,Y,Y,0,0]
                               ,[0,0,G,G,R,G,G,G,0,0,0,0]
                               ,[0,G,G,G,R,G,G,R,G,G,G,0]
                               ,[G,G,G,G,R,R,R,R,G,G,G,G]
                               ,[Y,Y,G,R,Y,R,R,Y,R,G,Y,Y]
                               ,[Y,Y,Y,R,R,R,R,R,R,Y,Y,Y]
                               ,[Y,Y,R,R,R,R,R,R,R,R,Y,Y]
                               ,[0,0,R,R,R,0,0,R,R,R,0,0]
                               ,[0,G,G,G,0,0,0,0,G,G,G,0]
                               ,[G,G,G,G,0,0,0,0,G,G,G,G]
                              ];
                              
          for(var v:int=0;v<cellsArr.length;v++){
             for(var f:int=0;f<cellsArr[v].length;f++){
               var cell:MovieClip = new MovieClip();
               cell.graphics.lineStyle(bold,color);
               cell.graphics.drawRect(0 ,0 ,size ,size);
               cell.x = size*f; 
               cell.y = size*v;
               cells.addChild(cell)                  
               if(cellsArr[v][f] != 0){
                  var d:MovieClip = new dot(cellsArr[v][f]
                                        ,size
                                        ,Math.random() * stage.stageWidth
                                        ,Math.random() * stage.stageHeight 
                                        ,cell.x
                                        ,cell.y);
                  dotsArr.push(d);
               }
             }
          }
          return cells;
        }
        
    }
}

   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.events.Event;
   class dot extends MovieClip{
     private var gX:int; //ゴール地点X
     private var gY:int; //ゴール地点Y
     public function dot(color:int
                         ,size:int
                         ,_x:int
                         ,_y:int
                         ,_gX:int
                         ,_gY:int):void{
        gX = _gX;
        gY = _gY;
         x = _x;
         y = _y;
                 
        graphics.beginFill(color, 1);
        graphics.drawRect(0,0,size,size);
        graphics.endFill();
          
        addEventListener(Event.ENTER_FRAME
                        ,function():void{
                           if(y + height < stage.stageHeight){
                              y += 3;
                           }else{
                              y = stage.stageHeight - height;
                              removeEventListener(Event.ENTER_FRAME, arguments.callee);
                           }
                        });
     }  
     
     public function moveTorigger():void{
        addEventListener(Event.ENTER_FRAME ,movingDot);
     }
     
     public function movingDot(e:Event):void{
        y = (y + gY) /2;
        x = (x + gX) /2;
       
        if(Math.round(y) == gY && Math.round(x) == gX){
           y = gY;
           x = gX;
          removeEventListener(Event.ENTER_FRAME ,movingDot);
        }
     }
  }

Forked