fc2ブログ

ピース並び替えゲーム

2008-03-31 | 22:55

マウスクリックした位置のピースが空きエリアに移動します。
(バグっている可能性もありますので、遊ぶ方はそのつもりで・・)
package {
    import flash.display.*;
    import flash.filters.*;
    import flash.events.*;
    import flash.geom.*;

    import caurina.transitions.Tweener;

    [SWF(width='500',height='600',backgroundColor='0xffffff')]
        public class Shuffle extends Sprite {
            [Embed(source="monalisa.jpg")]
                private var myImage:Class;
            private var CNT:int = 10;
            private var images:Array = [];
            private var blank:int;
            private var segmentW:int;
            private var segmentH:int;
            private var processing:Boolean = false;
            private var image:Bitmap;
            public function Shuffle( ) {

                stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                splitImage();
            }

            private function splitImage():void{
                var bm:Bitmap = new myImage();
                segmentW = bm.width/CNT;
                segmentH = bm.height/CNT;
                for(var y:int = 0 ; y < CNT ; y++){
                    for(var x:int = 0 ; x < CNT ; x++){
                        var bd:BitmapData = new BitmapData(segmentW, segmentH);
                        var rect:Rectangle = new Rectangle(segmentW*x, segmentH*y ,segmentW, segmentH);
                        bd.copyPixels(bm.bitmapData,rect,new Point(0,0));	
                        var segmentBm:Bitmap = new Bitmap(bd);
                        images.push(segmentBm);
                    }
                }
                shuffleImage(images.length - 2);
                for(var i:int = 0 ; i < images.length - 1 ; i++){
                    images[i].x = Math.floor(i/CNT) * segmentW;
                    images[i].y = (i%CNT)*segmentH;
                    addChild(images[i]);
                }

                blank = images.length - 1;
            }

            private function shuffleImage(i:int) : void{

                if(i > 0){
                    var j:int = Math.floor(Math.random() * (i + 1));

                    if(i != j){
                        var bm:Bitmap= images[i];
                        images[i] = images[j];
                        images[j] = bm;
                    }
                    shuffleImage(--i);
                }
            }

            private function onMouseDown(e:*):void{
                if(processing || 
                        stage.mouseX > segmentW*CNT ||
                        stage.mouseY > segmentH*CNT)
                    return;

                var i:int = Math.floor(stage.mouseX / segmentW) * CNT + 
                    Math.floor(stage.mouseY / segmentH) ;
                
                image = images[i];
                setChildIndex(image,numChildren - 1) ;

                processing = true;

                Tweener.addTween(image, {x: Math.floor(blank/CNT) * segmentW,
                        y: (blank%CNT) * segmentH,
                        time:1, transition:"easeOutBack",
                        onComplete:function():void{
                        processing = false;
                        }
                        } );
                images[blank] = images[i];
                blank = i;
            }
        }
}


スポンサーサイト



Comment

動いてる途中でもピースを動かせるようにすればいいかなーとか

  • 2008-03-31 | 23:16 |
  • 有為 URL :
  • edit

うーん 誰かが改良してくれるのを期待します(笑

  • 2008-04-01 | 07:32 |
  • yamasv URL :
  • edit

Post a comment

Secret