puzzle(reflectBall)

by ushisantoasobu
シンプルなパズルゲーム。
16枚のパネルをドラッグ&ドロップして
正しい位置に戻してあげてください。
♥0 | Line 170 | Modified 2010-10-01 00:18:11 | MIT License
play

ActionScript3 source code

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

/*--puzzle(reflectBall)--*/

package {
    
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import caurina.transitions.Tweener;
    
    [SWF(width=320, height=320, frameRate=30, backgroundColor=0x000000)]
    
    public class FlashTest extends Sprite {    
        
        private var transition_1_x:int;
        private var transition_1_y:int;  
        private var transition_2_x:int;  
        private var transition_2_y:int;
        private var fromNum:int;
        private var toNum:int;   
        private var arr:Array = new Array();
        private var _arr:Array = randomNumberArr(0,15);
        private var __arr:Array = new Array();
        private var goal_hantei:int = 0; 
        
        public function FlashTest() {
            
            for(var k:int = 0; k<16; k++){
                //__arr[k] = _arr[k];
            }
            
            for(var i:int = 1; i<=16; i++){
                var aaa:gamePanel = new gamePanel(i);
                arr[i-1] = aaa;
                var aaa_x:int = int((_arr[i-1])%4);
                var aaa_y:int = int((_arr[i-1])/4);
                
                _arr[i-1] = arr[i-1];
                
                _arr[i-1].name = i-1;
                _arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_OVER, mouseoverHandler);
                _arr[i-1].panel_cover.addEventListener(MouseEvent.ROLL_OUT, rolloutHandler);
                _arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_DOWN, mousedownHandler);
                _arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_UP, mouseupHandler);
                
                _arr[i-1].x = aaa_x*80;
                _arr[i-1].y = aaa_y*80;
                addChild(_arr[i-1]);
                             
            }
            
        }
        
        private function mouseoverHandler(e:MouseEvent):void{
            if(goal_hantei == 0){
                e.target.alpha = 0.4;
            }
        }
        
        private function rolloutHandler(e:MouseEvent):void{
                e.target.alpha = 0.05;
        }
        
        private function mousedownHandler(e:MouseEvent):void{
            if(goal_hantei == 0){
                fromNum = e.target.parent.name;        
            }
        }
        
        private function mouseupHandler(e:MouseEvent):void{
            if(goal_hantei == 0){
                toNum = e.target.parent.name;
            
                transition_1_x = _arr[fromNum].x;
                transition_1_y = _arr[fromNum].y;
                transition_2_x = _arr[toNum].x;
                transition_2_y = _arr[toNum].y;
            
                if(fromNum != toNum){
                
                    goal_hantei = 1;
                    Tweener.addTween(_arr[fromNum], {x:transition_2_x, y:transition_2_y, time:1.0});    
                    Tweener.addTween(_arr[toNum], {x:transition_1_x, y:transition_1_y, time:1.0, onComplete:goalHanteiHandler});        
                
                }
            }
        }
        
        private function goalHanteiHandler():void{
            
            goal_hantei = 0;
            var hantei:int = 0;
            for(var i:int = 0; i<16; i++){
                    if(_arr[i].x ==  int(i%4)*80 && _arr[i].y == int(i/4)*80){
                        hantei++;
                        if(hantei == 16){
                            goal_hantei = 1;
                            var goal:goal_sign = new goal_sign();
                            addChild(goal);
                            goal.x = 160;
                            goal.y = 160;
                            goal.alpha = 0;
                            Tweener.addTween(goal, {alpha:1, time:1.8, delay:1.0});
                        }
                    }
                    else{
                        break;
                        
                    }
                }
        }


        
        //////////////////////////////////////////////////////////////
        private function randomNumberArr( s:int , e:int ):Array {
            var len:int = e-s;
            var arr:Array = new Array(len);
            var an:int = 0;
            var i:int = 0;
            for( i = s ; i <= e ; i++){
                arr[ an ] = i;
                an++;
            }
    
            var rarr:Array = new Array();
            for( i = 0 ; i <= len ; i++ ){ 
                var r:int = Math.random() * arr.length >> 0;
                var p:int = arr[ r];
                arr.splice(r,1);
                rarr.push( p );
            }
    
            arr = null;
            return rarr;
        } 
        /////////////////////////////////////////////////////////////
    }
}


//
import flash.display.Sprite;
import flash.events.Event;

class gamePanel extends Sprite{
    
    private var data_x:int;
    private var data_y:int;
    private var panel_x_pos:int;
    private var panel_y_pos:int;
    private var panel_Length:int = 80;
    private var _ball_Radius:int;
    public var panel_cover:panel_mask = new panel_mask();
    
    public function gamePanel(num:int){
        
        graphics.beginFill(0x000000, 0.1);
        graphics.lineStyle(1, 0x333333);
        graphics.drawRect(0,0,panel_Length,panel_Length);
        graphics.endFill();
        
        data_x = 4;//int(Math.random()*3)+3;
        data_y = 3;//int(Math.random()*3)+3;
        if(data_x == data_y){
            data_y -= 1;
            }

        var masking:panel_mask = new panel_mask();
        
        panel_x_pos = (num - 1) % 4;
        panel_y_pos = (num - 1) / 4;
        
        var ball:gameBall = new gameBall();
         
        ball.x = 100 - panel_x_pos * 80;
        ball.y = 100 - panel_y_pos * 80;
        _ball_Radius = ball.ball_Radius;
        ball.addEventListener(Event.ENTER_FRAME, ballEventHandler);
        addChild(ball);
        addChild(masking);
        
        panel_cover.alpha = 0.05;
        addChild(panel_cover);
        
        ball.mask = masking;
        
    }
    
    private function ballEventHandler(e:Event):void{
        
        e.target.x += data_x;
        e.target.y += data_y;
        
        if(e.target.x > panel_Length * 4 - _ball_Radius - panel_x_pos * 80|| e.target.x < 0 + _ball_Radius - panel_x_pos * 80){
            data_x *= -1;
        } 
        
        if(e.target.y > panel_Length * 4 - _ball_Radius - panel_y_pos * 80|| e.target.y < 0 + _ball_Radius - panel_y_pos * 80){
            data_y *= -1;
        } 
        
    }   

}


//
class gameBall extends Sprite{
    
    //import flash.filters.GlowFilter;
    
    public var ball_Radius:int = 70;
    
    public function gameBall(){
        
        graphics.beginFill(0xffffff, 1);
        graphics.drawCircle(0,0,ball_Radius);
        graphics.endFill();
        
    }
}

//
class panel_mask extends Sprite{
    
    public function panel_mask(){
        
        graphics.beginFill(0xaaaaaa, 1);
        graphics.drawRect(0,0,80,80);
        graphics.endFill();
        
    }
}

class goal_sign extends Sprite{
    
    public function goal_sign(){
        
        graphics.lineStyle(10, 0xff0000, 1);
        graphics.drawCircle(0,0,40);
        
    }
}

Forked