miscellaneous

ピース並び替えゲーム

マウスクリックした位置のピースが空きエリアに移動します。
(バグっている可能性もありますので、遊ぶ方はそのつもりで・・)
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;
            }
        }
}





  1. 2008/03/31(月) 22:55:43|
  2. ActionScript 3.0
  3. | トラックバック:0
  4. | コメント:2
<<Subdivision Curves | ホーム | Flag>>

コメント

動いてる途中でもピースを動かせるようにすればいいかなーとか
  1. URL |
  2. 2008/03/31(月) 23:16:26 |
  3. 有為 #-
  4. [ 編集]

うーん 誰かが改良してくれるのを期待します(笑
  1. URL |
  2. 2008/04/01(火) 07:32:58 |
  3. yamasv #-
  4. [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://yamasv.blog92.fc2.com/tb.php/150-955a34fb
この記事にトラックバックする(FC2ブログユーザー)
Google

プロフィール

Author:yamasv@gmail.com
コメント、トラックバック、リンクはお気軽に

最近の記事

ブログ検索

カテゴリー

-->

カレンダー

07 | 2008/08 | 09
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -

過去ログ

最近のコメント

最近のトラックバック

RSSフィード

リンク

このブログをリンクに追加する

全ての記事を表示する

全ての記事を表示する



あわせて読みたい